了解此 C++ 代码的 MIPS 等价物

Understanding the MIPS equivalent of this C++ code

你会如何复制:

int* a;
b = a[2];

在 MIPS 中,不使用 .data?

我对此的回答是:lw $t1, 4($t0),其中 $t0 是 a,$t1 是 b-- 但这是不正确的。

同样,你将如何复制:

char* a;
a[4] = b;

再一次,我对此的回答是 lb 4($s0), $t0,其中 $t0 是 b,$s0 是 a——但这也是不正确的。

复制

int* a;
b = a[2];

a[2]a 指向的内容之后的 2 个元素,所以 lh $t1, 4($t0) 如果 int 是 2 字节长,lw $t1, 8($t0) 如果 int 是 4 个字节长。

复制

char* a;
a[4] = b;

将 1 字节值写入内存的指令是 sb,而不是 lb。因此,sb $t0, 4($s0) 应该假设 char 是 1 个字节长。