gpt4 book ai didi

c - assembly 中的阶乘函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:12 24 4
gpt4 key购买 nike

所以我试图在汇编程序中创建一个阶乘函数

在 c 中:

 #include<stdio.h>



int fat (int n)
{
if (n==0) return 1;
else return n*fat(n-1);
}

int main (void){

printf("%d\n", fat(4));
return 0;

}

在汇编中:

.text

.global fat
fat:push %ebp
mov %esp, %ebp
movl $1,%eax
movl 4(%ebp),%edx

LOOP:cmp $0,%edx
je FIM
sub $1,%edx
push %edx
call fat
imul %edx,%eax

FIM:mov %ebp, %esp
pop %ebp
ret

我一直收到段错误错误,我不知道为什么...有人可以帮助我吗?

最佳答案

这一行的偏移量可能是错误的:

movl    4(%ebp),%edx

栈中有 %ebp 的前一个值和返回地址,所以你的偏移量必须大于 4。

我建议使用调试器逐步执行汇编代码,并确保所有寄存器值都与您期望的完全一致。除非您也保存和恢复它的值,否则您还会遇到 %edx 跨调用注册的问题。

关于c - assembly 中的阶乘函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656541/

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