VC8常用汇编 常见运算

简介: VC8常用汇编 常见运算

1,

+=
m_x += 3;
add  DWORD PTR [eax], 3

2,

-=
add  DWORD PTR [eax], -3

3,

*=
m_x *= 3;
mov  ecx, DWORD PTR [eax]
lea  ecx, DWORD PTR [ecx+ecx*2]
mov  DWORD PTR [eax], ecx
m_x *= 5;
mov  ecx, DWORD PTR [eax]
lea  ecx, DWORD PTR [ecx+ecx*4]
mov  DWORD PTR [eax], ecx
m_x *= 7;
mov  ecx, DWORD PTR [eax]
lea  edx, DWORD PTR [ecx*8]
sub  edx, ecx
mov  DWORD PTR [eax], edx

4,

/=
 m_x /= 2;
mov  eax, DWORD PTR [ecx]
cdq
sub  eax, edx
sar  eax, 1
mov  DWORD PTR [ecx], eax
m_x /= 5
mov  edx, DWORD PTR [ecx]
mov  eax, 1717986919  ; 66666667H
imul  edx
sar  edx, 1
mov  eax, edx
shr  eax, 31   ; 0000001fH
add  eax, edx
mov  DWORD PTR [ecx], eax
m_x /= 7
mov  esi, DWORD PTR [ecx]
mov  eax, -1840700269 ; 92492493H
imul  esi
add  edx, esi
sar  edx, 2
mov  eax, edx
shr  eax, 31   ; 0000001fH
add  eax, edx
mov  DWORD PTR [ecx], eax
>>=
m_x >>= 3;
sar  DWORD PTR [eax], 3
m_x <<= 3
shl  DWORD PTR [eax], 3
相关文章
|
9月前
|
C语言
【汇编语言实战】两个32位数的相加运算
【汇编语言实战】两个32位数的相加运算
95 2
|
存储 算法 编译器
5.8 汇编语言:汇编高效除法运算
通常情况下计算除法会使用`div/idiv`这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转化为为乘法,这样就可以提高除法运算的效率。
|
编译器
5.7 汇编语言:汇编高效乘法运算
乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过`mul(无符号乘法)`和`imul(有符号乘法)`这两个指令实现的。由于乘法指令在执行时所消耗的时钟周期较多,所以编译器在优化代码时通常会尝试将乘法操作转换为更高效的加法、和移位操作。
|
存储 算法 程序员
5.4 汇编语言:算数运算指令集
算术运算指令集是计算机中的一组基本操作,用于对数字执行常见的算术运算操作。这些指令都是计算机中非常基础的运算指令,可以用于实现所有常见的算术运算操作,并可以通过组合使用实现更加复杂的数学运算。在实际编程中,程序员可以根据具体需求选择合适的运算指令,实现程序中的算术运算操作。
|
存储 Android开发
【Android 逆向】x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )
【Android 逆向】x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )
257 0