[理工] [計組]MIPS

看板Grad-ProbAsk作者 (PigJames)時間9年前 (2016/10/27 21:17), 9年前編輯推噓10(10020)
留言30則, 5人參與, 最新討論串3/3 (看更多)
這個是題目 For the following C statement, what is the corresponding MIPS assembly code? Assume that the variables f, g, h, i, and j are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the base address of the arrays A and B are in registers $s6 and $7, respectively. B[8] = A[i–j]; 然後我在網路上找的答案說 sub $t0, $s3, $s4 # $t0 = i-j sll $t0, $t0, 2 # $t0 = (i-j) * 4 lw $t1, 0($s6) # $t1 = A[0] add $t1, $t1, $t0 # $t1 = &A[i-j] <-- lw $t1, 0($t1) # $t1 = A[i-j] sw $t1, 32($s7) # B[8] = A[i-j] 為什麼 add $t1, $t1 ,$t0 會是 $t1 = &A[i-j] 而不是 $t1 = A[0] + (i-j)呢? 會有這個疑問是因為我在老師上課的投影片中看到類似的是, 題目 g = h + A[8]; $s1=g $s2=h $s3=A[0] 答案 la $s3, value   # $s3 = &A[0] lw $t0, 32($s3)  # $t0=A[8] li $s2, 1     # h=1 add $s1, $s2, $t0 # g=h+A[8]=1+9=10 <-- value: .word 1, 2, 3, 4, 5, 6, 7, 8, 9 # A[0]…A[8] ______________________________________________________ 還有一個問題就是我不太了解 $s3 = A[0] << 這個意思是什麼意思, 老師上課說這表示 $s3 存的是 A[]的base address 可是如果$s3存的是address的話,上面的 g=h+A[8] 不就不成立了嗎? 因為$t0是 32($s3) 是 A[8]的address , address應該不可以跟數值相加才對不是嗎? 麻煩各位大大了,抱歉>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.119.121.6 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1477574265.A.350.html ※ 編輯: ericzx70116 (140.119.121.6), 10/27/2016 21:22:04 ※ 編輯: ericzx70116 (140.119.121.6), 10/27/2016 21:24:54

10/27 22:11, , 1F
主要的差異是Sll 左移兩bit 使值變為address
10/27 22:11, 1F

10/27 22:13, , 2F
而不再只是單純為 兩值相加 實際應為 A[i-j+0]
10/27 22:13, 2F

10/27 22:16, , 3F
1. address 當然可以相加 他只是暫存器裡面的值
10/27 22:16, 3F

10/27 22:17, , 4F
2. "$s3 = A[0]" 這句表達的是 $s3存的是A[0]
10/27 22:17, 4F

10/27 22:18, , 5F
絕對不是A[] ... "$s3 = &A[0]" 才是表達base addr.
10/27 22:18, 5F

10/28 11:28, , 6F
感謝兩位大大幫忙>< 我瞭解了
10/28 11:28, 6F

10/28 22:22, , 7F
$s6裡存的是A的address吧 怎麼會用lw 還是我理解錯題目意
10/28 22:22, 7F

10/28 22:22, , 8F
思?
10/28 22:22, 8F

10/28 22:22, , 9F
Assume that the base address of the arrays A and B are
10/28 22:22, 9F

10/28 22:22, , 10F
in registers $s6 and$7,
10/28 22:22, 10F

10/28 22:26, , 11F
A[0]+(i-j)*4 怎麼會是A[i-j]的address
10/28 22:26, 11F

10/28 22:28, , 12F
應該要&A[0]+$t0才對吧? 還是我觀念錯了?orz
10/28 22:28, 12F

10/28 23:35, , 13F

10/28 23:37, , 14F
很久沒寫計組 有點吃力 但大致上如我圖上所說 應該是
10/28 23:37, 14F

10/28 23:37, , 15F
沒有寫錯啦XDD
10/28 23:37, 15F

10/29 01:45, , 16F
ken圖中 lw $t1 0($s6)//$t1 = A[0]之address 這句話
10/29 01:45, 16F

10/29 01:46, , 17F
是對的嗎? $s6 照題目說的應該就是A的base address了吧
10/29 01:46, 17F

10/29 01:56, , 18F
http://imgur.com/a/m1FFA 這是我在網路上找到的...
10/29 01:56, 18F

10/29 08:35, , 19F
Assemble language 可以有各式各樣的方法 去寫出 只
10/29 08:35, 19F

10/29 08:35, , 20F
端看要寫成簡單和複雜
10/29 08:35, 20F

10/29 08:40, , 21F
但我是蠻常看到使用lw Reg 0(?)的技巧@@
10/29 08:40, 21F

10/29 08:46, , 22F
哦 我好像回錯意思了 但撇開掉上一句 我覺得兩者皆可
10/29 08:46, 22F

10/29 08:46, , 23F
10/29 08:46, 23F

10/29 11:11, , 24F
就MIPS來說
10/29 11:11, 24F

10/29 11:11, , 25F
lw $t1 0($s6) 這句是$t1 = A[0] 的意思吧...
10/29 11:11, 25F

10/29 11:12, , 26F
這樣根本不對啊
10/29 11:12, 26F

10/29 11:43, , 27F
你說的沒錯 這部分不用加這段才是正確的
10/29 11:43, 27F

10/29 11:44, , 28F
是我把lw 跟la的用途搞混了 QQ 抱歉
10/29 11:44, 28F

10/29 11:47, , 29F
Lw 如前兩位所說的是指 A[address]內的值
10/29 11:47, 29F

10/29 13:04, , 30F
感謝糾正 !
10/29 13:04, 30F
文章代碼(AID): #1O4VvvDG (Grad-ProbAsk)
討論串 (同標題文章)
文章代碼(AID): #1O4VvvDG (Grad-ProbAsk)