- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PUSH AX PUSH BX POP AX POP BX
2014-6-8 qingyang@ 26
3. 交换指令
XCHG reg, reg XCHG reg, mem XCHG mem, reg 例 (BX)=1234H,(DS)=2000H, (21234H)=5678H, XCHG BX, [BX] 执行后, (BX)= , (21234H)= 。
18
3.2.1 数据传送指令
所有通用传送指令都不影响标志位。
1. MOV 指令
– – – – – MOV MOV MOV MOV MOV reg, data; mem, data reg, reg reg, mem mem,reg reg: CS,IP,DS,ES,SS除外
}
目的reg: CS,IP除外
2014-6-8
qingyang@
28
4. 输入输出指令(参见第八章)
1)直接输入输出指令 IN AL, PORT ; IN AX, PORT; OUT PORT,AL; OUT PORT,AX; AL ← (PORT) AX ← (PORT+1,PORT) (PORT) →AL (PORT+1,PORT) → AX
2014-6-8
qingyang@
24
采用基址变址寻址方式
MOV SI, 2040H
MOV DI, 2060H MOV BX, 0 MOV CX, 0AH LOOP1: MOV AL, [BX][SI] MOV [BX][DI],AL INC BX DEC CX JNZ LOOP1 HLT
2014-6-8 qingyang@ 25
2. PUSH 和 POP 指令 PUSH reg POP reg PUSH mem POP mem
例, 已知(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H, (BX)=0F79H。试画出堆栈区和SP的内容变化过程示意图 (标出存储单元的物理地址);执行下列指令序列后, AX和BX的内容是什么?
SS
SS
(BP)+(SI)+DISP
(BP)+(DI)+DISP
(DS) ×10H+ (BP)+(SI)+DISP
(SS) ×10H+ (BP)+(DI)+DISP
2014-6-8
qingyang@
15
例:下述各条指令都是错误的
• MOV AX, [CX]
• MOV AX, [BX][BP] • MOV AX, [SI][DI] • MOV AX, 112200H[BX]
2014-6-8
qingyang@
16
5.操作数的类型必须一致 例如,
MOV AX , BX MOV AX, BL
; 正确。指令执行后,AX←(BX),但BX不变 ; 错误。源和目的的位数不相同
MOV AL, 256
MOV AX, -32769
; 错误。 256=100H,超过了AL能存放的数的
第3章 8086指令系统
指令:CPU能够直接完成的基本操作。例 如,加法,减法等。
指令系统:所有指令的集合。CPU性能的 重要指标之一。
2014-6-8
qingyang@
1
• 3.1 寻址方式 指令通常应提供的信息:
(1) 做什么操作 (2) 操作数从哪里来 (3) 操作结果放在哪里 (4) 对于调用和转移指令,还要涉及转移或调用 地址的提供方式
2014-6-8
• 寻址方式总结
1. 三种类型的操作数:立即数(data),寄存器 操作数(reg),存储器操作数(mem)。
双操作数指令的常见格式(以数据传送指令为例) – MOV reg, data – MOV mem, data – MOV reg, reg – MOV reg, mem – MOV mem,reg
2014-6-8
qingyang@
5
• 现代微型计算机中多采用二地址指令,两个操作 数分别称为“源操作数”和“目的操作数”,指 令执行后,把运算结果放到目的操作数的地址之 中。 • 指令的操作码在机器中的表示比较简单,只要对 每一种操作指定相应的二进制代码即可;而指令 的操作数字段的情形就比较复杂。
操作数字段可以有一个,二个或三个操作数,通常称 为“一地址”,“二地址”或“三地址”指令
操作码
操作数
。。。
操作数
2014-6-8
qingyang@
4
例如:
单操作数指令 (INC AX) 只需要指出加1的操作数,它是“一地址”指令。 双操作数指令 (ADD AX, BX) 大多数运算型指令都是双操作数指令,对这种指令,有的 机器(大中型)使用“三地址”指令:除给出参加运算的 两个操作数外,还要指出运算结果的存放地址。
(DS) ×10H+ (SI)+DISP (DS) ×10H+ (DI)+DISP (DS) ×10H+ (BX)+DISP (SS) ×10H+ (BP)+DISP
DISP: 位移量,8位或16位
2014-6-8 qingyang@ 14
4. 基址变址寻址 (MOV AX, [BX][SI]) 基址变址相对寻址(MOV AX, 1100H[BX][SI])
2014-6-8
qingyang@地址的方式称为 寻址方式。 (规定如何对地址字段作出解释以找到操作数) • 程序转移时需提供转移地址,这跟提供操作数地 址在方法上没有本质区别,因此也归入寻址方式 的范畴。 寻址方式可分为二类: 与操作数有关的 与转移有关的
2014-6-8
qingyang@
12
2. 段前缀 寻址方式隐含地规定了存储器操作数的段地址。 例如,
[BX], [SI], [DI],[1200H]… .对应段寄存器为 DS [BP] ……..……………… 对应段寄存器为 SS
允许数据存放在其它的段(代码段除外)。此时应 在指令中给出 “段前缀”。 例如,MOV AX , ES : [3000H]
2014-6-8
qingyang@
20
用寄存器间接寻址方式实现
MOV SI , 2035H
MOV DI, 2045H MOV AH, [SI] MOV AL, [DI] MOV DS:[SI] ,AL
MOV DS:[DI] ,AH
HLT
2014-6-8
qingyang@
寻址方式
DISP[BX][SI] DISP[BX][DI]
段寄存器 DS DS
有效地址
(BX)+(SI)+DISP (BX)+(DI)+DISP
物理地址
(DS) ×10H+ (BX)+(SI)+DISP (DS) ×10H+ (BX)+(DI)+DISP
DISP[BP][SI]
DISP[BP][DI]
2014-6-8
qingyang@
19
例1 用MOV指令实现两内存字节单元内容的交换 用直接寻址方式实现
(DS):2035H
MOV BL, DS:[2035H] MOV CL, DS:[2045H] ;
(DS):2045H
MOV DS:[2045H], BL ; MOV DS:[2035H],CL ; HLT
2014-6-8 qingyang@ 8
• 8088/8086与操作数有关的寻址方式
立即寻址方式 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 基址变址相对寻址方式
2014-6-8 qingyang@ 9
举例
• 已知,(DS)=2000H, (BX)=0100H, (SI)=0002H, (20100H)=12H, (20101H)=34H, (20102H)=56H, (20103H)=78H, (21200H)=2AH, (21201H)=4CH,(21202H)=B7H, (21203H)=65H, 试说明下列各条指令执行完后AX寄存器的内容。
范围
; 错误。 -32769超过了AX能存放的带符号数
(补码)范围
2014-6-8
qingyang@
17
3.2 8086指令系统 六大类:数据传送指令,
算术运算指令, 逻辑运算和移位指令, 控制转移指令, 串操作指令, 处理器控制指令
2014-6-8
qingyang@
• • • • • • • 1)MOV 2) MOV 3) MOV 4) MOV 5) MOV 6) MOV 7) MOV AX, 1200 AX, BX AX, [1200H] AX, [BX] AX, 1100H[BX] AX, [BX][SI] AX, 1100H[BX][SI]
qingyang@ 10
21
例2 数据块传送:把2040H地址开始的10个字节数 据移到2060地址开始的10个字节单元处。
(DS):2040H
10个字节
(DS):2060H 10个字节
2014-6-8
qingyang@
22
地址指针的修改采用增量方式 (寄存器间接寻址)
MOV SI, 2040H MOV DI, 2060H MOV CX, 0AH LOOP1: MOV BL, [SI] MOV [DI],BL INC SI ; INC DI DEC CX JNZ LOOP1 HLT
2014-6-8 qingyang@ 23
地址指针的修改采用减量方式 (寄存器相对寻址方式) MOV SI, 2040H ; MOV DI, 2060H ; MOV CX, 0AH; LOOP1: MOV BL, [SI+09H] ; MOV 09H[DI],BL ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1; HLT