2017-04-03 4 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ランタイムを使用している場合、 'jr $ ra'は' main'ヒントで十分です。 – 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ラベルにjaljr $raと返信すると、システム管理者のシステムコールが終了します。 jr $raは、元の値が$raのままであれば問題ありません。しかし、他のシミュレータ(PcSpim、Mars)ではexit syscallを自分で実行する必要があります。

+0

マイケルありがとう! – Azkidenz

関連する問題