文档介绍:逻辑指令:
逻辑运算指令
AND、OR、NOT、XOR、TEST
移位指令
SHL、SHR 、 SAL 、SAR、ROL、ROR、RCL、RCR
1
逻辑非指令:NOT OPR * OPR 不能为立即数
执行操作: ( OPR ) ( OPR ) * 不影响标志位
逻辑与指令:AND DST , SRC
执行操作: ( DST ) ( DST ) ( SRC )
逻辑或指令:OR DST , SRC
执行操作: ( DST ) ( DST ) ( SRC )
异或指令: XOR DST , SRC
执行操作: ( DST ) ( DST ) ( SRC )
测试指令: TEST OPR1 , OPR2执行操作: ( OPR1 ) ( OPR2 )
CF OF SF ZF PF AF
0 0 * * * 无定义
根据运算结果设置
逻辑运算指令
2
例:屏蔽 AL 的第 0、1 两位
AND AL , 0FCH
例:置 AL 的第 5 位为 1
OR AL , 20H
例:使 AL 的第 0、1 位变反
XOR AL , 3
例:测试某些位是 0 是 1
TEST AL , 1
JZ EVEN
* * * * * * * *
OR 0 0 1 0 0 0 0 0
* * 1 * * * * *
* * * * * * * *
XOR 0 0 0 0 0 0 1 1
* * * * * * * *
* * * * * * * *
AND 1 1 1 1 1 1 0 0
* * * * * * 0 0
3
逻辑左移 SHL OPR , CNT
逻辑右移 SHR OPR , CNT
算术左移 SAL OPR , CNT(同逻辑左移)
算术右移 SAR OPR , CNT
CF 0
移位指令
0 CF
CF
4
循环左移 ROL OPR , CNT
循环右移 ROR OPR , CNT
带进位循环左移 RCL OPR , CNT
带进位循环右移 RCR OPR , CNT
CF
CF
CF
CF
5
注意:
* OPR 可用除立即数以外的任何寻址方式
* CNT = 1, SHL OPR , 1
CNT > 1, MOV CL , CNT
SHL OPR , CL ; 以 SHL 为例
* 条件标志位:
CF = 移入的数值
T = 1 时,最高有效位的值发生变化
T = 1 时,最高有效位的值不变
移位指令:
SF、ZF、PF 根据移位结果设置,AF 无定义
循环移位指令:
不影响 SF、ZF、PF、AF
OF =
6
例:( AX ) = 0012H,( BX ) = 0034H,
把它们装配成( AX ) = 1234H
例:( BX ) = 84F0H
(1) ( BX ) 为无符号数,求( BX ) / 2
SHR BX , 1 ; (BX) = 4278H
(2) ( BX ) 为带符号数,求( BX ) / 2
SAR BX , 1 ; (BX) = 0C278H
MOV CL, 8
ROL AX, CL
ADD AX, BX
7
MOV CH , 4 ; 循环次数
MOV CL , 4 ; 移位次数
NEXT:
ROL BX , CL
MOV AX , BX
AND AX , 0FH
PUSH AX
DEC CH
JNZ NEXT
0008
0004
000F
0000 ( SP )
(3) ( BX ) = 84F0H,把( BX ) 中的 16 位数每 4 位压入堆栈
8
串处理指令:
设置方向标志指令
CLD、STD
串处理指令串重复前缀
MOVSB / MOVSW REP
STOSB / STOSW REPE / REPZ
LODSB / LODSW REPNE / REPNZ
CMPSB / CMPSW
SCASB / SCASW
9
与 REP 配合工作的 MOVS / STOS / LODS
REP MOVS / STOS / LODS
执行操作:
(1) 如( CX ) = 0 则退出 REP,否则转(2)
(2) ( CX ) ( CX ) - 1
(3) 执行 MOVS / STOS / LODS
(4) 重复(1) ~ (3)
10