逻辑运算转移
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目的操作数类型决定操作类型 SAL BL,CL 字节操作 ROL BX,CL 字操作
17
用SAR指令与用IDIV指令做除法的区别
用SAR指令做除法(对负数向下舍入): MOV AX , 81H SAR AX , 1 ; (AX) = -127 ; (AX)= - 64
用IDIV指令做除法(IDIV指令对负数向上舍入) : MOV AX , 81H MOV CL , 2 IDIV CL ;(AX)= -127 ;(AL)= -63 ,(AH)= -1
CF
RCL oprd,
RCR oprd,
14
CF
ROL ROR
CF
CF
RCL RCR
CF
移位规则 ▲ 左移: 高位 ←
低位
右移: 高位 → 低位 ▲ 移出位进入CF标志 ▲ 对循环移位指令,改变各位的位置,信息不丢失
▲ 带进位循环移位,CF标志参加循环移位
15
例
若(AL)= 96H, CF=0
8
例
21H端口管理中断系统,管理8个外设的中断 7 6 5 4 3 2 1 0 1 0 1 0 0 0 1 0 D7 D6 D5 D4 D3 D2 D1 D0 允许键盘中断: IN AL,21H AND AL,1111 1101B OUT 21H ,AL 为0, 允许键盘中断 为1, 禁止 ;读入21端口内容 ;置D1 = 0,其他位不变 ;送出屏蔽字到21H端口
SHL
CF
SAL
0 0 SHR CF CF
CF
0
▲ 移出位进入CF标志 ▲ 对移位指令,移出CF标志后丢失 ▲ 逻辑左移、算术左移的结果相同 ▲ 逻辑右移,新移入的信息以0填入
SAR
算术右移,保持最高有效位原来的值(符号为不变)
12
例
若(AL)=96H, CF=0 执行 SHL AL, 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0
指令1 指令2
改变CS和IP寄存器的值, 就改变了程序执行的流程。
CS:IP
指令3
BB 00 01 B1 20 90
指令n 指令n+1 指令n+3
… … … … … …
21
8086/8088 中CS和IP的变化规则:
0000:000h
内存 … … … … … …
1、 RESET复位后, ( CS ) = FFFFH,( IP ) = 0 故8088从内存FFFF:0000H处取第一条指令执行。
地址总线AB 地 数据总线DB 址 译
、、、
指令1 指令2 指令3 指令4 、、、 数据1 数据2 数据3 、、、
数据暂存器
运 算 器
指 令 队 列
指令译码器
总线 接口 控制 电路
控制总线CB
码 器
PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
20
CS和IP两寄存器的内容决定了程序的流程 CS:IP
禁止键盘中断: IN AL,21H OR AL,0000 0010B OUT 21H,AL
;使D1为1
9
例
379H端口的D7存放打印机的状态
7 6 5 4 3 2 1 0 1 0 1 0 0 0 1 0 D7 D6 D5 D4 D3 D2 D1 D0 为0, 表示打印机忙 为1, 打印机空闲
用查询方式控制打印机工作: MOV DX, 379H ask: IN AL, DX TEST AL, 1000 0000B JZ ask print: 、、、
第三节 8086/8088的指令系统(续)
四. 逻辑运算指令 五. 控制转移指令
1
四. 逻辑运算指令
逻辑指令指令分类
逻辑运算 移 位 循环移位
AND、OR、XOR、NOT、TEST SHL、SAL、SHR、SAR ROL、ROR、RCL、RCR
2
逻辑运算 :与、或、非、异或 特点:二进制数运算 ,按位进行 `与`运算:有0则0,全1则1
BB 00 01 B1 20 90
23
3、 控制转移指令以CS和IP为主要操作对象, 改变CS和IP的值,使程序产生分支、调用结构。 分支结构、调用结构: 顺序存放,非顺序执行 CMP AX, BX JGE great XCHG AX, BX great: MOV [max], AX 、、、 控制转移指令JGE可以改变IP的值, 使程序非顺序执行
;从379H端口读状态 ;检测D7位
;为0,打印机忙,继续查询
;输出字符打印
10
2. 移位指令
指令格式 SHL oprd, SAL oprd, SHR oprd, 1 CL 1 CL 1 CL 1 CL
执行操作 CF
CF 0 0 0
CF CF
SAR oprd,
11
移位规则 ▲ 左移: 高位 ← 右移: 高位 → 低位 低位
A B A∧B
0 0 1 1 0 1 0 1 0 0 0 1
例:
1101 1100 ∧ 1011 1010 1001 1000
`或`运算:有1则1,全0则0
A B A∨B
0 0 1 1 0 1 0 1 0 1 1 1
例:
1010 1100 1011 1101
3
∨ 0011 1001
`非`运算: 0则1,1则0
24
CS:IP 指令1 指令2 指令3 指令4
39 D8 7D 02 87 C3 A3 00 20
控制转移指令分类
指令类型
无条件转移 JMP
助记符
JE/JZ, JNE/JNZ, JS, JNS, JO, JNO JP, JNP, JC, JNC, JCXZ JA/JNBE, JAE/JNB, JB/JNAE, JBE/JNA JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ CALL, RET INT, INTO, IRET
(BX)=4F08H (AX)=4F08H (AX)=0008H (30FFEH)=0008H (BX)=F084H (AX)=F084H (AX)=0004H (30FFCH)=0004H (BX)=084FH (AX)=084FH (AX)=000FH (30FF8H)=000FH (BX)=84F0H (AX)=84F0H (AX)=0000H (30FF4H)=0000H
19
(CH)=3
NE : ROL BX,CL
MOV AX,BX AND AX,000FH PUSH AX DEC CH JNZ,NE …
(CH)=2
(CH)=1
五. 控制转移指令 在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
条件转移 循环控制 过程调用 中断指令
掌握:JMP, JZ,
JNZ,
JC,
LOOP
25
CALL, RET,
INT N, IRET
控制转移指令(JMP、Jcc、LOOPxx、CALL)概述 指令格式: 助记符 操作数
助记符
操作数 例
JMP、Jcc、LOOPxx、CALL
给出要转移到的目的地址 JMP JZ exit zero
18
(3)每四位一组存入堆栈(字操作) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (BX)=84F0H 1 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0 (SS)=3000H (SP)=1000H
(CH)=4
MOV CH,4 MOV CL,4
ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX
A A
0 1 1 0
例: 1011 1010 0100 0101
`异或`运算:异则1,同则0
A 0 0 1 1 B 0 1 0 1 A∨ B 0 1 1 0
例:
1010 1100 1001 0101
∨ 0011 1001
4
1. 逻辑运算指令
指令格式 AND dst,src OR dst,src
执行操作 (dst) ← (dst)∧(src) (dst) ← (dst)∨(src) (oprd)← (oprd) (dst) ← (dst)∨(src) (oprd1)∧(oprd2)
SF、ZF、PF据结果置位
TEST只影响标志位,不影响操作数。
6
例
数字字符的ASCII → 对应的二进制数
ASCII 数字 0~9
0011 1001B 0000 1111 B 0000 1001B MOV AH, 1
30H~39H
39 H 0F H 09 H ;利用DOS调用
∧ 应用:
INT 21H
目的地址在reg、mem中, 取来指令后间接得到目的地址 JMP AX JMP WORD PTR [ BX ]
27
◢ 符号地址 : 在汇编格式指令中用符号来表示地址 可以是标号、过程名(子程名) 标号 指示指令所在的地址。 用 符号名: 表示。
例
CMP JGE XCHG great: MOV
AX, BX great AX, BX [max], AX
NOT oprd XOR dst,src TEST oprd1,oprd2
wk.baidu.com
5
AND OR NOT XOR TEST
AL , 0000 1111B BX , 00FFH CL DL, AL AL, 0000 0001B
除NOT指令单操作数外,其它均为双操作数 可进行字节或字操作 NOT指令不影响标志 其他指令 置CF、OF为0,AF不定 ( 无意义 )
第一条指令在内存的ROM区。 … … … … … … …
22
FFFF:0000h
2、非控制转移指令,指令本身对CS和IP均无操作, 形成顺序执行结构。 顺序执行结构: 顺序存放,顺序执行 程序是指令的集合 CS:IP 指令1 指令在内存中顺序存放 对非控制转移指令, 指令2 CPU取来一条指令后, 自动将IP的值加上该指令的字节数, 指令3 使IP顺序指向下一条指令, CPU取来紧连着的指令执行。 (此时IP的变化由CPU内部的硬件自动完成)
执行前:
右移1位
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
: :
再右移1位
CF=1 , (AL)=25H
16
注意事项:
SHL AL, 1 SHR AL, CL ROL BX, 1 RCR AL, CL
oprd可以是reg/mem 可进行字节或字操作
源操作数为移位的次数 为1可在指令中直接给出 当移位次数 大于1时,移位次数需由CL给出 RCR AX,5 SHL BL, AL
AND AL, 0000 1111B 、、、
;从键盘输入字符到AL中
;高4位为0,低4位不变
7
逻辑运算常用于使操作数的某位为0或1, 或测试某位为0还是1。 使某位为1
用该位与1 相或,不变的位与0或。
使某位为0 用该位与0 相与,不变的位与1与。 使某位求反 用该位与1 异或,不变的位与0异或。 测试某位的值 用TEST指令,据标志判断
执行 ROL AL, 1
执行前: 1 0 0 0 1 1 0 0 1 1 1 1 0 0 1
CF=0 , (AL)=96h CF=1, (AL)=2Dh
执行后: 0 例
若(AL)= 96H, CF=0, (CL)=2 执行 RCR AL, CL 1 0 1 1 0 1 1 0 1 CF=0 , (AL)=96H CF=0 , (AL)=4BH
执行前:(AL)=96H ,CF=0 执行后:(AL)=2CH ,CF=1
例 若(AL)=96H, CF=0, (CL) =2 执行 SAR AL, CL
执行前:(AL)=96H ,CF=0 执行后:(AL)=E5H ,CF=1
1
1
0
1
0
1
1
0
0
0
1
1
1
0
0
1 CF
13
3. 循环移位指令 指令格式 ROL oprd, ROR oprd, 1 CL 1 CL 1 CL 1 CL CF CF CF 执行操作
LOOP
CALL
next
display
26
操作数(目的地址)的三种表示方法:
①符号地址 (标号或过程名) 目的地址在指令中, 取来指令后直接得到目的地址 例 CMP AX, BX JGE great XCHG AX, BX MOV [max], AX
great: ②寄存器reg ③存储器mem 例