Неисправность, продлевающая регистрацию в 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 вместо этого. Возьми сундук здесь.

Фонд аддиу

Другие вопросы по тегам