Mips:将变量存储在另一个变量中

时间:2012-02-02 04:15:08

标签: assembly mips

我正在尝试将C程序翻译成MIPS汇编代码

在我的C代码中,我有这样的一行:

int base;
int count;

count = base;

在MIPS中,我如何在计数内存储base的值?我看到的加载和存储的唯一指令是lwsw,它们的原型只来自寄存器源 - > ram目的地或ram来源 - >注册目的地。

任何帮助都将不胜感激。

修改 我希望这可以在一条指令中完成,比如

move base acc

但显然这是不可能的(至少我没有找到类似的指令的例子),我选择了这个:

lw $t0, base   //load base into $t0
sw $t0, count  //store the value of $t0 in count

如果有一条单行指令可以做到这一点,如果有人知道的话会更好。

2 个答案:

答案 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"

无法在单个指令中对内存进行内存移动。