南京工程学院教案【教学单元首页】
第 7~11 次课 授课学时 10 教案完成时间:11-3-2
章、节
第 3 章 8086/8088 的指令系统及汇编语言程序设计
主
要
内
容
3.1 8086/8088 的寻址方式和指令系统
3.2 汇编语言程序设计
目
的
与
要
求
1. 重点掌握 8086/8088 的寻址方式,掌握 8086/8088 指令的功能,能正确应用指令编写和阅读程
序段。
2. 了解汇编语言的基本语法和常用伪指令。掌握汇编语言程序格式(传统格式和简化格式)及
开发过程。
3. 重点掌握顺序、分支、循环三种基本结构的程序设计,掌握子程序设计与调用。
4. 掌握功能号为 1、2、9、10 的系统功能调用的应用。
重
点
与
难
点
1. 8086 操作数的寻址方式、输入输出寻址方式、转移指令和调用指令的寻址方式。
2. 8086 传送指令、加法指令、减法指令、乘法指令、除法指令、逻辑运算指令、移位指令、串
操作指令、调用/转移/循环控制、标志位设置指令的功能、格式及应用,各指令对标志位的
作用。
3. 汇编语言程序的开发过程及汇编语言程序设计。
教
学
方
法
与
手
段
采用板书与多媒体教学结合的方式进行课堂教学。
2
第 3 章 8086/8088 的指令系统及汇编语言程序设计
3.1 8086/8088 的寻址方式和指令系统
指令——指示计算机执行某种操作的命令。
指令系统——一台计算机中所有指令的集合。
指令的组成:
操作码 地址码操作码 地址码
汇编指令的形式:
[标号:] 操作码 [目的操作数地址][,源操作数地址][;注释]
✓ 标号:字母开头的字母数字组成的字符串,表示该指令在主存中的逻辑地址。
✓ 操作码指示操作特性与功能
汇编指令操作码用助记符(指令功能的英文缩写)表示,对应机器指令的一个二进制编码。
✓ 源操作数地址:通过该地址取得所需的操作数
✓ 目的操作数地址:指出指令的操作结果被存放的地方
✓ 操作数来源:寄存器组、内存、I/O 设备
目的和源操作数可有可无。如隐含操作数指令:DAA
可仅有目的操作数而无源操作数。如 INC AX .
寻址方式——形成操作数或指令地址的方式,称为寻址方式。
寻址方式分为两类:指令寻址方式、操作数寻址方式
指令寻址方式:顺序寻址方式、跳跃寻址方式
操作数的寻址方式:形成操作数的有效地址(EA)的方法。
1.8086/8088 的寻址方式
在 8086 中,操作数在主存中的有效地址是段的偏移地址,段地址在默认的或用段超越前缀指定
的段寄存器中。
立即数寻址方式
寄存器寻址方式
存储器寻址方式
✓ 直接寻址方式
✓ 寄存器间接寻址方式
✓ 寄存器相对寻址方式
✓ 基址变址寻址方式
✓ 相对基址变址寻址方式
1)立即数寻址方式
操作数作为指令的一部分存放在操作码之后的主存单元中,这种操作数被称为立即数。
立即数可以是 8 位数值(00H~FFH),也可以是 16 位数值(0000H~FFFFH)。
立即数寻址方式常用来给寄存器赋值。例:
MOV AL,05H ;AL←05H
MOV AX,0102H ;AX←0102H
2)寄存器寻址方式
操作数存放在 CPU 的内部寄存器中,可以是:
8 位寄存器——AH、AL、BH、BL、CH、CL、DH、DL
16 位寄存器——AX、BX、CX、DX、SI、DI、BP、SP
4 个段寄存器——CS、DS、SS、ES
3
例:MOV AX,1158H ;AX←1158H
MOV DS,AX ;DS←(AX)
3)直接寻址方式
有效地址在指令中直接给出。
例:MOV AX,[2000H] ;AX←DS:(2000H),指令代码:A10020
MOV AX,ES:(2000H);AX←ES:(2000H),指令代码:26A10020
4)寄存器间接寻址方式
操作数在存储器中,操作数的有效地址在寄存器 SI/DI/BX/BP 中。
EA=[BX]/[BP]/[SI]/[DI]
若在 SI、DI、BX 中,则操作数默认在数据段中。
例:MOV AX,[SI]
若在 BP 中,则操作数默认在堆栈段中。
例:MOV AX,[BP]
5)寄存器相对寻址方式
有效地址是寄存器内容与有符号 8 位或 16 位位移量之和,寄存器可以是 BX、BP 或 SI、DI。
EA=[BX]/[BP]/[SI]/[DI]+8/16 位位移量
段地址对应 BX/SI/DI 寄存器默认是 DS,对应 BP 寄存器默认是 SS;可用段超越前缀改变。
MOV AX,[DI+06H] ;AX←DS:(((DI)+06H)
MOV AX,[BP+06H] ;AX←SS:(((BP)+06H)
例:MOV AX,DATA DS:[ BP ]
(DS ) 2 0 0 0
(BP ) 5 0 0 0
+ DATA 1 0 0 0
2 6 0 0 0
AX = 2213H
...
操作码
00H
10H
...
13H
22H
...
代码段
数据段
...
操作码
00H
10H
...
13H
22H
...
代码段
数据段
6)基址变址寻址方式
有效地址由基址寄存器(BX 或 BP)的内容加上变址寄存器(SI 或 DI)的内容构成:
EA=[BX]/[BP]+[SI]/[DI]
由基地址决定使用那一个段寄存器:段地址对应 BX 基址寄存器默认是 DS,对应 BP 基址寄存器默
认是 SS,可用段超越前缀改变。
7)相对基址变址寻址方式
有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个 8 位或 16 位位移量之和:
EA=[BX]/[BP]+[SI]/[DI]+8/16 位位移量
段地址对应 BX 基址寄存器默认是 DS,对应 BP 基址寄存器默认是 SS;可用段超越前缀改变。
说明:①在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:
②同一寻址方式可以写成不同的形式:
MOV AX,[BX][SI] ;等同于 MOV AX,[BX+SI]
MOV AX,COUNT[SI] ;等同于 MOV AX,[SI+COUNT]
MOV AX,WNUM[BX][SI] ;等同于 MOV AX,WNUM[BX+SI]
;等同于 MOV AX,[BX+SI+WNUM]
4
2.8086/8088 的指令系统
1)传送指令
2)算术运算指令
3)逻辑运算和移位指令
4)串操作指令
5)调用/转移/循环控制/中断指令
6)标志操作和处理器控制指令
1)传送指令
通用传送指令、堆栈操作指令、交换指令、输入/输出指令、换码指令、地址传送指令和标志寄
存器传送指令。除标志寄存器传送指令外,均不影响标志位
(1)通用传送指令
MOV DST,SRC;(SRC)�DST;把一个字节或字的操作数从源地址传送至目的地址
DST
SRC
操作位数
mem/reg
imm
8/16
mem/reg/seg
reg
8/16
reg/seg
mem
8/16
mem/reg
seg
16
立即数传送
mov al,4
mov si,200h
mov byte ptr [si],0ah
mov word ptr [si+2],0bh
mov al,’1’
寄存器传送
mov ax,bx
mov ah,al
存储器与寄存器间传送
mov dx,[bp]
mov es,[si]
MOV DS:[BP],DL ;使用段跨越前缀
段寄存器传送
mov [si],ds
mov ax,es
mov ds,ax
注意:
①两个操作数的类型要一致
MOV AL,050AH;非法指令
寄存器参与的指令,操作数类型由寄存器的类型决定
存储器单元与立即数同时作为操作数时,必须显式指明操作数的类型:
byte ptr 指示字节类型
word ptr 指示字类型
5
②两个操作数不能都是 mem
不允许两个操作数都是存储单元(除串操作指令)。
mov ax,buffer1 ;ax←(buffer1)
mov buffer2,ax ;buffer2←(ax)
;这里 buffer1 和 buffer2 是两个字变量
;实际表示直接寻址方式
③段寄存器操作的限制
不允许立即数传送给段寄存器
MOV DS,100H;非法指令
不允许直接改变 CS 值
MOV CS,[SI] ;非法指令
不允许段寄存器之间的直接数据传送
MOV DS,ES ;非法指令
(2)堆栈操作指令
堆栈是一个“先进后出 FILO”的内存区域,位于堆栈段中;SS 段寄存器记录其段地址
堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器 SP 指定
栈顶是地址较小的一端(低端),栈底不变
堆栈的操作:进栈 PUSH 和出栈 POP。
PUSH 进栈指令先使堆栈指针 SP 减 2 然后把一个字操作数存入堆栈顶部
PUSH SRC;SP←(SP)-2,(SP)←(SRC)
push ax
push word ptr [2000h]
POP 出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针 SP 加 2
POP DST;DST←((SP)),SP←(SP)+2
SRC/DST
SEG
REG16
MEM16
注意:目标不能是 CS
pop dx
pop word ptr [2000h]