2016-11-21 2 views
1

Я понимаю, что регистры в памяти 32 бит. Я понимаю, что фунт будет загружать содержимое из памяти в нижние 8 бит регистра, и что если я сделалЗапись в следующий байт регистра

lb $t1, $a3 
lb $t1, 4($a3) 

Второй команда фунтов будет перезаписать содержимое загруженного в первую очередь. Однако есть ли способ записать во второй байт регистра (загрузка из другой части в памяти, а не два байта рядом друг с другом) и сохранить информацию о первом байте?

ответ

0

Я предполагаю, что вы хотите использовать здесь lbu (нагрузка байт без знака), а не lb, потому что вы не хотите, чтобы регистр будет знак расширен (например, копирование байта AA в регистре приведет к 000000AA, и не FFFFFFAA).

Если вы хотите записать вторые байты регистра можно использовать первый lbu для загрузки байта из памяти другого регистра, то сдвиг влево 8 бит, и addu его первоначального реестр.

Например:

lbu $t1, $a3  # 0x000000AA 
lbu $t2, 4($a3)  # 0x000000BB 
sll $t2, $t2, 8  # 0x000000BB -> 0x0000BB00 
addu $t1, $t1, $t2 # 0x000000AA + 0x0000BB00 = 0x0000BBAA 
Смежные вопросы