Whats wrong with this MIPS/QtSPIM While Loop Code
13,516
addi $t0, $t0, 0 # i = 0
Won't set $t0
to 0 but rather leave it unchanged. (move $t0, $zero
) or (addi $t0, $0, 0
) would both work.
Also are you sure that $t0
and $t2
are preserved in the syscall?
Lastly the error you posted doesn't appear to occur in your code. Do you have a stack trace/dump of registers or anything else that might help in tracking it down?
Author by
Jiew Meng
Web Developer & Computer Science Student Tools of Trade: PHP, Symfony MVC, Doctrine ORM, HTML, CSS, jQuery/JS Looking at Python/Google App Engine, C#/WPF/Entity Framework I hope to develop usable web applications like Wunderlist, SpringPad in the future
Updated on June 04, 2022Comments
-
Jiew Meng almost 2 years
The programs runs with expected output but with the errors below
Code
.data .text .globl main main: addi $t0, $t0, 0 # i = 0 addi $t2, $0, 10 # n = 10 j WhileCond # goto WhileCond WhileLoop: li $v0, 1 # print_int move $a0, $t0 # $a0 = i (print i) addi $t0, $t0, 1 syscall WhileCond: blt $t0, $t2, WhileLoop # if i < 10 goto WhileLoop j $ra
User Text Segment
[00400000] 21080000 addi $8, $8, 0 ; 10: addi $t0, $t0, 0 # i = 0 [00400004] 200a000a addi $10, $0, 10 ; 11: addi $t2, $0, 10 # n = 10 [00400008] 08100007 j 0x0040001c [WhileCond] ; 12: j WhileCond # goto WhileCond [0040000c] 34020001 ori $2, $0, 1 ; 15: li $v0, 1 # print_int [00400010] 00082021 addu $4, $0, $8 ; 16: move $a0, $t0 # $a0 = i (print i) [00400014] 21080001 addi $8, $8, 1 ; 17: addi $t0, $t0, 1 [00400018] 0000000c syscall ; 18: syscall [0040001c] 010a082a slt $1, $8, $10 ; 21: blt $t0, $t2, WhileLoop # if i [00400020] 1420fffb bne $1, $0, -20 [WhileLoop-0x00400020] [00400024] 03e00008 jr $31 ; 23: j $ra
Error
Exception occurred at PC=0x00000000 Bad address in text read: 0x00000000 Instruction references undefined symbol at 0x800001dc [0x800001dc] 0x143a0000 bne $1, $26, 0 [ok_pc-0x800001d8]
-
Jiew Meng over 12 yearsIts working now (it appears
j $ra
is causing the problems ... tho I think @m0skit0, is right, it should not work at all ...). I remember syscall might not preserve some variables ... but it worked so far ... how might I fix this potential problem? -
user786653 over 12 yearsBy saving it on the stack, it's all explained in here. And it's very likely @m0skit0 got it right, I don't recall SPIMs starting conditions.