You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
2.1 KiB
165 lines
2.1 KiB
.data
|
|
__str0:
|
|
.asciiz "Enter n:\n"
|
|
__str1:
|
|
.asciiz "n! = "
|
|
__str2:
|
|
.asciiz "\n"
|
|
.text
|
|
|
|
|
|
.globl entry
|
|
entry:
|
|
addi $sp, $sp, -4
|
|
addi $sp, $sp, -16
|
|
la $s0, prints
|
|
sw $s0, 12($sp)
|
|
la $t0, __L1
|
|
sw $t0, 8($sp)
|
|
la $t0, __str0
|
|
sw $t0, 0($sp)
|
|
lw $t0, 12($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L1:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 4($sp)
|
|
lw $s0, 12($sp)
|
|
move $s0, $t0
|
|
addi $sp, $sp, 16
|
|
addi $sp, $sp, -16
|
|
addi $s0, $sp, 16
|
|
la $s1, inputd
|
|
sw $s1, 12($sp)
|
|
sw $s0, 8($sp)
|
|
la $t0, __L3
|
|
sw $t0, 4($sp)
|
|
lw $t0, 12($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L3:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 0($sp)
|
|
lw $s0, 8($sp)
|
|
lw $s1, 12($sp)
|
|
move $s1, $t0
|
|
sw $s1, 0($s0)
|
|
move $s0, $s1
|
|
addi $sp, $sp, 16
|
|
addi $sp, $sp, -16
|
|
la $s0, prints
|
|
sw $s0, 12($sp)
|
|
la $t0, __L5
|
|
sw $t0, 8($sp)
|
|
la $t0, __str1
|
|
sw $t0, 0($sp)
|
|
lw $t0, 12($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L5:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 4($sp)
|
|
lw $s0, 12($sp)
|
|
move $s0, $t0
|
|
addi $sp, $sp, 16
|
|
addi $sp, $sp, -28
|
|
la $s0, printd
|
|
sw $s0, 24($sp)
|
|
la $t0, __L8
|
|
sw $t0, 20($sp)
|
|
la $t0, factorial
|
|
sw $t0, 12($sp)
|
|
la $t0, __L9
|
|
sw $t0, 8($sp)
|
|
lw $t0, 28($sp)
|
|
sw $t0, 0($sp)
|
|
lw $t0, 12($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L9:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 4($sp)
|
|
sw $t0, 12($sp)
|
|
lw $t0, 24($sp)
|
|
addi $sp, $sp, 12
|
|
jr $t0
|
|
|
|
__L8:
|
|
addi $sp, $sp, -12
|
|
lw $t0, 16($sp)
|
|
lw $s0, 24($sp)
|
|
move $s0, $t0
|
|
addi $sp, $sp, 28
|
|
addi $sp, $sp, -16
|
|
la $s0, prints
|
|
sw $s0, 12($sp)
|
|
la $t0, __L11
|
|
sw $t0, 8($sp)
|
|
la $t0, __str2
|
|
sw $t0, 0($sp)
|
|
lw $t0, 12($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L11:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 4($sp)
|
|
lw $s0, 12($sp)
|
|
move $s0, $t0
|
|
addi $sp, $sp, 16
|
|
addi $sp, $sp, 4
|
|
lw $ra, 4($sp)
|
|
jr $ra
|
|
|
|
.globl factorial
|
|
factorial:
|
|
addi $sp, $sp, 0
|
|
lw $s0, 0($sp)
|
|
li $s1, 1
|
|
sgt $s0, $s0, $s1
|
|
beq $s0, $zero, __L12
|
|
addi $sp, $sp, -20
|
|
lw $s0, 20($sp)
|
|
la $s1, factorial
|
|
sw $s1, 16($sp)
|
|
sw $s0, 12($sp)
|
|
la $t0, __L14
|
|
sw $t0, 8($sp)
|
|
lw $t0, 20($sp)
|
|
sw $t0, 0($sp)
|
|
li $s0, 1
|
|
lw $t0, 0($sp)
|
|
sub $t0, $t0, $s0
|
|
sw $t0, 0($sp)
|
|
lw $t0, 16($sp)
|
|
addi $sp, $sp, 0
|
|
jr $t0
|
|
|
|
__L14:
|
|
addi $sp, $sp, 0
|
|
lw $t0, 4($sp)
|
|
lw $s0, 12($sp)
|
|
lw $s1, 16($sp)
|
|
move $s1, $t0
|
|
mult $s0, $s1
|
|
mflo $s0
|
|
addi $sp, $sp, 20
|
|
sw $s0, 4($sp)
|
|
addi $sp, $sp, 0
|
|
lw $ra, 8($sp)
|
|
jr $ra
|
|
|
|
__L12:
|
|
li $s0, 1
|
|
sw $s0, 4($sp)
|
|
addi $sp, $sp, 0
|
|
lw $ra, 8($sp)
|
|
jr $ra
|
|
addi $sp, $sp, 0
|
|
lw $ra, 8($sp)
|
|
jr $ra
|