汇编乘法指令一般为mul,imul,如果在汇编中使用这些指令来进行乘法运算,会比较慢,一般要进行转换。
int fun(){
int a;
printf("%d,%d,%d",a11+4,a9,a2);
return 0;
}
反汇编:push ecx //为局部变量a分一个空间
mov eax,dword ptr [esp] //esp栈顶指针指向的就是刚刚压入的ECX
lea ecx,dword ptr [eax+eax] //相当于eax2
lea edx,dword ptr [eax8+eax] //相当于eax9
push ecx //eax2压栈
lea ecx,dword ptr [eax4+eax]//ecx=eax5
push edx //eax9压栈
lea edx,dword ptr [ecx2+4]//相当于eax11+4
push edx//压入上一步结果
…
在除法中,需要用到符号扩展指令cdq,作用是将eax中的数扩展成四字,如果eax最高位是1,那么扩展后edx全部为1,如果是0,扩展后edx全部为0,最后32位带符号数就扩展成64位带符号的数。