gpt4 book ai didi

在 C 中使用内联汇编计算斐波那契数列

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

我尝试用 C 编写一个简单的控制台程序(使用 clang 作为编译器),它将使用内联汇编来计算斐波那契数和在标准输入中输入的索引。

#include <stdio.h>

int main()
{
int ulaz;
scanf("%d",&ulaz);
int rezultat;
asm(
"mov %1,%%ecx\n"
".intel_syntax\n"
"mov eax,0\n"
"mov ebx,1\n"
"petlja:\n"
"add eax,ebx\n"
"xchg eax,ebx\n"
"loop petlja\n"
".att_syntax\n"
"mov %%ebx,%0\n"
: "=m" (rezultat)
: "m" (ulaz)
);
printf("%d\n",rezultat);
return 0;
}

它似乎是在计算斐波那契数列,但不是根据用户输入的指数计算的。例如,对于输入“10”,它应该输出“55”(第 10 个斐波那契数),但它输出“89”(这是一个斐波那契数,但不是第 10 个斐波那契数)。知道错误在哪里吗?

最佳答案

看起来您需要将计数检查移到循环 block 的开头而不是末尾,因为您在末尾进行检查,所以循环比您想要的多了一次。在进入循环之前,或者 dec ecx。

将支票移到乞讨处(未检查,只是说明性的):

"mov %1,%%ecx\n"
".intel_syntax\n"
"mov eax,0\n"
"mov ebx,1\n"
loop_start:\n"
"test ecx, ecx\n"
"jz loop_done"
"add eax,ebx\n"
"xchg eax,ebx\n"
"dec ecx\n"
"jmp loop_start\n"
"loop_done:\n"
".att_syntax\n"
"mov %%ebx,%0\n"

关于在 C 中使用内联汇编计算斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033089/

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