Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- str1: .asciiz "\nEnter a number.\n"
- str2: .asciiz "The number "
- str3: .asciiz " has "
- str4: .asciiz " divisors."
- str5: .asciiz "The factorial of "
- str6: .asciiz " is "
- str7: .asciiz "."
- str8: .asciiz "The sum from 1 to "
- str9: .asciiz "The number needs to be a positive and whole."
- .text
- .globl main
- main:
- loop:
- li $v0, 4
- la $a0, str1
- syscall
- li $v0, 5
- syscall
- move $t0, $v0
- blez $t0, error
- add $a0, $v0, $0
- jal even_or_odd
- even_or_odd:
- addi $t0, $0, 2
- div $a0, $t0
- mfhi $s0
- beq $s0, $0, even
- j odd
- even:
- move $t0, $v0
- li $t1, 0
- li $t2, 0
- divs:
- addi $t1, $t1, 1
- div $t0, $t1
- mfhi $s0
- beqz $s0, sum_of_divs
- jal divs
- sum_of_divs:
- add $t2, $t2, 1
- blt $t1, $t0, divs
- beq $t1, $t0, print_divs
- print_divs:
- li $v0, 4
- la $a0, str2
- syscall
- li $v0, 1
- move $a0, $t0
- syscall
- li $v0, 4
- la $a0, str3
- syscall
- li $v0, 1
- move $a0, $t2
- syscall
- li $v0, 4
- la $a0, str4
- syscall
- j loop
- odd:
- move $t0, $v0
- blt $t0, 10, less_than_10
- bge $t0, 10, greater_than_10
- less_than_10:
- move $t0, $v0
- li $t1, 1
- li $t2, 0
- factorial:
- addi $t2, $t2, 1
- mul $t1, $t1, $t2
- blt $t2, $t0, factorial
- j print_factorial
- print_factorial:
- li $v0, 4
- la $a0, str5
- syscall
- li $v0, 1
- move $a0, $t0
- syscall
- li $v0, 4
- la $a0, str6
- syscall
- li $v0, 1
- move $a0, $t1
- syscall
- li $v0, 4
- la $a0, str7
- syscall
- j loop
- greater_than_10:
- move $t0, $v0
- li $t1, 0
- li $t2, 0
- sum:
- addi $t1, $t1, 1
- add $t2, $t2, $t1
- blt $t1, $t0, sum
- j print_sum
- print_sum:
- li $v0, 4
- la $a0, str8
- syscall
- li $v0, 1
- move $a0, $t0
- syscall
- li $v0, 4
- la $a0, str6
- syscall
- li $v0, 1
- move $a0, $t2
- syscall
- li $v0, 4
- la $a0, str7
- syscall
- j loop
- error:
- li $v0, 4
- la $a0, str9
- syscall
- exit:
- li $v0, 10
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement