コンソールに印刷するには、システムで利用可能な多くのシステムコールの1つを利用する必要があります。(正確なシステムコール値は、システム/エミュレーターによって異なります。)
文字列は、文字列の先頭のアドレスを取得するために使用できるラベルを使用して、実行可能ファイルのデータセグメントに配置できます。「.ascii」はnullで終了しない文字列を意味し、「。asciiz」はnullで終了する文字列を意味します。
文字列と整数値を出力する方法の簡単な例を次に示します。
.data
str: .asciiz "This is a string\n" # a null-terminated string to be printed.
.align 2 # make sure it's aligned to word boundary
int: .word 1234 # some number
.text
.global main
main:
la $a0, str # load the address of the start of our string
li $v0, 4 # syscall 4 usually means print string
syscall
la $t0, int # the address of our number
lw $a0, 0($t0) # get our number
li $v0, 1 # syscall 1 usually means print int
syscall
li $v0, 10 # syscall 10 usually means exit
syscall # exit.
より実用的な例:
もし私があなたの関数を利用するとしたら、それは次のようになります:(それが$ aNの引数と$vNの戻り値の標準的な呼び出し規約に従っていると仮定します。それは確かにそうです。)
.data
str: .asciiz "This is an example"
.text
.global main
main:
la $a0, str # first argument, a pointer to the string
jal StringLength # call StringLength(str)
# print the length
add $a0, $zero, $v0
li $v0, 1
syscall
li $v0, 10
syscall # exit
ほとんどのエミュレーターは同じシステムコールを使用します。これは、MARSシミュレータのシステムコールのリストです。
最後の注意:lw命令を使用して値をロードする場合は、最初の例で行ったように、値をワード境界(.align 2)に揃えるようにアセンブラーに指示してください。