[理工] [計組]MIPS

作者: ericzx70116 (PigJames)   2016-10-27 21:17:43
這個是題目
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] <
作者: ken52011219 (呱)   2016-10-27 22:11:00
主要的差異是Sll 左移兩bit 使值變為address而不再只是單純為 兩值相加 實際應為 A[i-j+0]
作者: kyuudonut (善良老百姓)   2016-10-27 22:16:00
1. address 當然可以相加 他只是暫存器裡面的值2. "$s3 = A[0]" 這句表達的是 $s3存的是A[0]絕對不是A[] ... "$s3 = &A[0]" 才是表達base addr.
作者: ericzx70116 (PigJames)   2016-10-28 11:28:00
感謝兩位大大幫忙>< 我瞭解了
作者: opu456 (....)   2016-10-28 22:22:00
$s6裡存的是A的address吧 怎麼會用lw 還是我理解錯題目意思?Assume that the base address of the arrays A and B arein registers $s6 and$7,A[0]+(i-j)*4 怎麼會是A[i-j]的address應該要&A[0]+$t0才對吧? 還是我觀念錯了?orz
作者: ken52011219 (呱)   2016-10-28 23:35:00
http://i.imgur.com/SHPp0j8.jpg很久沒寫計組 有點吃力 但大致上如我圖上所說 應該是沒有寫錯啦XDD
作者: PTTleader (PTT領導)   2016-10-29 01:45:00
ken圖中 lw $t1 0($s6)//$t1 = A[0]之address 這句話是對的嗎? $s6 照題目說的應該就是A的base address了吧http://imgur.com/a/m1FFA 這是我在網路上找到的...
作者: ken52011219 (呱)   2016-10-29 08:35:00
Assemble language 可以有各式各樣的方法 去寫出 只端看要寫成簡單和複雜但我是蠻常看到使用lw Reg 0(?)的技巧@@哦 我好像回錯意思了 但撇開掉上一句 我覺得兩者皆可吧
作者: PTTleader (PTT領導)   2016-10-29 11:11:00
就MIPS來說lw $t1 0($s6) 這句是$t1 = A[0] 的意思吧...這樣根本不對啊
作者: ken52011219 (呱)   2016-10-29 11:43:00
你說的沒錯 這部分不用加這段才是正確的是我把lw 跟la的用途搞混了 QQ 抱歉Lw 如前兩位所說的是指 A[address]內的值感謝糾正 !

Links booklink

Contact Us: admin [ a t ] ucptt.com