2016-02-04 2 views
0

Я пытаюсь напечатать целые числа 1-10 и вставить пустую строку между строками (на самом деле строка, которая что-то говорит), но мой код работает некорректно. Я на правильном пути?Сборка целых чисел и строк печати MIPS

.text 
    .align 2 




main: 

lw $s0, 1 
j loop 

Exit: 
    li $v0, 10 
    syscall 
    jr $ra 


loop: 
    beq $v0, 11, Exit 

    li $v0, 1 #call for printing integer is 1 
    syscall 
    addi $a0, $a0, 1 #increment by 1 

    move $s0,$a0 

    li $v0, 4 
    la $a0, out_string 
    syscall 
    move $a0,$s0 


    j loop 




    .data 

out_string:  .asciiz "\n new line\n" 

ответ

0

Это может иметь somethimg делать с этой линией

move $a0,$s0 

Это заселение $ a0 с неизвестными значениями

0

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

С кодом возникает множество проблем. Но если мы начнем с бесконечным циклом, это не трудно понять, почему это произошло:

Состояния у вас есть для выхода из цикла является то, что $v0 == 11, но значение $v0 при выполнении, что проверка всегда будет либо 4 или независимо от того, какое значение оно имело при запуске вашей программы:

loop: 
    beq $v0, 11, Exit <-- On the first iteration $v0 will have some "random" value. 
          On subsequent iterations it will have the value 4 because 
          of the li $v0,4 below. 
    ... 
    li $v0, 4 
    ... 
    j loop 

Существует несколько способов устранения этого. Вы можете использовать другой регистр для счетчика циклов, или вы могли бы сохранить значение $v0 в стеке и восстановить его позже.

Это не единственная проблема с вашим кодом. Например, вы также используете $a0 для более чем одной вещи в цикле.

Смежные вопросы