乘法除法反汇编

汇编乘法指令一般为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] //相当于eax
2
lea edx,dword ptr [eax8+eax] //相当于eax9
push ecx //eax2压栈
lea ecx,dword ptr [eax
4+eax]//ecx=eax5
push edx //eax
9压栈
lea edx,dword ptr [ecx2+4]//相当于eax11+4
push edx//压入上一步结果

在除法中,需要用到符号扩展指令cdq,作用是将eax中的数扩展成四字,如果eax最高位是1,那么扩展后edx全部为1,如果是0,扩展后edx全部为0,最后32位带符号数就扩展成64位带符号的数。

猜你喜欢

转载自blog.csdn.net/z1041259928/article/details/87927391
今日推荐