Loop Задержка в MIPS

голоса
0

У меня возникли проблемы при записи цикла задержки, которая будет возвращать константу 0x80000. Вывод должен быть как Привет, мир! 0 Привет, мир! 1 Привет, мир! 2 ... но когда я запускаю свою программу, терминал не показывает ничего, хотя я считаю, один Привет, мир! должны показывать вверх. Я попытался выяснить, что это неправильно по отладке кода, но не кажется, что будет помогать мне. Любые предложения о том, как это исправить?

.ent getDelay
.text
.global getDelay

getDelay:
addi $sp, $sp, -1
sw $ra, 0($sp)
la $a0, helloStr
lw $a1, counter 
jal printf
nop
lw $ra, 0($sp)
addi $sp, $sp, -1
lw $t0, ($a1)
addiu $t0, $t0,1
la $t1, counter
sw $t1, ($a1) 
$v0 = 0x80000
jr $ra

.end getDelay

.data
helloStr: .asciiz Hello, world %d\n
counter: .word 100
Задан 30/11/2014 в 07:44
источник пользователем
На других языках...                            


1 ответов

голоса
0

  1. Вы должны всегда корректировать $spв упаковке 4 (размер слова). Вы должны использовать addiu $sp, $sp, -4и addiu $sp, $sp, 4.
  2. Вы приращение , $t0но затем хранить $t1. Вам не нужно , la $t1, counterи вместо того , sw $t1, ($a1)вы должны использовать sw $t0, ($a1).
  3. $v0 = 0x80000не является инструкцией, вы , вероятно , хотите li $v0, 0x80000.
  4. Если сама эта функция должна быть некоторая задержка, то вам нужен цикл в нем.
Ответил 30/11/2014 в 13:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more