[問題] 有個 C 程式碼 轉 MIPS

看板ASM (組合語言)作者 (小銓)時間15年前 (2009/11/15 13:00), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
小弟尚未開始學組語,但是計算機組織有扯到,所以有些問題想請教大家。 是一個有關 簡單 C語言敘述 轉成 MIPS 指令~~ Q: 假設 $s0 存放變數 f的值, $s1 存放變數 g的值 ~ 而 $s6 存放 整數陣列 A[0] 的 記憶體位置( 即 &A[0] ) , $s7 存放 整數陣列 B[0] 的記憶體位置 (即 &B[0]) => 將 右邊的 C 語言敘述 : f = g - A[ B[4] ]; 轉成 MIPS ~ 我的想法 => lw $t0,16($s7) # 把陣列 B[4]的數值 暫存於 $t0 muli $t0,$t0,4 # 把 $t0 * 4 lw $s0,$t0($s6) # 把 A[ B[4] ]的數值 存放在 $s0 sub $s0,$1,$s0 # f = g - A[ B[4] ] 答案: => lw $t0,16($s7) lw $s0,0($t0) # 看不懂 lw $s0,$s1,$s0 ------------------------------------------------------------------------------ 請問各位,我這樣的寫法可以嗎? 答案的寫法 怎麼可以這麼精簡 而且 在C的敘述中 有用到陣列 A[B[4]] 可是答案怎麼都沒用到 $s6 會用到巴 = =+ 我看了半天 猶豫是不是該把這傻問題 PO到這個版 = =+ 可是真的看不懂了 有不妥的地方 請鞭小力一點 ....3Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.40.115.60

12/11 15:10, , 1F
lw $s0,$t0($s6) $t0那個地方只能放常數
12/11 15:10, 1F

12/11 15:12, , 2F
lw $s0,$s1,$s0 語法??
12/11 15:12, 2F
文章代碼(AID): #1A_ui4Uv (ASM)
文章代碼(AID): #1A_ui4Uv (ASM)