Понимание MIPS-эквивалента этого кода C ++ - PullRequest
0 голосов
/ 05 августа 2020

Как бы вы реплицировали:

int* a;
b = a[2];

В MIPS, без использования .data?

Мой ответ был: lw $t1, 4($t0), где $t0 - это & ​​$t1 - это b, но это было неверно.

Точно так же, как бы вы реплицировали:

char* a;
a[4] = b;

Еще раз, мой ответ был lb 4($s0), $t0, где $t0 - b & $s0 - это a - но это тоже было неверно.

1 Ответ

1 голос
/ 05 августа 2020

Для репликации

int* a;
b = a[2];

a[2] - это 2 элемента после того, на что указывает a, поэтому lh $t1, 4($t0) if int имеет длину 2 байта и lw $t1, 8($t0) if int имеет длину 4 байта.

Для репликации

char* a;
a[4] = b;

Инструкция для записи 1-байтового значения в память: sb, а не lb. Следовательно, sb $t0, 4($s0) должно работать, если char имеет длину 1 байт.

...