Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何使用阶乘汇编代码设置初始值?_Assembly_Mips_Factorial_Mars Simulator - Fatal编程技术网

Assembly 如何使用阶乘汇编代码设置初始值?

Assembly 如何使用阶乘汇编代码设置初始值?,assembly,mips,factorial,mars-simulator,Assembly,Mips,Factorial,Mars Simulator,这是我的原始代码 main: addi $sp, $sp, -8 # adjust stack for 2 items sw $ra, 4($sp) # save return address sw $a0, 0($sp) # save argument slti $t0, $a0, 1 # test for n<1 beq $t0, $zero, L1 addi $v0, $zero, 1 # if

这是我的原始代码

main:    
    addi $sp, $sp, -8   # adjust stack for 2 items
    sw $ra, 4($sp)      # save return address
    sw $a0, 0($sp)      # save argument
    slti $t0, $a0, 1    # test for n<1
    beq $t0, $zero, L1
    addi $v0, $zero, 1  # if so, result is 1
    addi $sp, $sp, 8    # pop 2 items from stack
    jr $ra          # and return
L1: addi $a0, $a0, -1   # else decrement n
    jal main        # recursive call
    lw $a0, 0($sp)      # restore original n
    lw $ra, 4($sp)      # and return address
    addi $sp, $sp, 8    # pop 2 items from stack
    mul $v0, $a0, $v0   # multiply to get result
    jr $ra          # and return
main:
addi$sp,$sp,-8#调整2个项目的堆栈
sw$ra,4($sp)#保存回信地址
sw$a0,0($sp)#保存参数

slti$t0,$a0,1#测试n生成一个从
main
调用的单独函数,而不是使
main
本身递归


或者使用
intmain的第一个参数(intargc,char**argv)
作为
n

因此,您可以使用
/fac$(seq 2 4)
运行程序,以
$a0=4
运行程序

Unix
seq 2 4
命令打印
2 3 4
,因此该命令有3个参数加上隐式的第一个参数(命令名),因此C启动代码将
4
作为
argc
参数传递给
main


使用
/foo$(seq number)
是一种方便的方法,可以在手工编写的asm中乱搞,避免编写int解析代码,让程序以寄存器(或某些其他平台上的内存中的二进制整数启动,如在x86-64系统V ABI中使用
\u start
而不是
main
).

不确定您要问什么,可能您想将当前代码移动到一些过程中,如
factorial:
(基本上只是重命名
main
),然后创建新的
main
,将
a0
设置为初始值(2?),一个do
jal factorial
,然后使用MARS系统调用终止(我认为从头部看,v0=10).你是说这个吗?不要通过删除所有代码来破坏你的问题。这会使问题变得毫无意义/更难理解。@Peter Cordes,对不起,我的教授让我删除它。因为它是作业的一部分,其他学生可以复制它而不必尝试解决…我试图删除问题,但我无法。对不起。。