1.逻辑指令
逻辑运算指令
AND、OR、NOT、XOR、TEST
移位指令
SHL、SHR 、 SAL 、SAR、
ROL、ROR、RCL、RCR
2.逻辑运算指令
3.移位指令
逻辑左移 SHL OPR, CNT shift logical left |
||
逻辑右移
SHR OPR, CNT shift logical right |
||
算术左移 SAL OPR, CNT shift arithmetic left |
(同逻辑左移) | |
算术右移 SAR OPR, CNT shift arithmetic right |
||
循环左移
ROL OPR, CNT rotate left |
||
循环右移
ROR OPR, CNT rotate right |
||
带进位循环左移
RCL OPR, CNT rotate left through carry |
||
带进位循环右移
RCR OPR, CNT rotate right through carry |
注意:
* OPR可用除立即数以外的任何寻址方式 OPR操作数 CNT操作次数
* CNT=1,SHL OPR, 1
CNT>1,MOV CL, CNT
SHL OPR, CL ; 以SHL为例
* 条件标志位:
CF = 移入的数值
OF=1 CNT=1时,最高有效位的值发生变化
OF=0 CNT=1时,最高有效位的值不变
移位指令:
SF、ZF、PF 根据移位结果设置,AF无定义
循环移位指令:
不影响 SF、ZF、PF、AF
例:(AX)= 0012H,(BX)= 0034H,把它们装配成(AX)= 1234H
MOV CL, 8
ROL AX, CL
ADD AX, BX
例:(BX) = 84F0H
(1) (BX) 为无符号数,求 (BX) / 2
SHR BX, 1 ; (BX) = 4278H
(2) (BX) 为带符号数,求 (BX) ×2
SAL BX, 1 ; (BX) = 09E0H, OF=1
(3) (BX) 为带符号数,求 (BX) / 4
MOV CL, 2
SAR BX, CL ; (BX) = 0E13CH
(3) (BX)=84F0H,把 (BX) 中的 16 位数每 4 位压入堆栈
MOV CH, 4 ; 循环次数 MOV CL, 4 ; 移位次数 NEXT: ROL BX, CL MOV AX, BX AND AX, 0FH PUSH AX DEC CH JNZ NEXT