在 MIPS 中扩展寄存器的问题标志

Trouble sign extending a register in MIPS

目前我有

lh $t1, 0($t1)

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

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

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

您可以通过两班倒来完成:

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

如果您从 0x8000 开始,您将在第一次转换后得到 0x80000000,在第二次转换后得到 0xffff8000。
如果你从 0x7fff 开始,你会在第一次转变后得到 0x7fff0000,在第二次转变后得到 0x7fff。