欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

intel编译器编译斐波拉契据数列的疑问

更新时间: 2014-01-05 03:17:52 责任编辑: Author_N1

 

intel编译器编译斐波拉契数列的疑问
使用icc编译器编译斐波拉契数列,c代码详见下方,得到汇编代码,出现以下疑问:
1。函数入口处保护寄存器时,为何对于esi寄存器入栈两次,而出栈时却对应于esi,ecx,明明没有入栈ecx,而出栈时却多出个ecx,不知有何寓意?
2。icc生成的汇编代码中的注释很多都不知道什么意思,譬如“;2.1”“; LOE eax ebx ebp edi”“; Preds .B1.2”这些都是什么意思呢?
3。在链接时会出错,报错主要是因为生成的asm文件中的一些库文件找不到,我找到的解决办法是,将vc中的这些库手动复制到当前目录下,不过觉得这不是根本解决办法,因该与环境变量的设置有关,不过不太清楚如何修改。 
另外,使用命令行模式调用icc时,我想对于生成的汇编代码重命名,譬如:“icl -S -o fibo_111.s fibo.c”,不过在生成汇编文件时好像默认生成的是“fibo.asm”,为什么呢?
  请教大牛指点一二!
c语言代码:
int fibonacci(int n) 
{  if (n < 2) 
{    
return n;  
}  
return fibonacci(n - 2) + fibonacci(n - 1);
}

生成的汇编代码:
; -- Machine type PW
; mark_description "Intel(R) C++ Compiler XE for applications running on IA-32, Version 12.0.0.104 Build 20101006";
; mark_description "-S";
.686P
  .387
OPTION DOTNAME
ASSUME CS:FLAT,DS:FLAT,SS:FLAT
_TEXT SEGMENT  PARA PUBLIC FLAT  'CODE'
; COMDAT _fibonacci
TXTST0:
; -- Begin  _fibonacci
; mark_begin;
IF @Version GE 800
  .MMX
ELSEIF @Version GE 612
  .MMX
  MMWORD TEXTEQU <QWORD>
ENDIF
IF @Version GE 800
  .XMM
ELSEIF @Version GE 614
  .XMM
  XMMWORD TEXTEQU <OWORD>
ENDIF
       ALIGN     16
PUBLIC _fibonacci
_fibonacci PROC NEAR 
; parameter 1: eax
.B1.1:                          ; Preds .B1.0
        mov       eax, DWORD PTR [4+esp]                        ;2.1
PUBLIC _fibonacci.
_fibonacci.::
        push      esi                                           ;2.1
        push      ebp                                           ;2.1
        push      esi                                           ;2.1
        mov       ebp, eax                                      ;2.1
        cmp       ebp, 2                                        ;2.12
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:52
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20543/
本文WWW.DOC100.NET DOC100.NET版权所有。