移位和循环移位指令
shl, shr sal, sar, sol, sor, scl, scr, shld, shrd
逻辑移位和算术移位
shl
shl reg/mem, imm8/cl
mov bl, 8fh shl bl, 1 ; bl = 00011110b cf = 1 mov al, 10000000b shl al, 2 ; cf = 0, al = 00000000b
当一个数多次进行左移时,进位标志保存的是最后移出最高有效位的数值
位元乘法
shr
shr reg/mem, imm8/cl
```assembly
mov al, 0D0h
shr al, 1 ; al = 01101000 cf = 0
mov al, 00000010b
shr al, 2 ; al = 00000000b cf = 1
```
位元除法
当一个数多次进行右移时,进位标志保存的是最后移出最低有效位的数值
sal和sar
sal 与shl一样
mov al, 0f0h sar al, 1 ; cf = 0 al = 11111000b ; 有符号数除法 mov dl, -128 sar dl, 3 ; dl = 11110000b cf = 0 ; ax符号扩展到eax mov ax, -128 shl eax, 16 sar eax, 16
rol
把所有位都向左移, 最高位复制到进位标志位和最低位
mov al, 40h rol al, 1 ; al = 10000000b cf = 0 rol al, 1 ; al = 00000001b cf = 1 rol al, 1 ; al = 00000010b cf = 9 ; 循环多次 mov al, 26h rol al, 4 ; al = 62h mov ax, 6a4bh rol ax, 4 ; ax = a4b6h rol ax, 4 ; ax = 4b6ah rol ax, 4 ; ax = b6a4h rol ax, r ; ax = 6a4bh
ror
把所有位都向右移, 最低位复制到进位标志位和最高位
mov al, 01h
ror al, 1 ; al = 10000000b cf = 1
ror al, 1 ; al = 01000000b cf = 0
; 循环多次
mov al, 00000100b
ror al, 3 ; al = 80h cf = 1
rcl 和 rcr
- rcl: 每一位左移,进位标志复制到最低位,最高位复制到进位标志
- rcr: 每一位右移,进位标志复制到最高位,最低位复制到进位标志
clc ; cf = 0 mov bl, 88h rcl bl, 1 ; bl = 00010000b cf = 1 rcl b1, 1 ; bl = 00100001b cf = 0 ; 从进位标志位恢复位 .data testVal byte 01101010b .code shr testVal, 1 ; testVal = 00110101b cf = 0 jc exit rcl testVal, 1 ; testVal = 01101010b cf = 0 stc ; cf = 1 mov ah, 10h rcr ah, 1 ; ah = 10001000b cf = 0
有符号数溢出
mov al, +127 rol al, 1 ; al = 11111110b of = 1 mov al, -128 shr al, 1 ; al = 01000000b of = 1
shld和shrd指令
shld/shrd dest, source, count
shld/shrd reg16, reg16, cl/imm8
shld/shrd mem16, reg16, cl/imm8
shld/shrd reg32, reg32, cl/imm8
shld/shrd mem32, reg32, cl/imm8
.data
wVal word, 9ba6h
.code
mov ax, 0ac36h
shld wVal, ax, 4 ; wVal = ba6ah
mov ax, 234bh
mov dx, 7654h
shrd ax, dx, 4 ; ax = 4243
.data
array dword 648b2165h, 8c943a29h, 6dfa4b86h, 91f76c04h, 8baf9857h
.code
mov bl, 4
mov esi, offset array
mov ecx, (lengthof array) - 1
L1:
push ecx
mov eax, [esi + type dword]
mov cl, bl
shrd [esi], eax, cl
add esi, type dword
pop ecx
loop L1
shr dword ptr [esi], 4
版权声明:本文为qq_31155883原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。