我正在尝试将C程序翻译成MIPS汇编代码
在我的C代码中,我有这样的一行:
int base;
int count;
count = base;
在MIPS中,我如何在计数内存储base的值?我看到的加载和存储的唯一指令是lw
和sw
,它们的原型只来自寄存器源 - > ram目的地或ram来源 - >注册目的地。
任何帮助都将不胜感激。
修改 我希望这可以在一条指令中完成,比如
move base acc
但显然这是不可能的(至少我没有找到类似的指令的例子),我选择了这个:
lw $t0, base //load base into $t0
sw $t0, count //store the value of $t0 in count
如果有一条单行指令可以做到这一点,如果有人知道的话会更好。
答案 0 :(得分:11)
MIPS不支持直接的内存到内存移动。 (实际上,大多数常见的CPU都没有 - 甚至x86也没有。)您需要使用lw
/ sw
来移动数据。
在架构上,这是因为MIPS被设计为每个周期只执行一次内存访问 - 执行内存到内存的移动需要两次访问(一次读取,一次写入),或者停止管道。
答案 1 :(得分:5)
以下是如何在MIPS中执行此操作
la $t0, base // load the address of "base"
la $t1, count // load the address of "count"
lw $t2, 0($t0) // load the data at location "base"
sw $t2, 0($t1) // store that data at location "count"
无法在单个指令中对内存进行内存移动。