整数算术运算中的移位、旋转、乘除指令应用
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 指令来进行整数乘法,以提高性能。SHL 指令在乘数为 2 的幂时可执行无符号乘法,将无符号整数左移 n 位相当于将其乘以 2^n。例如,要将无符号 EAX 乘以 36,可将 36 表示为 2^5 + 2^2,利用乘法分配律进行计算:
mov eax,123
mov ebx,eax
shl eax,5
; multiply by 2^5
shl ebx,2
; multiply by 2^2
add eax,ebx
; add the products
超级会员免费看
订阅专栏 解锁全文

3

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



