簡體   English   中英

了解MIPS匯編代碼段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM