MIPS QTSPIM 64位
所以我使用QTSPIM,我知道MIPS只能处理32位。这也是一个任务,只是为了把它摆出来 所以我的目的是能够显示阶乘(14)。目前,我相信程序只能达到阶乘(12)。要支持64位有多难。我知道我需要存储上32位和下32位 有人能提供提示或示例代码吗MIPS QTSPIM 64位,mips,Mips,所以我使用QTSPIM,我知道MIPS只能处理32位。这也是一个任务,只是为了把它摆出来 所以我的目的是能够显示阶乘(14)。目前,我相信程序只能达到阶乘(12)。要支持64位有多难。我知道我需要存储上32位和下32位 有人能提供提示或示例代码吗 # Iterative program to compute n! # The value n is entered by the user .globl main main:
# Iterative program to compute n!
# The value n is entered by the user
.globl main
main:
li $v0, 5
syscall # Get user input for n
move $s0, $v0 # s0: n
move $a0, $s0 # put n into first parameter
jal factorial
move $s1, $v0 # s1: n!
move $a0, $s1
li $v0, 1
syscall # display n!
li $v0, 10
syscall
#-----------------------------------
# Factorial Function
#
# Parameters: a0 - n
# Return Values: V0 - n!
factorial:
#---------------------- Stuff at beginning of function
addi $sp, $sp, -12 # space for 3 values
sw $ra, 0($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
#---------------------- body of function
move $s0, $a0 # s0: n
li $s1, 1 # s1: n! (init to 1)
li $t1, 1 # t1: loop exit test value
floop: ble $s0, $t1, done # when n decrements down to 1, exit
mul $s1, $s1, $s0 # s1 = s1 * n
addi $s0, $s0, -1 # n--
j floop
#---------------------- Stuff at end of function
done: move $v0, $s1 # put n! into return register
lw $ra, 0($sp)
lw $s0, 4($sp)
lw $s1, 8($sp)
addi $sp, $sp, 12
jr $ra # TTFN
如果使用乘法指令的两个操作数形式
MULT$s1、
,它会将$s1
和$s2
的64位乘积放入HI
和LO
专用寄存器中
您可以使用此功能通过一些额外的工作来计算64位阶乘。具体地说,一旦乘积超过32位,您就需要编写代码来执行相当于小学长乘法的操作