简明x86汇编语言教程(17)
时间:2025-07-14
时间:2025-07-14
x86汇编语言
当然,“偷懒”的意思是说,把那些应该让机器做的事情交给计算机来做,因为它做得更好。我们应该把精力集中到设计算法,而不是编写源代码本身上,因为编译器几乎只能做等价优化,而实现相同功能,但使用更好算法的程序实现,则几乎只能由人自己完成。 举个例子,这样一个函数:
int fun(){ int a=0;
register int i;
for(i=0; i<1000; i++) a+=i; return a; }
在某种编译模式[DEBUG]下被编译为
push ebp mov ebp,esp sub esp,48h push ebx push esi push edi
lea edi,[ebp-48h] mov ecx,12h
mov eax,0CCCCCCCCh rep stos dword ptr [edi] mov dword ptr [ebp-4],0 mov dword ptr [ebp-8],0 jmp fun+31h
mov eax,dword ptr [ebp-8] add eax,1
mov dword ptr [ebp-8],eax cmp dword ptr [ebp-8],3E8h jge fun+45h
mov ecx,dword ptr [ebp-4] add ecx,dword ptr [ebp-8] mov dword ptr [ebp-4],ecx jmp fun+28h
mov eax,dword ptr [ebp-4] pop edi pop esi pop ebx mov esp,ebp pop ebp ret
; 恢复现场 ; 返回 ; 走着 ; i++
; i<1000?
; a+=i;
; return a;
; 保护现场
; 初始化变量-调试版本特有。
; 本质是在堆中挖一块地儿,存CCCCCCCC。 ; 用串操作进行,这将发挥Intel处理器优势 ; ‘a=0’ ; ‘i=0’ ; 子程序入口