与えられた数の因数を出力するプロシージャのコードを作成しました。しかし、ユーザーが終了する前にネガを入力するまでは、ユーザーに番号を尋ねる必要があります。ドライバのループのチェックを作成する
それがこの
のようなものがn(または終了するには、負の値)の値を入力します見えるように:6
6! 720
のnの値を入力します(または負の値が終了する):9
9! 362880
は、nの値を入力します(または負の値が終了する):11
11! 39916800
は、nの値を入力します(または負の値が終了する):20
20! -2102132736
は、nの値を入力します(または負の値が終了する):100
100! 0
は、nの値を入力します(または負の値が終了する):-1テスト用
ありがとう!
このようなものの代わりに。
番号(または出口に負)の値を入力:5
値が返さテスト120の
おかげです!
fact:
slti $t0, $a0, 1 # test for n < 1
beq $t0, $zero, L1 # if n >= 1, go to L1
li $v0, 1 # return 1
jr $ra # return to instruction after jal
L1:
addi $sp, $sp, -8 # adjust stack for 2 items
sw $ra, 4($sp) # save the return address
sw $a0, 0($sp) # save the argument n
addi $a0, $a0, -1 # n >= 1; argument gets (n – 1)
jal fact # call fact with (n – 1)
lw $a0, 0($sp) # return from jal: restore argument n
lw $ra, 4($sp) # restore the return address
addi $sp, $sp, 8 # adjust stack pointer to pop 2 items
mul $v0, $a0, $v0 # return n * fact (n – 1)
jr $ra # return to the caller
main:
la $a0, nreq # get value of n
li $v0, 4
syscall
li $v0, 5 # read value of n
syscall
move $a0, $v0 # place value n in $a0
jal fact # invoke fact
move $s0, $v0 #save value returned by facts
la $a0, ans # display
li $v0, 4
syscall
move $a0, $s0
li $v0, 1
syscall
la $a0, cr #display closing
li $v0, 4
syscall
li $v0, 10 # exit
syscall
.data
nreq:.asciiz "のnの値を入力します(または出口への負):" ANS: "!テストのための\ nThanks \ n" は.asciiz
:.asciiz CR "の値が返されるのです"