【发布时间】:2016-07-20 04:08:30
【问题描述】:
我是汇编编码的新手,我遇到了一个问题,将以下 C 代码传输到 MIPS 汇编。
b[8] = b[i-j] + x ;
变量 i,j,x 在寄存器 7,4 和 15 中,数组 b 的基地址是十进制的 2,870,220。
我想出了以下解决方案
lui $2, 0x002B
ori $2, $2, 0xCBCC
sub $3, $7, $4
add $3, $2, $3
lw $12, 0($3)
addu $12, $12, $15
sw $12, 32($2)
但是当我检查答案时,又多了一行
sll $3, $3, 2
在减法指令之后。
有人能解释一下为什么我们需要将寄存器 $3 的内容乘以 4 吗?
【问题讨论】:
-
数组是字(32 位)大小而不是字节大小?
-
问题没有指定任何关于数组的内容。
-
它可能是字大小的。实际上我忘记了 mips 的语法,lw 是加载词是吗? 32位的东西?什么是加载字节?磅?如果 lw 是 32 位负载,那么您需要将偏移量与一个字对齐,因此乘以 4 以获得地址的偏移量而不是索引