gpt4 book ai didi

c - 在 MIPS 编程中使用递归调用查找数字的阶乘

转载 作者:行者123 更新时间:2023-11-30 16:10:56 25 4
gpt4 key购买 nike

这是C源代码

#include <stdio.h>

int main() {

printf("The Factorial of 10 is %d\n", fact(10));
}

int fact(int n) {

if (n < 1)
return (1);
else
return (n * fact(n - 1));
}

我正在将 C 编程函数转换为 MIPS,但是当我运行 MIPS 程序时,我收到 .ascii 部分的错误。

    .text
.globl main
main:
subu $sp,$sp,32 # Stack frame is 32 bytes long
sw $ra,20($sp) # Save return address
sw $fp,16($sp) # Save old frame pointer
addiu $fp,$sp,28 # Set up frame pointer

li $a0,10 # Put argument (10) in $a0
jal fact # Call factorial function
la $a0,$LC # Put format string in $a0
move $a1,$v0 # Move fact result to $a1
jal printf # Call the print function

lw $ra,20($sp) # Restore return address
lw $fp,16($sp) # Restore frame pointer
addiu $sp,$sp,32 # Pop stack frame
jr $ra # Return to caller

.rdata
$LC:
.ascii “The factorial of 10 is %d\n\000”

.text
fact:
subu $sp,$sp,32 # Stack frame is 32 bytes long
sw $ra,20($sp) # Save return address
sw $fp,16($sp) # Save frame pointer
addiu $fp,$sp,28 # Set up frame pointer
sw $a0,0($fp) # Save argument (n) to use for Recursive Call

lw $v0,0($fp) # Load n
bgtz $v0,$L2 # Branch if n > 0
li $v0,1 # Return 1
jr $L1 # Jump to code to return
$L2:
lw $v1,0($fp) # Load n
subu $v0,$v1,1 # Compute n - 1
move $a0,$v0 # Move value to $a0

jal fact # Call factorial function
lw $v1,0($fp) # Load n
mul $v0,$v0,$v1 # Compute fact(n-1) * n

$L1: # Result is in $v0
lw $ra, 20($sp) # Restore $ra
lw $fp, 16($sp) # Restore $fp
addiu $sp, $sp, 32 # Pop stack
jr $ra # Return to caller

它给我一个 .ascii 代码部分的错误,说它不应该出现在 .text 中:

Error in ".ascii" directive cannot appear in text segment

它还说:

"$L1": operand is of incorrect type

最佳答案

It's giving me an error for the .ascii code section saying it shouldn't be in the .text:

Error in ".ascii" directive cannot appear in text segment"

我在这里冒险,因为我不能 100% 确定你在什么上运行这个程序,但像 MARS 这样的一些模拟程序无法识别 rdata 段。您可以尝试仅使用 .data .

此外,如果您使用的是 WinMIPS64 之类的系统,您可能需要尝试将 .data 段放在代码的顶部。我知道您所做的事情在某些环境中是正确的,但在其他环境中不起作用,因此请尝试一下。

我建议您单独尝试这些事情,以防万一。

关于c - 在 MIPS 编程中使用递归调用查找数字的阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com