目前我有
lh $t1, 0($t1)
对于将 $t1 从 16 位扩展到 32 位的符号,但这不起作用。有没有一种简单的方法来签署 MIPS 中的扩展寄存器?
我理解你的问题的方式,即使你试图使用lh
你实际上想要符号扩展的半字值 $t1
而不是半字$t1
指向的值。
您可以通过两个班次完成此操作:
sll $t1, $t1, 16
sra $t1, $t1, 16
如果您从 0x8000 开始,则在第一次班次后您将获得 0x80000000,在第二次班次后获得 0xffff8000。
如果您从 0x7fff 开始,则在第一次班次后您将获得 0x7fff0000,在第二次班次后获得 0x7fff。
lh
确实有效,但您需要确保您正在加载的内容是由.half
而不是 .word
因为宽度和 little-endian 考虑定义的:
main:
la $t5,myhalf
lh $t1,0($t5)
nop
.data
myhalf: .half 0x8000 # this works
# these do _not_
myword: .word 0x80000000
myword2: .word 0x8000