8086指令格式和寻址方式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7 2 1 0 7 6 5 4 3 2 1 0 disp (低) / disp(高) / Data(低) Data(高) Data (低) Data (高) OP D W mod reg r / m
操作码 第1字节 寻址方式与 位移量/ 寄存器号 立即数 第2字节 第3字节 位移量/ 立即数 第4字节 立即数 第5字节 立即数 第6字节
寄存器寻址 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指令系统
1)固定寻址方式 有些单字节指令,规定CPU对某个固定的寄存器进
行。
例如:十进制加法的调整指令AAA,规定被调整的 数总位于AL中。 该指令用来调整AL中的结果,指令编码为:
OP 0011 0111
37H
第4章 80x86指令系统
2)立即数寻址方式 操作数就在指令中,当执行指令时,CPU直接从指 令队列中取得立即数,而不必执行总线周期。立即数 可以是8位的或16位的;只能是整数类型的源操作数; 主要用来给寄存器赋初值;指令执行速度快。 例如:MOV AL, 80H MOV AX, 1234H
第4章 80x86指令系统
7 2 1 0 7 6 5 4 3 2 1 0 disp (低) / disp(高) / Data(低) Data(高) Data (低) Data (高) OP D W mod reg r / m
mod 寄存器寻址 reg W=0 W=1 r / m
000 001 010 011 100 101 110 111 AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI 000 001 010 011 100 101 110 111
存储器 AX
CX
89 C1
指令码 (包括操作数)
第4章 80x86指令系统
4)存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。 因此,要存取操作数就必须知道其存储器的单元地 址。在指令中可以直接给出或间接给出操作数的地 址,以达到存取操作数的目的。 指令中给出的地址只是操作数的有效地址 (EA),并且是放在方括号(“[ ]”)中。若要 从存储器中存取操作数还须得到实际的地址(物理 地址)。物理地址=段基址左移四位+有效地址
第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。
000000DW mod reg 000 r/m 001 Disp-L Disp-H
000000 1 1
0000 0011
10
00100110
0010 0110
00001000
0000 1000
1000 0001
Hale Waihona Puke Baidu03H
81H
26H
08H
第4章 80x86指令系统 4.1.2 8086/8088的寻址方式 所谓寻址方式就是寻找操作数存放地址(位置)的方法。 在8086/8088系统中操作数存放的位置用以下几种: ①固定寻址 ②操作数包含在指令字节中。即指令格式中操作数部分 就是操作数本身。这种操作数叫立即数操作数。 ③ 操作数存放在CPU的某个内部寄存器中。这种操作数 叫寄存器操作数。 ④ 操作数在内存的数据区中。这种操作数叫存储器操作 数。包括直接寻址、寄存器间接寻址、寄存器相对寻址;基址 变址寻址、基址变址相对寻址方式。 ⑤其它寻址方式:包括串操作指令寻址、I/O端口寻址、 转移类指令寻址。
第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指令系统中的各种指令的名称、功能及 对操作数寻址方式的约定。
存储器地址 有效地址的计算公式 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
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]
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
寻找存储器操作数,必须经过总线控制逻辑电 路进行存取。当EU单元需要读/写位于存储器的操作 数时: ①根据寻址方式(指令中的B2字节),由EU计算 出操作数的偏移量,即有效地址EA; ②将EA送至BIU单元,同时请求BIU执行一个 总线周期; ③BIU将某个段寄存器的内容左移4位,在加上 EU送来的EA,形成20位的实际地址,即物理地址 PA; ④执行总线周期,读/写指令所需要的操作数。 计算EA的通式为:
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量(Displacement):它是存放在指令中的一个8位或16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
第4章 80x86指令系统
一条指令中的信息按其含义分成若干个信息段, 每一信息段占一个字节或多个字节,且按一定的顺 序排列,这便于CPU解释执行。如8086/8088CPU的 指令系统,它采用1~6个指令字节的变字长,它包 括操作码(第一字节)、寻址方式(第二字节)和 操作数(第三到第六字节)三部分组成。指令格式 如下:
第二步,利用宏汇编程序MASM对汇编源程序33.asm 进行汇编,产生33.obj文件。
第三步,利用LINK对33.obj进行连接,产生33.exe文 件。
第4章 80x86指令系统
4.1 8086/8088指令系统
4.1.1 8086/8088指令格式
用汇编语言编写的汇编语言程序输入计算机后,必须由“汇
第4章 80x86指令系统
根据操作数的个数,指令格式可分为以下几种: 1. 无操作数 控制类指令,比如“HLT”暂停指令。 2. 单操作数 只给出一个操作数地址。该操作数可在寄存器或存储 器中,或指令中直接给出立即数。比如“INC CX” 3. 双操作数指令 指令中有两个操作数,其中一个为目的操作数,另一 个为源操作数。一个操作数在寄存器中,另一个在寄存器或 存储器中,或指令中直接给出立即数。不允许两个都在存储 器中。
第4章 80x86指令系统
8086/8088 指令(编码)格式
80X86CPU指令系统采用变字长的指令格式,不 可能用一个简单的规则来描述指令编码格式。通常 指令中包含操作码和操作数两部分。 操作码表示计算机执行什么操作,由一组二进 制代码表示。在汇编语言中用助记符代表。 操作数可能指明了参与操作的数的本身,或规 定了操作数的地址。如何寻找操作数,这就是指令 的寻址方式,也是由指令编码格式指出。
存储器
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为存储单元的符号地址。
编程序”将它翻译成由机器指令(指令码)组成的机器语言程序,
才能由计算机识别并执行。因此汇编语言程序需由汇编程序翻译
成可执行的机器语言程序,一般来说,这一过程不必由人来干预。
我们这里只介绍一下基本原理,以便在必要时也可以手工完成类
似的工作。
第4章 80x86指令系统
4.1.1 8086/8088指令格式
第4章 80x86指令系统
② 寄存器间接寻址-基址寻址方式
设当前(DS)=3000H, (BP)=2000H, (BX)=1000H,(SS)=4000H MOV [BX], AL MOV AX, [BP]
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内 容。
对于某条具体指令,这三个地址分量可有不同的组合。如果 存在两个或两个以上的分量,那么就需要进行加法运算,求出操 作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种 地址分量有不同的组合,才使得对存储器操作数的寻址产生了若 干种不同的方式。
第4章 80x86指令系统
由此可见,操作数可分为源操作数和目的操作
数。 源操作数:只能读取的操作数。 目的操作数:即可读取又可写入(存放操作结 果)的操作数。
操作数又可分为两大类:数据操作数和地址操 作数。
第4章 80x86指令系统
指令长度与字长的关系
指令的长度主要取决于指令操作码的长度、操作 数的长度和操作数的个数。通常指令字长位数越多, 所能表示的操作信息也就越多,指令功能就越丰富。 但位数多则指令所占的存储空间就多,读取指令的时 间就增加。 字长(一般是指CPU的机器字长)是指CUP一次能 够处理的二进制数位数,它都是字节长度(8位二进制 数)的1、2、4或8倍,也就是8、16、32或64位。因此, 指令字长也是字节的简单倍数,如一字节指令,二字 节指令、三字节指令……。
第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
(DS)*10H=20000H + 1064H 21064H
操作码
64 10
代 码 段
相关文档
最新文档