MIPS сборка для простого цикла - PullRequest
7 голосов
/ 06 февраля 2012

Мне нужно перевести этот код C в сборку MIPS. Вот код C:

int tmp = 0; 
for (int  j = 0; j < 15; ++j) 
     tmp = tmp * 2 + 3

Это мой код сборки MIPS. Это правильный перевод? Если вы видите какие-либо ошибки, мне бы очень хотелось знать.

# tmp = $v0
# j = $t0

.globl main

 main:
    li $v0,0

loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    mul $t1,$v0,2
    add $v0,$t1, 3
    j loop  

exit:

Ответы [ 4 ]

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

Ваш цикл переходит от 0 до 14, поэтому ваша инструкция bgt должна быть: bgt $t0,14,exit Я думаю.

.

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

Вы не устанавливаете j ($ t0) в ноль перед циклом.

0 голосов
/ 04 апреля 2018

Я также не знаю, какой симулятор MIPS вы используете, но я знаю, что некоторые из них не являются константами, и они требуют, чтобы вы присваивали их регистрам.Так что, как bgt Rsrc1, Src2, label, обычно, если вы введете целое число в src2, компьютер переведет это, но я знаю, что для некоторых вы получите ошибку, добавив $ v0, $ t1, 3, поскольку это не переведет add вАдди.То же самое с мул.Я знаю, что мой симулятор SPIM не позволяет этого.

0 голосов
/ 14 апреля 2016
.data
mensage: asciiz "Text Test"
newline: asciiz "\n"
.text

# tmp = $v0
# j = $t0

main:
    li $t0,0
    li $t1,0
    li $t3,0
loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    j loop
    mul $t1,$t1,2
    add $t3,$t1,3  
exit:

li $v0,0
syscall
...