### SPIM のシステムコールを利用して入出力をする. ### v0 にシステムコール番号,a0 に引数をセットして syscall を発行する. ### 戻り値は v0.詳細は,教科書A.9節「SPIM」の「システムコール」を参照. .text .align 2 # システムコールの詳細を隠蔽する関数群. # 常に $a0 を引数,$v0を戻り値 # とすることでインタフェースを統一する print_int: # arg: $a0 = integer li $v0, 1 syscall j $ra print_string: # arg: $a0 = buffer li $v0, 4 syscall j $ra read_int: # ret: $v0 = integer li $v0, 5 syscall j $ra ### main で利用する定数群 .data .align 2 msg1: .asciiz "Hello World\n" msg2: .asciiz "int1 -> " msg3: .asciiz "int2 -> " ### main プログラム .text .align 2 main: move $s0, $ra la $a0, msg1 jal print_string # print "Hello World\n" la $a0, msg2 # print "int1 -> " jal print_string jal read_int move $s1, $v0 # $s1 = int1 la $a0, msg3 # print "int2 -> " jal print_string jal read_int # $v0 = int2 addu $a0, $s1, $v0 # $a0 = in1 + int2 jal print_int # print $a0 move $ra, $s0 j $ra