Перевести C код с массивом в сборку MIPS - PullRequest
0 голосов
/ 26 января 2020

Я очень новичок в сборке MIPS и хочу убедиться, что я изучаю основы, прежде чем опередить себя. Мне дали следующие параметры и код для работы:

Напишите код сборки MIPS, соответствующий псевдокоду ниже. Предположим, что адрес для целого числа i - это базовый адрес + 4, а адрес для [0] - это базовый адрес + 8. Предположим, что базовый адрес хранится в $ gp. Код инициализирует i в 0; затем он выполняет итерацию от i = 0 до i = 4, устанавливая a [i] = 8i в каждой итерации. Чтобы сделать ваш код эффективным, я должен быть загружен в регистр в начале, и он должен обновляться в памяти только после того, как вы закончили для l oop

for (i=0; i<5; i++)
a[i] = 8*i;

Это мое лучшее предположение относительно того, как должен выглядеть MIPS

lw $s0 4($gp)
addi $t0 $gp 8
lw $s1 $t0
Loop:
bge $s0 4 Exit
lw $s1 $t0
mul $s1 8 $s0
addi $s0 $s0 1
addi $t0 $t0 4
j Loop
Exit:

Если есть концепция или метод, который я делаю неправильно, любая помощь будет отличной

1 Ответ

0 голосов
/ 06 февраля 2020

Сборка будет выглядеть так:

li      $3,8                        
sw      $3,4($4)
li      $3,16                 
sw      $3,8($4)
li      $3,24                 
sw      $3,12($4)
li      $3,32                 
sw      $0,0($4)
j       $31
sw      $3,16($4)
...