프로그램과 함께 예상되는 출력을하지만가 무슨 잘못이 MIPS/QtSPIM While 루프 코드
코드
.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
사용자 텍스트 세그먼트
[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
아래의 오류와 함께 실행 오류
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]
조립조차하지 않습니다. * j $ ra *는 유효한 MIPS 명령어가 아닙니다. 당신은 * jr $ ra *를 의미합니다. – m0skit0
@ m0skit0, 당신 말이 맞아요. –
* jr $ ra *는 MARS 시뮬레이터에서 잘 실행됩니다 (단, $ ra에는 할당 된 값이없고 $ ra로 점프 할 때 충돌이 발생 함). 이 오류가 발생하는 이유는 다음과 같습니다. PC = 0x00000000 예외가 발생했습니다. 텍스트의 잘못된 주소 : 0x00000000 – m0skit0