2017-04-03 1 views
0

I/O 시스템 호출 이상으로 종료하면 종료 호출 (코드 10)을 수행해야합니까, 그렇지 않으면 필요하지 않습니까?I/O 시스템 호출 출구가 필요합니다.

 .data 
     input_message: .asciiz "\nEnter an integer: " 

     .text 
     .globl main 

    main: 
     li $v0, 4 
     la $a0, input_message 
     syscall 

     addi $v0, $zero, 5 
     syscall 
     add $t0, $zero, $v0 

     addi $t0, $t0, 1 

     addi $v0, $zero, 1 
     add $a0, $zero, $t0 
     syscall 

     [***] 

     jr $ra 

나는 다음과 같이 [***] 위치에 뭔가를 종료 호출을 추가하거나 안 :

나는 예를하게?

 li $v0, 10 
     syscall 
+0

'main' 힌트가있는 C 런타임을 사용하는 경우'jr $ ra'만으로 충분합니다. – Jester

+0

QtSpim을 사용하여 mipsx86을 시뮬레이트합니다. – Azkidenz

답변

2

QtSpim (Windows 용 적어도 버전 9.1.17)이 text 섹션의 시작 부분에 다음 코드를 배치 : 당신이 볼 수 있듯이

[00400000] 8fa40000 lw $4, 0($29)   ; 183: lw $a0 0($sp) # argc 
[00400004] 27a50004 addiu $5, $29, 4   ; 184: addiu $a1 $sp 4 # argv 
[00400008] 24a60004 addiu $6, $5, 4   ; 185: addiu $a2 $a1 4 # envp 
[0040000c] 00041080 sll $2, $4, 2   ; 186: sll $v0 $a0 2 
[00400010] 00c23021 addu $6, $6, $2   ; 187: addu $a2 $a2 $v0 
[00400014] 0c000000 jal 0x00000000 [main] ; 188: jal main 
[00400018] 00000000 nop      ; 189: nop 
[0040001c] 3402000a ori $2, $0, 10   ; 191: li $v0 10 
[00400020] 0000000c syscall     ; 192: syscall # syscall 10 (exit) 

, 그것은됩니다 main 레이블 jal, jr $ra으로 돌아 오면 시스템 종료를 수행합니다. 이렇게 jr $ra은 원래 값 $ra을 보존하는 한 괜찮습니다. 그러나 다른 시뮬레이터 (PcSpim, Mars)에서는 exit syscall을 직접 수행해야 할 수도 있습니다.

+0

고마워요 마이클! – Azkidenz