Двойное условие, если заявления в MIPS - PullRequest
1 голос
/ 08 июля 2019

Я конвертирую следующий код C в MIPS, и кажется, что функция isIdent всегда возвращает 0.

C: полный код здесь

int isIdent (int m[N][N], int n)
{
    for (int row = 0; row < n; row++)
        for (int col = 0; col < n; col++)
            if (row == col && m[row][col] != 1)
                return 0;
            else if (row != col && m[row][col] != 0)
                return 0;
    return 1;
}

MIPS: Идентификационный код здесь Полный код здесь

Я попытался изменить позиции операторов if, например сначала проверяя row и col, однако, похоже, это не имеет значения. Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 08 июля 2019

Нашли решение !Что я должен был сделать, так это получить значение из рассчитанного адреса, как указал @CraigEstey.

# m[row][col] = *(&m[0][0] + (row * N) + col)
mul $t0, $s2, $s1   # % <- row * N
add $t0, $t0, $s3   #    + col
li  $t1, 4
mul $t0, $t0, $t1   #    * sizeof(word)
addu    $t0, $s0, $t0   #    + &m[0][0]
lw  $a0, ($t0)      # actually fetch m[r][c] from memory

Большое спасибо, ребята:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...