我只是通过检查编译器生成的二进制代码来学习x86 asm.
在Visual Studio 2010 beta 2中使用C++编译器编译的代码.
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.21003.01 for 80x86
Run Code Online (Sandbox Code Playgroud)
int mainCRTStartup()
{
int x=5;int y=1024;
while(x) { x--; y/=2; }
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
cl /c /O2 /Oy- /MD sandbox.c
link /NODEFAULTLIB /MANIFEST:NO /SUBSYSTEM:CONSOLE sandbox.obj
Run Code Online (Sandbox Code Playgroud)
以下从入口点开始.
00401000 >/$ B9 05000000 MOV ECX,5
00401005 |. B8 00040000 MOV EAX,400
0040100A |. 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX]
00401010 |> 99 /CDQ
00401011 |. 2BC2 |SUB …Run Code Online (Sandbox Code Playgroud)