前提
MIPSのアセンブリ言語に関する質問です。
fact関数を用いて、入力された整数の階乗を出力するプログラムを作成したいです。fact関数を作成することはできたのですが、入力を即すプログラムや結果を出力するプログラムがわかりません。main関数の部分を記述していただきたいです。
###試したこと
以下のプログラムをmainとして作成しました。
li $v0, 4 # syscall: print_str
la $a0, Text1 # load address of Text1 to $a0
syscall
li $v0, 5 # syscall: read_int
syscall
move $a0, $v0 # move the input value to $a0
jal fact # call the factorial function
li $v0, 4 # syscall: print_str
la $a0, Text2 # load address of Text2 to $a0
syscall
li $v0, 1 # syscall: print_int
move $a0, $v0 # move the result to $a0
syscall
li $v0, 10 # syscall: exit
syscall
実現したいこと
fact関数を用いて、入力された整数の階上を出力するプログラムを作成したいです。
MIPS
以下が作成したプログラムです。 .data Text1: .asciiz "input number " Text2: .asciiz "Result of factorial is " .text .globl main ####################################################### main: ######################################################## fact: addi $sp, $sp, -8 # adjust stack pointer for 2 items sw $ra, 4($sp) # save the return address sw $a0, 0($sp) # save the argument n bge $a0, 1, L1 # if (n >= 1) goto L1 li $v0, 1 # return 1 j end_fact # jump to the end of fact L1: sub $a0, $a0, 1 # $a0 <= $a0 - 1 jal fact # call fact(n - 1) lw $a0, 0($sp) # restore argument $a0 lw $ra, 4($sp) # restore the return address addi $sp, $sp, 8 # adjust stack pointer mul $v0, $a0, $v0 # n * fact(n - 1) end_fact: jr $ra # return ###調査したこと試したこと 以下のプログラムをmain関数として作成したが、うまく動作しなかった。 li $v0, 4 # syscall: print_str la $a0, Text1 # load address of Text1 to $a0 syscall li $v0, 5 # syscall: read_int syscall move $a0, $v0 # move the input value to $a0 jal fact # call the factorial function li $v0, 4 # syscall: print_str la $a0, Text2 # load address of Text2 to $a0 syscall li $v0, 1 # syscall: print_int move $a0, $v0 # move the result to $a0 syscall li $v0, 10 # syscall: exit syscall
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。