2017-04-03 66 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

如果您使用C運行庫,'main'提示,'jr $ ra'應該就足夠了。 – Jester

+0

我使用QtSpim來模擬mipsx86。 – Azkidenz

回答

2

QtSpim(至少版本9.1.17適用於Windows)則以下列代碼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) 

正如你所看到的,它會jalmain標籤,如果您使用jr $ra返回,它將爲您執行退出系統調用。 所以jr $ra是好的,只要你保留了原始值$ra。但是,其他模擬器(PcSpim,Mars)可能需要自己執行退出系統調用。

+0

非常感謝邁克爾! – Azkidenz