当前位置:文档之家› 8086指令格式和寻址方式

8086指令格式和寻址方式


第4章 80x86指令系统
第4章 80x86指令系统
4.1 8086/8088指令系统 4.1.1 8086/8088指令格式 4.1.2 8086/8088指令系统的寻址方式 4.1.3 8086/8088指令系统
第4章 80x86指令系统
汇编语言程序设计过程:
第一步,利用记事本输入汇编源程序,然后将扩展名 改为ASM。如文件名为33.asm。
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内 容。
对于某条具体指令,这三个地址分量可有不同的组合。如果 存在两个或两个以上的分量,那么就需要进行加法运算,求出操 作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种 地址分量有不同的组合,才使得对存储器操作数的寻址产生了若 干种不同的方式。
第4章 80x86指令系统
1)固定寻址方式 有些单字节指令,规定CPU对某个固定的寄存器进
行。
例如:十进制加法的调整指令AAA,规定被调整的 数总位于AL中。 该指令用来调整AL中的结果,指令编码为:
OP 0011 0111
37H
第4章 80x86指令系统
2)立即数寻址方式 操作数就在指令中,当执行指令时,CPU直接从指 令队列中取得立即数,而不必执行总线周期。立即数 可以是8位的或16位的;只能是整数类型的源操作数; 主要用来给寄存器赋初值;指令执行速度快。 例如:MOV AL, 80H MOV AX, 1234H
第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
(DS)*10H=20000H + 1064H 21064H
操作码
64 10
代Байду номын сангаас码 段
100010DW mod 100010 0 0 1000 1000 01 reg 001 0100 1001 r/m 001 disp8 11111010 1111 1010 =88H、49H、FAH
第4章 80x86指令系统
例: 写出下面指令的机器语言编码。 ADD AX,[BX+DI-0826]
存储器
AL
80H
存储器 操作码字节 指 令 码
AH 12
AL 34
操作码字节
34H 34
80H
12H 12
指 令 码
第4章 80x86指令系统
3)寄存器寻址方式 操作数在CPU的寄存器中,指令中给出寄存器名。 源操作数和目的操作数均可采用寄存器寻址的方式。 寻址的指令长度短;操作数就在CPU内部进行,不需 要使用总线周期;指令执行速度快。 例如:MOV AX, CX
AL
45
20000H
… 21064H 45
数 据 段
第4章 80x86指令系统
如果没有特殊指明,直接寻址方式的操作数一般在存储器的 数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超 越,此时需要在指令中特别标明,方法是在有关操作数的前面写 上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令 中源操作数不在数据段而在附加数据段中,则指令应写为如下形 式: MOV AL,ES:[1064H] 在汇编语言指令中,可以用符号地址来表示位移量。例如: MOV AL,[value] 或MOV AL,value 此时value为存储单元的符号地址。
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量(Displacement):它是存放在指令中的一个8位或16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
第4章 80x86指令系统
② 寄存器间接寻址-基址寻址方式
设当前(DS)=3000H, (BP)=2000H, (BX)=1000H,(SS)=4000H MOV [BX], AL MOV AX, [BP]
第4章 80x86指令系统
由此可见,操作数可分为源操作数和目的操作
数。 源操作数:只能读取的操作数。 目的操作数:即可读取又可写入(存放操作结 果)的操作数。
操作数又可分为两大类:数据操作数和地址操 作数。
第4章 80x86指令系统
指令长度与字长的关系
指令的长度主要取决于指令操作码的长度、操作 数的长度和操作数的个数。通常指令字长位数越多, 所能表示的操作信息也就越多,指令功能就越丰富。 但位数多则指令所占的存储空间就多,读取指令的时 间就增加。 字长(一般是指CPU的机器字长)是指CUP一次能 够处理的二进制数位数,它都是字节长度(8位二进制 数)的1、2、4或8倍,也就是8、16、32或64位。因此, 指令字长也是字节的简单倍数,如一字节指令,二字 节指令、三字节指令……。
寄存器寻址 W=0 W=1 mod=11
AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI
D=1 D=0
目的操作数 源操作数
源操作数 目的操作数
双操作数指令中各字段定义
第4章 80x86指令系统
例:写出下面指令的机器语言编码。 MOV [BX+DI-6],CL
第4章 80x86指令系统
教学内容
本章重点介绍8086指令格式和寻址方式,包括操作数的 寻址方式和转移地址的寻址方式;然后介绍8086指令系统, 包括数据传送、算术运算、位操作、串操作、控制转移以及 处理器控制等六大类指令。具体内容如下: 1、8086/8088指令格式 2、8086/8088指令系统的寻址方式
3、8086/8088指令系统
第4章 80x86指令系统
学习要求
指令系统是程序员编写程序的基础,因此很好地掌握本 章内容是后续进一步学习汇编语言程序设计的关键。通过本 章学习,应该达到如下要求: 1、了解8086/8088指令格式。 2、熟练掌握8086/8088(包括后续CPU)的寻址方式。 3、掌握8086/8088指令系统中的各种指令的名称、功能及 对操作数寻址方式的约定。
存储器 AX
CX
89 C1
指令码 (包括操作数)
第4章 80x86指令系统
4)存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。 因此,要存取操作数就必须知道其存储器的单元地 址。在指令中可以直接给出或间接给出操作数的地 址,以达到存取操作数的目的。 指令中给出的地址只是操作数的有效地址 (EA),并且是放在方括号(“[ ]”)中。若要 从存储器中存取操作数还须得到实际的地址(物理 地址)。物理地址=段基址左移四位+有效地址
存储器地址 有效地址的计算公式 mod=00 mod=01 mod=10
BX+SI BX+SI+disp8 BX+ DI BX+ DI+disp8 BP+SI BP+SI+disp8 BP+DI BP+DI+disp8 SI+disp8 SI DI+disp8 DI 直接地址 BP+disp8 BX BX+disp8 BX+SI+disp16 BX+ DI+disp16 BP+SI+disp16 BP+DI+disp16 SI+disp16 DI+disp16 BP+disp16 BX+disp16
第4章 80x86指令系统
根据操作数的个数,指令格式可分为以下几种: 1. 无操作数 控制类指令,比如“HLT”暂停指令。 2. 单操作数 只给出一个操作数地址。该操作数可在寄存器或存储 器中,或指令中直接给出立即数。比如“INC CX” 3. 双操作数指令 指令中有两个操作数,其中一个为目的操作数,另一 个为源操作数。一个操作数在寄存器中,另一个在寄存器或 存储器中,或指令中直接给出立即数。不允许两个都在存储 器中。
计算机是通过执行指令来处理各种数据的, 因此,一条指令即要指出如何处理数据,同时 还应指出数据的来源、操作结果的去向。一般 来说指令是由两部分组成,即操作码和操作数。
操作码 操作数 用来描述该指令的操作对象
给出该指令应完成何种操作
在指令中操作码是不可缺少的,但操作数 可以没有,也可以有一个操作数或两个操作数。
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
寻找存储器操作数,必须经过总线控制逻辑电 路进行存取。当EU单元需要读/写位于存储器的操作 数时: ①根据寻址方式(指令中的B2字节),由EU计算 出操作数的偏移量,即有效地址EA; ②将EA送至BIU单元,同时请求BIU执行一个 总线周期; ③BIU将某个段寄存器的内容左移4位,在加上 EU送来的EA,形成20位的实际地址,即物理地址 PA; ④执行总线周期,读/写指令所需要的操作数。 计算EA的通式为:
第4章 80x86指令系统
8086/8088 指令(编码)格式
80X86CPU指令系统采用变字长的指令格式,不 可能用一个简单的规则来描述指令编码格式。通常 指令中包含操作码和操作数两部分。 操作码表示计算机执行什么操作,由一组二进 制代码表示。在汇编语言中用助记符代表。 操作数可能指明了参与操作的数的本身,或规 定了操作数的地址。如何寻找操作数,这就是指令 的寻址方式,也是由指令编码格式指出。
第二步,利用宏汇编程序MASM对汇编源程序33.asm 进行汇编,产生33.obj文件。
第三步,利用LINK对33.obj进行连接,产生33.exe文 件。
第4章 80x86指令系统
相关主题