首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用内联汇编计算斐波那契数列

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

Stack Overflow用户
提问于 2017-12-30 18:33:58
回答 1查看 563关注 0票数 1

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

代码语言:javascript
复制
#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个斐波纳契数)。你知道错误在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-30 18:51:34

看起来您需要将计数检查移到循环块的开始处,而不是结束处,因为您在结束时进行检查,所以您会比您想要的多一次循环。或者在进入循环之前使用dec ecx。

将检查移动到乞求将类似于(未检查,只是说明性):

代码语言:javascript
复制
"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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48033089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档