Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- print:
- .asciiz "Odd: "
- .text
- fact:
- sw $fp, ($sp)
- move $fp, $sp
- subu $sp, $sp, 12
- sw $ra, -4($fp)
- sw $v0, -8($fp)
- lw $a0, 4($fp)
- bgt $a0, 1, recurs
- li $v0, 1
- b return
- recurs:
- lw $a0, 4($fp)
- subu $a0, $a0, 1
- sw $a0, ($sp)
- subu $sp, $sp, 4
- lw $v0, -8($fp)
- jal fact
- lw $a0, 4($fp)
- mul $v0, $v0, $a0
- addi $t0, 2
- lw $t2, 4($fp)
- div $t2, $t0
- mfhi $t1
- beq $t1, 0, return
- li $v0, 4
- la $a0, print
- syscall
- li $v0, 1
- lw $a0, answer
- syscall
- return:
- lw $ra, -4($fp)
- move $sp, $fp
- lw $fp, ($sp) # RESTORE OLD FRAME POINTER
- jr $ra
- # The main program
- .text
- .globl main
- main:
- sw $fp, ($sp) # PUSH OLD FRAME POINTER (DYNAMIC LINK)
- move $fp, $sp # FRAME POINTER NOW POINTS TO THE TOP OF STACK
- subu $sp, $sp, 20 # ALLOCATE TWENTY BYTES IN THE STACK
- sw $ra, -4($fp)
- sw $v0, -8($fp)
- loop:
- .data
- prompt:
- .asciiz "Number? "
- .text
- li $v0, 4
- la $a0, prompt
- syscall
- li $v0, 5
- syscall
- sw $v0, -12($fp)
- blez $v0, prompt
- lw $a0, -12($fp)
- sw $a0, ($sp)
- subu $sp, $sp, 4
- move $v0, $fp
- jal fact
- sw $v0, -16($fp)
- .data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement