MIPS中寄存器扩展的故障标志



目前我有

lh $t1, 0($t1)

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

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

你可以通过两个转变来实现这一点:

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

如果你从0x8000开始,那么在第一次移位后会得到0x80000000,在第二次移位后得到0xffff8000
如果你从0x7fff开始,那么在第一次移位后会得到0x7fff0000,在第二次移位后得到0x7ff。

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

相关内容

  • 没有找到相关文章

最新更新