第三章 指令系统
② 出栈指令 POP OPRD 与PUSH过程相反。
3. 交换指令 XCHG OPRD1, OPRD2 ; B/W OPRD1, OPRD2可以是CPU内部REG,也可以是
内存单元,但不能同时为两个内存单元。
26
二、累加器专用传送指令
1. 输入/输出指令IN,OUT IN AL/AX, port IN AL/AX, DX OUT port, AL/AX OUT DX, AL/AX
33
二、减法指令(续)
5. 比较指令 CMP OPRD1, OPRD2; OPRD1-OPRD2 不送回相减的结果,只影响标志位。
♥ 当两数x,y为无符号数比较时,判断大小用CF标志: 若x-y,CF=0,x>y; 若x-y,CF=1,x<y。
♥ 若两数x,y为带符号数比较大小时,用OF与SF判断大小: 若x-y后,SF=1,OF=1,则x>y; SF=0,OF=0,则x>y; 即若SF OF=0,则x>y。 若x-y后,SF=1,OF=0或SF=0,OF=1,即:SFOF=1 则x<y。
3. PUSHF 将FR压入堆栈。
4. POPF 将堆栈顶内容弹出给FR。
PF
CF
30
第三节 算术运算指令
31
一、加法指令(ADD,ADC,INC)
1. 不带进位CF的加法指令 ADD OPRD1, OPRD2; OPRD1←OPRD1+OPRD2
2. 带进位的加法指令 ADC OPRD1, OPRD2; OPRD1←OPRD1+OPRD2+CF ADD与ADC影响标志位SZAPCO(六个) 例如58+79=D1 SZAPCO=101101B
若DS=1200H, 则操作数地址为12000H和12001H。
(允许段超越)
15
DS左移4位 : 12000H + 16位偏移量: 1200H
13200H
低地址 Memory
高地址 操作码
代
00H
码
12H
段
AX AH AL
13200H
78H
13201H
9AH
数 据 段
图3.5 直接寻址示意图
16
段
AX AH AL
17200H
78H
17201H
9AH
数 据 段
图3.6 变址寻址示意图
18
二、寻址方式(续)
6. 基址加变址寻址方式 通常把BX和BP作基址REG,SI与DI做变址REG,把这两
种寻址结合起来形成一种新的寻址方式。 即BX或BP加上SI或DI再加上8(or16)位偏移量,四个量
相加。 例如:MOV AX, [BX+SI+1030H]或MOV AX, 1030[BX][SI]
二、寻址方式(续)
5. 变址寻址
以指定的REG内容,加上指令中给定的8位(或16位)偏
移量(必须要一个段REG作基址),作为操作数之地址。
作为变址寻址的REG是SI、DI、BX、BP中任一个。
(三个内容相加→地址)
例如:MOV AX, [DI+60]
或MOV AX, 60[DI];
MOV BX, [SI+1000H] 或MOV BX, 1000H[SI]
2
第一节 指令格式与寻址 方式
3
有关的基本概念
微机工作过程中其内部信息有两类: 一类是控制信息(指令); 一类是被加工处理的信息(数据)。
• 指令:微机中的控制信息就是使计算机进行某种 操作的命令,这些命令就称为指令。
• 指令系统:一台计算机所能执行的全部指令的集 合称为指令系统。不同的计算机其指令系统是不 同的。
3. 寄存器间接寻址 操作数是在存储器中,而不在REG中,操作数地
址的16位偏移量是在REG中(即SI,DI,BP,BX 之一中)。分以下两种情况:
① 若以SI、DI、BX间址,操作数在现行数据段 区域中,操作数地址为DS左移4位加上SI、DI、 BX中之一的内容。 例如:DS=2000H,SIAH AL
低地址
Memory
高地址
操作码
代
34H
码
12H
段
图3.1 立即寻址示意图
8
二、寻址方式(续)
2. 寄存器寻址 操作数放在CPU内部的REG中,如AX,BX,CX, DX等。 例如:MOV CX, AX;CX←AX.
CX
AX
图3.2 寄存器寻址示意图
9
二、寻址方式(续)
例如:有两个I/O端口分别为:80H和120H, 如何读/写这两个端口?
读80H口: IN AL,80H; 写80H口:OUT 80H,AL 读120H口:MOV DX, 120H; IN AL, DX 写120H口: MOV DX, 120H; OUT DX, AL
27
二、累加器专用传送指令
第三章 指令系统
1
本章内容提要
本章主要介绍: • 微机系统的指令格式及其常用的寻址方式、指令
类型 • 8086指令系统
*数据传送类指令 *算术运算类指令 *逻辑运算指令 *字符串操作指令 *程序控制类指令 *CPU控制指令
• 介绍DEBUG调试工具(为练习指令) • X86高性能微处理器新增指令简介(不要求)
操作如下:SP←SP-1 (栈操作都是16位)
[SP] ←OPRDH
SP←SP-1
[SP] ←OPRDL
M
例如 SP=2000H,SS=1000H,AX=1234H
执行PUSH AX, 则堆栈内容与SP如下:
SP=1FFEH
SP→1FFE 34 1FFF 12
SP→2000 ××
25
一、通用数据传送类指令(续)
34
二、减法指令(续)
例如:AL=50H,BL=A0H,判断AL,BL谁大。
执行MOV AX, [BP] 操作数地址为14200H与14201H
约定:若以SI、DI、BX作间址,对应的段寄存器为DS, 若以BP作间址,对应的段寄存器为SS。 允许段超越,即在指令中可以指定其他段寄存器。
13
二、寻址方式(续)
SS左移4位 : 12000H
+
BP : 2200H
14200H
AX AH AL
+ 16位偏移量: 1030H
16530H
低地址 Memory
高地址
操作码
代
位移量L
30H
码
位移量H 10H
段
AX AH AL
16530H
78H
16531H
56H
数 据 段
图3.7 基址加变址寻址示意图
20
第二节 数据传送类指令
21
一、通用数据传送类指令
1. MOV OPRD1, OPRD2; OPRD1← OPRD2 其中OPRD1为目的操作数,可以是存储器操作
执行MOX AX, [SI]—(间址用[ ]) 则操作数地址为21500H与21501H。
10
二、寻址方式(续)
低地址 Memory
DS左移4位 : 20000H
+
SI : 1500H
21500H
高地址
操作码
代 码
段
AX AH AL
数
21500H
5AH
据
21501H
23H
段
图3.3 寄存器间接寻址示意图
若BX=2100H,SI=1400H,偏移量1030H, DS=1200H, 寻址过程如图3.7。
则操作数地址为12000+2100+1400+1030=16530H与16531H。 正常情况下:由基址REG决定哪个段REG作为地址基准
约定: BX→DS,BP→SS。(允许段超越)
19
DS左移4位 : 12000H SI: 1400H BX: 2100H
低地址 Memory
代
高地址
操作码
码 段
数 据 段
14200H
78H
堆 栈
14201H
9AH
段
图3.4 以BP间接寻址示意图
14
二、寻址方式(续)
4. 直接寻址 操作数地址的16位偏移量直接在指令中(存放于
码区),而操作数是在数据区中。(操作数地址为DS 左移4位加上该16位偏移量) 例如:MOV AX, [1200H];1200H为16位地址偏移量
2. 表格查找指令(操作数是隐含的, 操作数地址为基址+索引值)
XLAT;BX为表格起点,AL为索引值; 从[BX+AL]中取一个字节送给AL。
表格地址
BX+0→ BX+1→ BX+2→
内容 XX YY ZZ
BX+AL→ DD
28
三、地址传送指令
1. LEA reg, src ; src代表地址偏移量(16位)
5
一、指令格式
指令一般由两部分组成:操作码与地址码
操作码规定操作的性质(即执行什 么样的操作)
Q
D
地址码提供操作数地址或操作数本身。
还有多地址指令
Q
D1
D2
D3
微机中操作数的来源有以下三处: 1. 操作数就含在指令中(码区中); 2. 操作数在CPU的REG中;
3. 操作数在内存的数据区中。
6
二、寻址方式
10022H 00
3.
LES reg, mem;(DW)
10023H
将上述指令的DS换为ES即可。
20
→DS
29
四、标志传送指令
1. LAHF(Load AH from Flags):将FR中的低8位送到AH中