逻辑运算和移位指令
逻辑运算指令(与/或/异或/非)
运算规则:按位操作,无进/借位
可对8位或16位的寄存器或存储器中的内容进行按位操作
对标志位的影响(除NOT指令外):
CF OF SF ZF PF AF
0 0 * * * 不定
根据运算结果设置
注意: 非指令NOT对标志无影响
1
表 3 – 3 逻辑运算类指令
2
(1) 逻辑”与” AND
对两个操作数进行按位逻辑“与”操作。
格式:AND dest, src
用途:①实现两操作数按位相与。
②保留操作数的某几位,清零其他位。
③使操作数不变,得影响6个标志位,并使
CF=OF=O 。
例1:保留AL中低4位,高4位清0。
AND AL, 0FH
例2:AND AX, AX;与自身相与,不改变AX内容,但影响6个状态标志位。
3
例3:测试AL的bit7,bit5,bit2是否都是1。
AND AL, 10100100B
CMP AL, 10100100B
JZ YES ; if match, go to YES
……; if not match
……
YES: ……; goes here if all ‘1’
4
对两个操作数进行按位逻辑”或”操作。
格式:OR dest, src
用途:①实现两操作数按位相或。
例: OR [BX], AL
②保留操作数的某几位,其他位置1。
例: OR AL,20H;将AL的BIT5位置1。
③使操作数不变,但影响6个标志位,并使CF=OF=O 。
例: OR AX,AX;AX中的内容不变,但影响6个状态标志位
(2) 逻辑”或” OR
5
对操作数进行按位逻辑”非”操作。
格式:NOT mem/reg
例:NOT CX
NOT BYTE PTR[DI]
(3) 逻辑“非”(取反) NOT
6
对两个操作数按位进行”异或”操作。
格式:XOR dest, src
用途:对reg清零(自身异或)
把reg/mem的某几位变反(与’1’异或)
例1:把AX寄存器清零。例2:把DH的bit4,3变反
① MOV AX,0 XOR DH,18H
② XOR AX,AX
③ AND AX,0
④ SUB AX,AX
(4) 逻辑”异或” XOR
7
操作与AND指令类似,但不将”与”的结果送回,只影响标志位。
AND与TEST间的区别类似于SUB与CMP间的区别
作用: TEST指令常用于位测试,与条件转移指令一起用。
例:测试AL的内容是否为负数。
TEST AL,80H ;检查AL中D7=1?
JNZ MINUS ;是1(负数),转MINUS
……;否则(正数)不转移
MINUS: ……
……
(5) 测试指令TEST
8
表3-4 移位操作类指令
9
移位指令功能示意
算术左移指令
算术右移指令
逻辑左移指令
逻辑右移指令
小循环右移指令
小循环左移指令
大循环左移指令
大循环右移指令
CF=
10
第3章 8088指令系统4(逻辑运算和移位指令 来自淘豆网m.daumloan.com转载请标明出处.