整数运算中的移位、旋转及乘除指令应用
1. 移位和旋转应用
1.1 多位移位示例
以下代码片段展示了如何对数组元素进行右移操作:
.data
ArraySize = 3
array BYTE ArraySize DUP(99h)
; 1001 pattern in each nybble
.code
main PROC
mov esi,0
shr array[esi+2],1
; high byte
rcr array[esi+1],1
; middle byte, include Carry flag
rcr array[esi],1
; low byte, include Carry flag
此示例虽仅对 3 个字节进行移位,但可轻松修改为对字或双字数组进行操作,还能使用循环对任意大小的数组进行移位。
1.2 二进制乘法
有时,程序员会使用位移位而非 MUL 指令来进行整数乘法,以获取更高的性能。当乘数是 2 的幂时, SHL 指令可执行无符号乘法。将无符号整数左移 n 位,相当于将其乘以 2^n。任何其他乘数都可表示为 2 的幂之和。
例如,要将无符号 EAX 乘以 36,可将 36 写成 2^5 + 2^2,并使用乘法分配律:
EAX * 36 = EAX * (2^5 + 2^2)
= EAX * (32 +
超级会员免费看
订阅专栏 解锁全文
5

被折叠的 条评论
为什么被折叠?



