que*_*ons 3 c assembly gcc visual-studio-2010
我编写了这个简单的C代码,并使用Visual Studio 2010编译它,带有汇编程序输出.
int main(){
int x=1;
int y=2;
int z=x+y;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是装配输出..
; 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
Run Code Online (Sandbox Code Playgroud)
这完整吗?我没有看到任何ADD
声明.可以使用什么编译器来编译它?
由于您的代码不对这些值执行任何操作,因此编译器已对其中的大部分进行了优化.正如卡尔所提到的,剩下的就是将xor eax, eax
eax归零,即返回值的寄存器.
即使你是printf("%d", z)
,你的结果z
是编译时常量(3),这就是你在汇编列表中看到的所有内容.
您可以做的是在项目C++属性中禁用优化,您应该看到预期的程序集.此外,在Release模式下构建应该最小化您在asm中看到的额外调试内容.