1
1
8086指令系统(2)
2
三、逻辑运算和移位类
逻辑运算
移位操作
非循环移位
循环移位
3
逻辑运算和移位指令
4
指令类型
逻辑运算
与,或,非,异或
移位操作
非循环移位,循环移位
5
一、逻辑运算
逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数;
除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0
6
1.“与”指令:
格式:
AND OPRD1,OPRD2
操作:
两操作数相“与”,结果送目标地址。
7
“与”指令的应用
实现两操作数按位相与的运算
AND BL,[SI]
使目标操作数的某些位不变,某些位清零
AND AL,0FH
在操作数不变的情况下使CF和OF清零
AND AX,AX
8
“与”指令应用例
从地址为3F8H的端口中读入一个字节数,如果该数的bit1位为1,则可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。
编写相应的程序段。
9
“与”指令应用例
开 始
取待输出数的偏移地址
读入状态字
测试bit1位状态
Bit1=1?
取输入口地址
取输出口地址
输出一个字
N
Y
10
“与”指令应用例
LEA SI,DATA
MOV DX,3F8H
WATT:IN AL,DX
AND AL,02H
JZ WATT ;ZF=1转移
MOV DX,38FH
MOV AX,[SI]
OUT DX,AX
11
2.“或”运算指令
格式:
OR OPRD1,OPRD2
操作:
两操作数相“或”,结果送目标地址
12
“或”指令的应用
实现两操作数相“或”的运算
OR AX,[DI]
使某些位不变,某些位置“1”
OR CL,0FH
在不改变操作数的情况下使OF=CF=0
OR AX,AX
13
“或”指令的应用例
为了保证数据通信的可靠性,往往需要对传送的ASCII码数据进行校验。校验的方法之一就是使用奇偶校验,偶校验是使用传送的ASCII码中1的个数为偶数,奇校验则使1的个数为奇数。奇偶校验位放在ASCII码的最高位上。
14
“或”指令的应用例
OR AL,AL
JPE GOON
OR AL,80H
GOON:….
PF=1转移
15
“或”指令的应用
将一个二进制数9变为字符‘9’
如何实现?
16
3.“非”运算指令
格式:
NOT OPRD
操作:
操作数按位取反再送回原地址
注:
指令中的操作数不能是立即数
指令的执行对标志位无影响
例:NOT BYTE PTR[BX]
17
4.“异或”运算指令
格式:
XOR OPRD1,OPRD2
操作:
两操作数相“异或”,结果送目标地址
例:
XOR BL,80H
XOR AX,AX
两操作数自身相异或,结果为零
18
5.“测试”指令
格式:
TEST OPRD1,OPRD2
操作:
执行“与”运算,但运算的结果不送回目标地址。
应用:
常用于测试某些位的状态
19
例:
从地址为3F8H的端口中读入一个字节数,当该数的bit1, bit3, bit5位同时为1时,可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。
编写相应的程序段。
20
源程序代码:
LEA SI,DATA
MOV DX,3F8H
WATT:IN AL,DX
MOV DX,38FH
MOV AX,[SI]
OUT DX,AX
AND AL,2AH
CMP AL,2AH
JNZ WATT
TEST AL,02H
JZ WATT ;ZF=1转移
TEST AL,08H
JZ WATT
TEST AL,20H
JZ WATT
AND AL,2AH
XOR AL,2AH
JNZ WATT
21
二、移位指令
非循环移位指令
循环移位指令
注:
移动一位时由指令直接给出;
移动两位及以上,则移位次数由CL指定。
22
1. 非循环移位指令
逻辑左移
算术左移
逻辑右移
算术右移
23