2012-03-01 99 views
0

我正在審查一個測試,我無法弄清楚爲什麼這個答案是0x605040c而不是12,或爲一個後,爲什麼它是而不是123.爲什麼值被存儲在寄存器0x605040c,而不是12?

感謝您的幫助,代碼在下面。我在QtSPIM中運行過它,但我仍然無法弄清楚它!

data 
var1: .byte 12 
var2: .byte 4,5,6 
var3: .word 1,2,3,4,5,6,7,8,9 
    .globl main 
.text 
main: 
la $t1, var1 
la $t2, var2 
la $t3, var3 
lb $a1,1($t2) #$a1= 0x5 
lw $a1, 0($t1) #$a1= 0x605040c 
lui $a1,0x123 #$a1= 0x
lw $a1, 0($t3) #$a1= 0x1 
sll $a1,$a1,3 #$a1= 0x8 

回答

2

回答您的問題通常可以通過閱讀reference document關於您使用的每個MIPS指令來回答。

我會假設你的MIPS機器little-endian

首先,讓我們看一下你的記憶:

Address:  0  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 36 37 38 39 
Value (hex): 0C 04 05 06 01 00 00 00 02 00 00 00 03 00 00 00 ... 09 00 00 00 
Label:  ^var1 ^var2  ^var3 

現在我們來分析代碼的棘手的部分:

lw $a1, 0($t1) 

^這意味着負載的32位(4字節)字從地址t1開始,在小尾數。在t1 = var1時,4個字節爲0C 04 05 06.解釋爲32位整數爲0605040C。

lui $a1,0x123 #$a1= 0x

^這意味着負載立即16位常數到高16位,使低16位全零。 (參見the reference,跳過了LUI)

+0

天上!我知道了! – Lucas 2012-03-01 05:08:00

+0

請記住投票並接受,謝謝。 – Nayuki 2012-03-01 05:10:48

相關問題