Индексирование целочисленных массивов с помощью сборки MIPS - PullRequest
2 голосов
/ 06 февраля 2012

Я хотел преобразовать этот код C в MIPS.

C код:

f = A[B[h-g]]

Мы предполагаем, что h > g и B[h-g] > 0. h, g, f - целые числа.

Также предположим, что f назначен для регистра $s0, g до $s1, h до $s2.

Базовые адреса A -> $s6 и B -> $s7

Вот моя попытка:

sub $t0, $s2, $s1                   
mult $t0, $t0, 4                     
lw $t0, $t0($s7)           
mult $t0, $t0, 4           
sw $s0, $t0($s6)

1 Ответ

1 голос
/ 06 февраля 2012

Выглядит хорошо, кроме последней строки, которая, скорее всего, должна быть:

lw $s0, $t0($s6)

Обратите внимание, что вы всегда должны комментировать свой код, особенно когда он асм, например

sub $t0, $s2, $s1         ; t0 = h - g          
mult $t0, $t0, 4          ; t0 = (h - g) * sizeof(int) = byte index into B
lw $t0, $t0($s7)          ; t0 = B[h - g]
mult $t0, $t0, 4          ; t0 = B[h - g] * sizeof(int) = byte index into A
lw $s0, $t0($s6)          ; s0 = A[B[h - g]]

Обратите внимание, что вы всегда должны проверять свой код - я бы порекомендовал использовать для этого симулятор, такой как SPIM .

...