-1

Я пытаюсь кодировать код, эквивалентный MIPS этого кода на языке высокого уровня:Правильный код MIPS для цикла?

i = 0; 
n = str2; //supplied by user from console 
while(i < n) { 
    System.out.println(str1); //str1 is supplied by user from console 
    i++; 
} 
System.exit(0); 

Это мой MIPS код:

.data 
str1: .asciiz "Enter the first integer: " 
str2: .asciiz "Enter the second integer: " 
newline: .asciiz "\n" 

.text  # instructions follow this line 
main:  # indicates start of code (first instruction to execute) 

    add $s0,$zero, $zero  # $s0 = 0 
    add $s1, $zero, str2  # $s1 = 0 
    slt $t0, $s0, $s1 
    beq $t0, $zero, Exit 
    li $v0, 1   # load appropriate system call code into register $v0; 
         # code for printing integer is 1 
    move $a0, str1 # move integer to be printed into $a0: $a0 = str1 
    syscall 
    addi $s0, $s0, 1  # $s0++ 

    j loop    #jump back to loop 
Exit: nop 

Я пытаюсь напечатать 1-й номер суммы от значения 2-го числа. Пример: 1-й номер: 2, 2-й номер: 4, поэтому печать 2 четыре раза

ответ

3

В вашем коде отсутствует метка «петля». Я собираюсь догадаться, что он должен идти выше первого «добавить».

Вы должны использовать форму «u» для сложения и вычитания. То есть, «addu» вместо «add» и «addiu» вместо «addi». Это связано с тем, что «add» и «addi» будут сбой при переполнении вместо переноса. Java не сбой при переполнении целых чисел, и вам нужен эквивалент MIPS кода Java.

Вместо буквально «str1» и «str2» код MIPS должен иметь имена регистров, в которые были загружены заданные пользователем номера.

«move $ reg1, $ reg2» эквивалентен «addu $ reg1, $ zero, $ reg2». Фактически, инструкция «move» фактически не существует и фактически реализована как макрос для «addu» с регистром $ 0 ассемблером.

Также вы используете ассемблер, который автоматически обрабатывает переупорядочение? Мне интересно, обрабатывает ли ваш ассемблер слот задержки MIPS для вас, или вам нужно самому положить материал в слот задержки филиалов. Это может изменить то, как вам нужно закодировать свой цикл.

+0

Я использую QTSpim, но я действительно не знаю, автоматически ли он выполняет переупорядочение. Он продолжал рушиться, но я думаю, что это было связано с бесконечным циклом. И большое спасибо за вашу помощь. – Abdul