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?

Share:
13,516
Jiew Meng
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, 2022

Comments

  • Jiew Meng
    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
    Jiew Meng over 12 years
    Its 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
    user786653 over 12 years
    By 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.