3

目前我有

lh $t1, 0($t1)

对于将 $t1 从 16 位扩展到 32 位的符号,但这不起作用。有没有一种简单的方法来签署 MIPS 中的扩展寄存器?

4

2 回答 2

4

我理解你的问题的方式,即使你试图使用lh你实际上想要符号扩展的半字 $t1而不是半字$t1指向的值。

您可以通过两个班次完成此操作:

sll $t1, $t1, 16
sra $t1, $t1, 16

如果您从 0x8000 开始,则在第一次班次后您将获得 0x80000000,在第二次班次后获得 0xffff8000。
如果您从 0x7fff 开始,则在第一次班次后您将获得 0x7fff0000,在第二次班次后获得 0x7fff。

于 2016-05-03T05:41:56.680 回答
0

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
于 2016-05-03T05:11:33.183 回答