Неисправность, продлевающая регистрацию в MIPS
В настоящее время у меня есть
lh $t1, 0($t1)
для знака, расширяющего $t1 с 16 бит до 32 бит, но это не работает. Есть ли простой способ подписать регистры расширения в MIPS?
3 ответа
Решение
Насколько я понимаю ваш вопрос, даже если вы пытались использовать lh
вы на самом деле хотели подписать-расширить значение полуслова$t1
а не полуслово $t1
указывает на.
Вы можете сделать это в две смены:
sll $t1, $t1, 16
sra $t1, $t1, 16
Если вы начали с 0x8000, вы получите 0x80000000 после первой смены и 0xffff8000 после второй.
Если вы начали с 0x7fff, вы получите 0x7fff0000 после первой смены и 0x7fff после второй.
lh
работает, но вы должны быть уверены, что то, что вы загружаете, определяется .half
и не .word
из соображений ширины и порядка байтов:
main:
la $t5,myhalf
lh $t1,0($t5)
nop
.data
myhalf: .half 0x8000 # this works
# these do _not_
myword: .word 0x80000000
myword2: .word 0x8000
Вам нужно addiu вместо этого. Возьми сундук здесь.