Зачем sw инструкция в мипах с использованием байта в качестве единицы смещения? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть вопрос о единицах смещения, используемых в инструкциях MIPS32.Я только что заметил, что инструкции доступа к памяти, такие как lw $t0, offset($s1), имеют offset единицы байт , в то время как инструкции ветвления, такие как beq $r1, $r2, L1 и jump j SOMEWHERE, имеют единицы word .

IIRC, MIPS требует, чтобы все данные / инструкции были сохранены выровнены в памяти по адресу, кратному 4, т.е. 0x0, 0x4, 0x8, ... etc.Если это так, то почему бы не включить offset в lw/sw единицы word , чтобы диапазон был больше?Это из-за lb/sb, который использует единицу байта?Так что Особых случаев недостаточно, чтобы нарушать правила ["] Хороший дизайн требует хороших компромиссов. [."] * Здесь применимо 1024 *?

Мне также интересно, что произойдет, если я использую lw для загрузки данных по адресу, который не кратен 4?

...