Выполнить инструкцию lb MIPS вручную - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над выполнением инструкций MIPS вручную, и я не совсем понимаю, как это работает. В приведенном ниже примере содержимое в $ t0 изменяется с 0x00001117 до 0x00000080. Я не понимаю почему, хотя. Любая помощь будет великолепна.

lbu $t0, 5($s0)
lbu (i-type, load byte unsigned) 
Registers before                Instruction Registers after
Register       Contents            Register       Contents
$t0         0x00001117          $t0         0x00000080
$s0         0x10010010          $s0         0x10010010
$pc         0x0040008c          $pc         0x00400090


Memory before                   Memory After
Location    Contents            Location    Contents
0x10010010  0x00400004          0x10010010  0x00400004
0x10010014  0x00408008          0x10010014  0x00408008
0x10010018  0x0040001c          0x10010018  0x0040001c

1 Ответ

0 голосов
/ 17 сентября 2018

Предполагается, что схема памяти имеет порядок байтов.

$s0 имеет значение 0x10010010, поэтому 5($s0) относится к значению по адресу 0x10010015.

Содержимое вашей памяти при просмотре в байтах выглядит следующим образом:

            +0 +1 +2 +3
-----------------------
0x10010010: 04 00 40 00
0x10010014: 08 80 40 00
...

Как видите, байт в 0x10010015 равен 0x80. А поскольку lbu расширяет загруженное значение до 32 бит, то верхние 24 бита $t0 очищаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...