[英]Understanding MIPS Assembly Code Segment
剛剛開始為我的一門課程學習匯編語言,對此代碼段我有些困惑。 這是教科書中的一個問題,要求您將MIPS指令翻譯為C。其余問題在所附的圖像中。
對於上面的MIPS匯編指令,相應的C語句是什么? 假定變量f,g,h,i和j分別分配給寄存器$ s0,$ s1,$ s2,$ s3和$ s4。 假定數組A和B的基地址分別在寄存器$ s6和$ s7中。
sll $t0, $s0, 2 # $t0 = f * 4
add $t0, $s6, $t0 # $t0 = &A[f]
sll $t1, $s1, 2 # $t1 = g * 4
add $t0, $s6, $t0 # $t1 = &B[g]
lw $s0, 0($t0) # f = A[f]
addi $t2, $t0, 4
lw $t0, 0($t2)
add $t0, $t0, $s0
sw $t0, 0($t1)
我對一些MIPS指令有基本的了解,但是坦率地說,帶有數組的東西使我有些困惑。 這里有人可以指出正確的方向嗎? 謝謝!
自上次編寫MIPS程序集以來已經有一段時間了。 但是,從前幾條說明中我可以理解:
sll $t0, $s0, 2 # t0 = 4 * f
add $t0, $s6, $t0 # t0 = &A[f]
s0
保留您要訪問數組A
的索引f
。 由於將f
乘以4,所以A
是具有4個字節長的數據類型的數組(可能是int)。 s6
持有數組地址,因為訪問A[f]
的地址實際上是您要做的(使用偽代碼)
address_of_A[f] = base_address_of(A) + offset_of_type_int(f)
原則上,接下來的2條指令中也會發生同樣的事情,但是這次是數組B
之后:
lw $s0, 0($t0) # f = A[f]
addi $t2, $t0, 4 # t2 = t0 + 4
第一次加載是顯而易見的, s0
在地址t0
處獲取值,該值當然是A[f]
。 第二個將t0
加4,並將其存儲到t2
,這意味着t2
現在包含地址&A[f+1]
,因為我們知道數組A
包含4字節數據。
最后一個lw
命令:
lw $t0, 0($t2)
將值存儲在$t0
上的地址$t2
上,因此$t0
現在為A[f+1]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.