Операции MIPS LUI и SW LB - PullRequest
       1

Операции MIPS LUI и SW LB

0 голосов
/ 26 января 2020

, поэтому я пытаюсь решить эту проблему, она выглядит следующим образом: Принимая во внимание, что адрес $ t0 равен 0x10000000

lui $t0,0x6F90
sw $t0,4($t0)
lb $t0,6($t0)

Какое значение $ t0 в формате с прямым порядком байтов? Итак, после первой операции мы получаем $ t0 = 6F90000, после чего я сохраняю $ t0 в позиции 4, которая в основном дублирует $ t0, поэтому $ t0 = 6F900006F90000. После этого я go в позицию 6 и извлекаю байт, в данном случае 90 и расширяю его сигнал так, чтобы ответ был 0xFFFFFF90, но мой коллега сказал мне, что это неправильно, и не объяснил мне это. Может кто-нибудь сказать, пожалуйста, что я делаю не так

Ответы [ 2 ]

1 голос
/ 26 января 2020

Вы ошиблись в $t0=6F900006F90000. Это, очевидно, не может произойти, поскольку $t0 является 32-битным регистром. sw $t0,4($t0) фактически записывает $t0 в память по адресу 4+$t0. Это означает, что память будет выглядеть следующим образом:

address   value
6F900004:  00
6F900005:  00
6F900006:  90
6F900007:  6F

lb $t0,6($t0) затем загружает байт со знаком с адреса 6+$t0 = 6F900006. Это содержит 90, который равен FFFFFF90, когда знак расширен до 32 бит. Это ваше окончательное значение в $t0.

0 голосов
/ 26 января 2020

У вас есть неверные идеи. Магазин хранит слово в памяти в местах 0x6F900004-0x6F900007.

lui $t0, 0x6F90      # sets $t0 to 0x6F900000
sw  $t0, 4($t0)      # stores to memory at addresses 0x6F900004-0x6F900007; does not change $t0
lb  $t0, 6($t0)      # $t0=FFFFFF90
...