[理工] [计组]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