生成的汇编代码是否完整?

时间:2012-03-27 04:57:12

标签: c visual-studio-2010 gcc assembly

我编写了这个简单的C代码,并使用Visual Studio 2010编译它,并使用汇编程序输出。

int main(){
    int x=1;
    int y=2;
    int z=x+y;
    return 0;
}  

这是装配输出..

; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01 

    TITLE   foobar.cpp
    .686P
    .XMM
    include listing.inc
    .model  flat

INCLUDELIB OLDNAMES

EXTRN   @__security_check_cookie@4:PROC
PUBLIC  _main
; Function compile flags: /Ogtp
; File foobar.cpp
;   COMDAT _main
_TEXT   SEGMENT
_main   PROC                        ; COMDAT

; 2    :    int x=1;
; 3    :    int y=2;
; 4    :    int z=x+y;
; 5    :    return 0;

    xor eax, eax

; 6    : }

    ret 0
_main   ENDP
_TEXT   ENDS
END

这完整吗?我没有看到任何ADD声明。可以使用什么编译器来编译它?

1 个答案:

答案 0 :(得分:7)

由于您的代码不执行任何具有这些值的内容,因此编译器已对其中的大部分进行了优化。正如Carl所提到的,剩下的就是xor eax, eax,它将eax归零,即返回值的寄存器。

即使您是printf("%d", z),您的结果z也是编译时常量(3),这就是您在汇编列表中看到的全部内容。

您可以做的是在项目C ++属性中禁用优化,您应该看到预期的程序集。此外,在发布模式下构建应该最小化您在asm中看到的额外调试内容。