загрузка байтовой инструкции в MIPS - PullRequest
2 голосов
/ 06 марта 2019

Я изучаю архитектуру компьютера с помощью инструкций MIPS.У меня есть вопрос:

Память в 0x10000000 содержит 0x80 Регистр $ 5 содержит 0x10000000 Что помещается в регистр $ 8 после выполнения lb $ 8,0 ($ 5)?

Я думал, когдавызывается загрузочный байт, он возьмет 8 бит 0x80 [10000000] с адреса 0x10000000 и загрузит его в первые 8 бит регистра $ 8 и заполнит оставшиеся биты нулями, получая ответ 00000080. Но правильный ответв списке FFFFFF80.Я не уверен, что понимаю это.Кто-нибудь может помочь объяснить это?

1 Ответ

2 голосов
/ 06 марта 2019

Упомянутая здесь инструкция: lb, которая загружает один байт в регистр путем расширения знака до размера слова.Это означает, что если старший значащий бит установлен в 1, он также заполнит оставшиеся 24 бита 1.Это сделано для того, чтобы сохранить значение дополнения до двух в байте в 32-битном представлении.

Если ваш байт будет 0100 1010, расширение знака заполнит его 0 как 0000 000... 0100 1010.

Если ваш байт будет 1011 0101, расширение знака заполнит его 1 как 1111 111... 1011 0101.

Чтобы избежать этого и всегда дополнять байт 0, вы можете использоватьальтернативная инструкция lbu, которая не выполняет расширение знака, но вместо этого дополняет байт 0.Это сохраняет беззнаковое значение байта, так как для них не используется комплемент twos.

...