2016-05-03 119 views
3

寄存器風吹草動目前我有延伸MIPS

lh $t1, 0($t1) 

從16位擴展$ T1到32位的跡象,但這並不工作。有沒有簡單的方法在MIPS中籤名擴展寄存器?

回答

4

即使您試圖使用lh您確實想要簽名擴展半字值爲$t1而不是半字$t1指向。

你可以用兩個班次做到這一點:

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

如果您爲0x8000開始的時候,第二個後你會得到0x80000000的第一後移,並0xffff8000。
如果你從0x7fff開始,你會在第一次移位後得到0x7fff0000,在第二次移位後得到0x7fff。

+0

就是這樣,謝謝! – JR3652

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