Nano Hash - криптовалюты, майнинг, программирование

Изменение символа в сегменте данных

Я хочу изменить символ в строке. Для этого я загружаю в $t2 символ, представляющий попадание. В этом примере символ " " на 7-й позиции должен измениться на "x". После попытки обновить мою доску с помощью sh $t2, 0($t0) я получаю следующие ошибки:

Exception occurred at PC=0x0040003c
Unaligned adress in store: 0x1001000f

Я думаю, я не могу обновить плату с помощью команды, которую я использовал, не могли бы вы сказать мне, как это сделать правильно? Заранее спасибо :)

 # data segment
        .data
        hit:      .asciiz   "-"
        ship:     .asciiz   "x"
        miss:     .asciiz   "o"
        water:    .asciiz   " "

        board:          .asciiz     "    x xx   x  x      x  x  xxx x  x         x   x         x xxxx  x x       x   xx    x         x xx"

        .text
        .globl main

    main:

        la $t0, board

        # this is position of the array which should be a "x" char at the moment
        addi $t0, $t0, 7

        la $t1, hit
        lhu $t2, 0($t1)     # loading the hit char "-"
        sh $t2, 0($t0)      # ERROR : Here I tried to update the board


        li $v0, 10
        syscall
30.03.2018

Ответы:


1

Вам нужно использовать sb для хранения байта. sh хранит полуслово и должен быть выровнен по двум байтам.

30.03.2018
  • кажется таким очевидным, не могли бы вы объяснить мне, почему мне нужно загрузить половину слова в $t2, даже если это символ длиной 1 байт? 30.03.2018
  • Вы не должны. Вы можете использовать lb для загрузки байта из памяти. Но то, что вы действительно должны сделать, это загрузить немедленное. К сожалению, я не знаком с набором инструкций MIPS, поэтому не знаю, как это сделать. Я думаю, вы используете ори. 30.03.2018
  • ооо да это имеет смысл. Думаю, я немного запутался, потому что lhu работал, и он поместил в мой регистр только 1 байт вместо 2. Вы знаете, почему mips сделали это? Возможно, это так, потому что после того, как я объявлю в сегменте данных, строка mips помещает в и 00, что означает ноль, и я читаю, например, 0078, что будет полусловом, но в регистре он вырезает 00, потому что это не нужно 30.03.2018
  • Да все верно. Он не «вырезал» 00; он загрузил его в биты 15:8 регистра. Если бы вы использовали ascii вместо asciz, в эти биты вставили бы «x». 30.03.2018
  • @prl: используйте li $t1, constant. Это псевдоинструкция, которая использует 1 или 2 инструкции, необходимые для записи константы в регистр. lui и/или ori. (или addiu) stackoverflow.com/questions/49550512/ 30.03.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..