8086,8088指令系统
第03-1章. 80868088微处理器及其系统

3.1.1、8086/8088CPU的内部结构
执行单元( Execute Unit ) 总线接口单元 ( Bus Interface Unit )
8088的内部结构
AH BH CH DH AL BL CL DL SP BP SI DI
16位
地址 加法 器
∑
20位
通用 寄存器
CS DS SS ES IP 内部暂存器
PA的书写方式:
段地址:段内偏移
如:1121H : 2200H=11210+2200=13410H
已知CS=1055H,DS=250AH,ES=2EF0H, SS=8FF0H,DS段有一操作数,其偏移地址=0204H, 1)画出各段在内存中的分布 2)指出各段首地址 10550H CS 3)该操作数的物理地址=?
2.地址加法器和段寄存器
BIU中的地址加法器用来实现逻辑地址到物理地址的变换 8086采用了 “段加偏移”的技术。
15 0 15 0
逻辑地址
段基值
3 0
偏移量
0000
各段寄存器分别来存放确定各段的 起始地址的16位段地址信息
寻址单元的16位偏移地址
Σ
19 0
物理地址
物理地址
左移4位后的段寄存器的内容同时 送到地址加法器进行相加
CH DH CL DL
地址 加法 器
∑
20位
CS DS SS ES IP 内部暂存器
16位
输入/输出 控制电路 外 部 总 线
1 2
8位
3 4
把EU的操作结果存储 标志寄存器 到指定的M或I/O口。
执行部件 (EU)
指令队列
总线接口部件 (BIU)
串操作指令.

8086/8088的指令系统
串处理指令
REP MOVS:将数据段中的整串数据传送到附加段中。
DS→
源串(数据段)→ 目的串(附加段) 执行 REP MOVS 之前,应先做好: 1) 源串首地址(末地址)→ SI 2) 目的串首地址(末地址)→ DI 3) 串长度 → CX
DS:SI→
~ ES→ ~
8086/8088的指令系统
串处理指令
(6) 串输出指令OUTS
功能:将由源串中的字、字节传送到在DX寄存器指定的 I/O端口中,并根据DF和数据类型来改变源变址寄存器的 方向内容。 指令格式: OUTSB ;字节串输出: ((DX))←DS:[SI] ;SI←SI±1 OUTSW ;字串串输出: ((DX))←DS:[SI] ;SI←SI±2
ES:DI→
~ ~
4) 建立方向标志
( CLD 使 DF=0,STD 使 DF=1 )
8086/8088的指令系统
串处理指令
DS→
【例】 MOV SI,0050H MOV DI,0100H MOV CX,5 CLD REP MOVSB
20000H ‘A ’ ‘B ’ ‘C ’ ‘D ’ ‘E ’ ~ ~
8086/8088的指令系统
串处理指令
(3) 串比较指令 CMPS (p69)
CMPS SRC, DST DS:SI→ 语句格式:CMPSB——字节串比较 CMPSW——字串比较 功 能:将SI所指的源串中的一个 字节(或字)存储单元中的数据与 DI ~ 所指的目的串中的一个字节(或字) ~ 存储单元中的数据相减,并根据相减 ES→ 的结果设置标志,但结果并不保存。 ES:DI→ 即:①([SI])-([DI])。 ② 修改串指针,使之指向串中的 下一个元素。 当DF=0时,(SI)和(DI)增量 。当DF=1时,(SI)和(DI)减量。
实验报告——找出80868088指令系统所有指令的操作码的编码

实验二找出8086/8088指令系统所有指令的操作码的编码一、实验目的本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。
二、试验原理:1、每条指令1~6个字节不等2、指令的第一字节为操作码,规定指令的操作类型。
第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。
3、第一个字节的八个二进制位中前六位为操作码的主要部分,之后一位是D字段,然后是W字段,W指出操作数类型:W=0 为字节,W=1 为字,D指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。
4、用DOS的输入/输出重定向功能,让debug自动执行一批命令。
三、试验内容和步骤1、用试探法(1)打开debug,输入如下内容:-e 100 00 00 00 00 00 00-u 100 1050B5D:0100 0000 ADD [BX+SI],AL0B5D:0102 0000 ADD [BX+SI],AL0B5D:0104 0000 ADD [BX+SI],AL可以得到如下结果:结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。
记下来:指令码汇编指令---------------------------------------------------------------------0B5D:0100 0000 ADD [BX+SI],AL(2)将指令首字节变为01,重复以上实验-e 100 01 00-u 100 1010B5D:0100 0100 ADD [BX+SI],AX得到以下结果:结论:第1字节由00(二进制0000 0000)变为01(二进制0000 0001),ADD指令的第二个操作数由AL变为了AX。
AL为8位寄存器、AX为16位寄存器,印证了W字段的作用,增加一条有用的记录:指令码汇编指令-------------------------------------------------------------------------0B5D:0100 0000 ADD [BX+SI],AL0B5D:0100 0100 ADD [BX+SI],AX(3)将指令首字节变为02,重复以上实验-e 100 02 00-u 100 1010B5D:0100 0200 ADD AL,[BX+SI]得到以下结果:结论:第1字节由00(二进制0000 0000)变为02(二进制0000 0010),ADD 操作的传送方向发生转变,印证了D字段的作用。
微型计算机指令系统

例:已知:(DS)=2100H,(DI)=2000H
指令: MOV AX,[DI] ;(AX)
物理地址=(DS) * 16 + (DI)
((DI))
=2100H * 16 + 2000H
=21000H + 2000H
=23000H
指令结果:将23000H单元内容送AL中,
将23001H单元内容送AH中。
3、1 8086/8088的寻址方式
本章主要介绍8086/8088的指令系统以及在指令中为 取得操作数地址所使用的寻址方式。
汇编指令:
操作码 操作数
操作码:指令操作类型; 操作数:指令所需操作数或操作数的地址;操作数可以 有一个,也可以有两个,一个源操作数,一个目的操作 数。 例: MOV AX,CX ;将CX的内容送入AX中。
5、相对基址变址寻址方式
操作数在存储器内,指令将基址寄存器(BX或BP)与 变址寄存器(SI或DI)的内容之和再加上位移量(8位 或16位),得到操作数所在单元的有效地址。
有效地址=
(BX)
(BP)
+
(SI)
DISP8
+
(DI)
DISP16
物理地址 = (DS)* 16 +(BX)产生的有效地址
物理地址 = (SS)* 16 +(BP)产生的有效地址
AA
AA 间接寻址 BB AX
0001
AH
AL
操作数在存储器中,指令中寄存器内容作为操作数所在 单元的有效地址。
(BX) 有效地址 =
(SI)
(DI)
段寄存器为DS 段寄存器为SS
(BP) 物理地址计算方法:
物理地址 = (DS)* 16 + (BX)或(SI)或(DI) 物理地址 = (SS)* 16 + (BP)
8086(8088)指令手册

ADC d,s
;d←d+s+CF
带进位加法。
指令的操作过程与ADD指令基本相同,惟一的不同是进位标志位CF的原状态也将一起参与加法运算,待运算结束,CF将重新根据结果置成新的状态。
IN AL,DX;AL←(端口(DX))
IN AX,DX;AX←(端口(DX))
注意:I/O指令只能用累加器作为执行I/O数据传送的机构,而不能用其他寄存器代替。另,当用直接I/O指令时,寻址范围仅为0~255,这适用于较小规模的微机系统;当需要寻址大于255的端口地址时,则必须用间接寻址的I/O指令。例如,在IBM PC/XT微机系统中,既用了0~255范围的端口地址,也用了255~65535范围的端口地址。
IMUL s
有符号乘法指令,它完成两个带符号的8/16位二进制相乘的功能。
对于两个带符号的数相乘,如果简单采用与无符号数乘法相同的操作过程,那么会产生完全错误的结果。为此,专门设置了IMUL指令。
IMUL指令除计算对象是带符号二进制数以外,其他都与MUL是一样的,但结果不同。
IMUL指令对OF和CF的影响是:若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。它仍然可用来判断相乘的结果中高一半是否含有有效数值。另外,IMUL指令对其他标志位没有定义。
表三、数据寄存器的隐含使用………………………………………………第19页
表四、标志寄存器……………………………………………………………第20页
8086/8088指令分类
8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。
第二章 80868088寻址方式和指令系统

(5)奇偶标志PF
用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清0。
(6)辅助进位标志AF
在字节操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字 节进位或借位,则辅助进位标志AF被置1,否则AF被清0。
②状态控制标志
(1)方向标志DF
方向标志决定着串操作指令执行时,有关指针寄存器调整方向。 当DF为1时,串操作指令按减方式改变有关的存储器指针值, 当DF为0时,串操作指令按加方式 改变有关的存储器指针值。
其中:存储单元的物理地址是12345H, 标出的:两个重叠段的段值分别是:1002H和1233H, 在对应段内的偏移分别是2325H和0015H。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针IP、堆栈指针SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可直接用16位数给 出。
图中指令存放在代码段中,OP表示该指令的操作码部分 再例如: MOV AL,5 则指令执行后,(AL)=05H
MOV BX,3064H 则指令执行后, (BX)=3064H
2、寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数数,寄存器可以是:
AX、BX、CX、DX、SI、DI、SP和BP等;
指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动 形成20位物理址。
3、段寄存器的引用
由于8086/8088CPU有四个段寄存器,可保存四个段值。所以可同时使用四个段值,但这四个 段有所分工。
在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令 的物理地址。
8086与8088的区别

这两种CPU的主要区别,归纳起来有以下几方面:1.外部数据总线位数的差别:8086CPU的外部数据总线有16位,在一个总线周期内可输入/输出一个字(16位数据),使系统处理数据和对中断响应的速度得以加快;而8088 CPU的外部数据总线为8位,在一个总线周期内只能输入/输出一个字节(8位数据)。
也正因为如此,8088被称为准16位处理器。
2.指令队列容量的差别:8086CPU的指令队列可容纳6个字节,且在每个总线周期中从存储器中取出2个字节的指令代码填入指令队列,这可提高取指操作和其它操作的并行率,从而提高系统工作速度;而8088CPU的指令队列只能容纳4个字节,且在每个总线周期中只能取一个字节的指令代码,从而增长了总线取指令的时间,在一定条件下可能影响取指令操作和其它操作的并行率。
3.引脚特性的差别:两种CPU的引脚功能是相同的,但有以下几点不同:(1) AD15~AD0的定义不同:在8086中都定义为地址/数据复用总线;而在8088中,由于只需用8条数据总线,因此,对应予8086的AD15~AD8这8条引脚,只作地址线使用。
(2)34号引脚的定义不同:在8086中定义为BHE信号;而在8088中定义为SS0,它与DT/R,IO/M一起用作最小方式下的周期状态信号。
(3)28号引脚的相位不同:在8086中为M/IO;而在8088中被倒相,改为IO/M,以便与8080/8085系统的总线结构兼容。
复用引脚8086:AD15~AD0,分时用作地址和数据总线;8088:AD7~AD0,分时用作地址和数据总线;8086/8088:A19~A16/S6~S3,分时用作地址和状态总线。
8086的最小/最大工作方式通过CPU的第33条引脚MN/ 来控制。
1.最小工作模式(MN/MX=1):把8086CPU的33引脚接+5V时,系统处于最小工作模式。
最小模式系统适用于单微处理器组成的小系统,系统中通常只有一个微处理器,所有的总线控制信号都直接由8086CPU产生,系统中的总线控制逻辑电路被减到最少。
第4章Intel 80868088指令系统

物理地址=30000H+1150H=31150H
执行后: (AX)=5678H。
第四章 Intel 8086/8088指令系统
5. 相对基址变址寻址
特点:操作数的有效地址是一个基址寄存器与一个变址寄 存器的内容之和再加上8位或16位位移量。同样,当基址寄存器 为BX时,用DS作为段寄存器; 而当基址寄存器为BP时,则用 SS作为段寄存器。因此物理地址为 (SI) 8位 位移量 物理地址=(DS)×16+ (BX)+ + (DI) 16位 (SI) 8位 位移量 + 物理地址=(SS)×16+ (BP)+ (DI) 16位
执行后: (AX)=1234H, (BX)不变。
第四章 Intel 8086/8088指令系统
4.1.4 存储器寻址
操作数在存储器中。存储器是分段管理的, 要找到操作数, 必须指明操作数所在的段(段基址由段寄存器指明)及段内偏 移地址(以有效地址EA的形成方式指出)。 1. 直接寻址方式 特点:指令中直接给出操作数在段内的偏移量,段基址隐 含给出或用段前缀指明。该寻址方式适用于处理单个变量。
4.1.1 8086/8088的通用指令格式 机器语言指令是由二进制代码组成的。一条指令是由操作 码与操作数字段构成的,其一般格式为 操作码字段 + 操作数字段 操作码字段指明计算机所要执行的操作(即功能);操作 数字段指出在指令执行过程中所需要的操作数。 例如: ADD AX, BX
第四章 Intel 8086/8088指令系统
变址寄存器内容之和。 (SI) 物理地址=(DS)×16+ (BX)+ (DI) (SI) 物理地址=(SS)×16+ (BP)+ (DI) 适用表格或数组处理,表格或数组首地址可存放在基址寄存器中。
8088[8086]指令格式(有用)
![8088[8086]指令格式(有用)](https://img.taocdn.com/s3/m/f23a07e99b89680203d825b4.png)
附录:8086/8088 指令码格式我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。
我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。
8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。
为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。
通常指令的第一字节为操作码,规定指令的操作类型。
第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。
可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。
操作码(第一字节)及寻址方式字节(MOD字段)格式如下。
图1 8086/8088操作码及寻址方式字段格式第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。
D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。
第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。
图2 8086/8088 不同字长的指令码格式REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。
由REG 字段选择寄存器的具体规定见表1。
表1 REG 字段编码表MOD 字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。
在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。
MOD 字段编码表见表2。
表2 MOD 字段编码表R/M 字段受MOD 字段将指出第二操作数所在寄存器编号。
第3章 8086(8088)CPU指令系统

20H 00H
00H 34H 12H
3000H:0000H
注: ◆基址因子BP访问默认为堆栈段 ◆不能同时取两个基址因子;也不 能同时去两个变址因子
16
+
3000H:3000H
AH
AL
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
●存储器寻址之相对基址加变址寻址(Base
9
第3章 8086/8088CPU指令系统
3.1.3 操作数寻址方式
4.1操作数寻址方式
所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操 作数的存放位臵,CPU在执行该指令时,按照指令格式中的表示找 到并对数据进行存取。 1.立即寻址(Immediate Addressing) 立即寻址中的操作数作为指令的一 部分存放在代码段中,在取指阶段数据 随指令一起被取到CPU,这种数据在指 令格式中的直接表现为常数。 如:MOV AL,34H
2
第3章 8086/8088CPU指令系统
汇编语言指令或符号指令:用字母和其它一些符 号组成的“助记符”与操作数等表示的指令称为汇编 语言指令或符号指令。 例如: MOV AX, BX ; AX←BX 而其二进制代码(机器代码)为89D8H,就是 1000 1001 1101 1000 B 不易理解,不易记忆。助记符是MOV。
操作码
操作数
4
第3章 8086/8088CPU指令系统
3.1.1 8086/8088指令格式
4.1操作数寻址方式
8086/8088机器指令格式通常1-6个字节组成。典型的指令格式 由2个字节组成,如下图所示。
操作码 D W MOD REG R/M
第4章 指令系统(二)

课程名称 授课时间 教学目标 教学重点 教学难点 教学时数 教学内容: 第 4 章 8086/8088 寻址方式及指令系统(二) 计算机组成原理(第二十八讲) 任课教师 地点 多媒体 授课班级 1. 掌握跨段知识 2. 掌握 8086/8088 指令系统 1. 跨段应用 2. 8086/8088 指令系统 1. 数据传送指令 2. 乘法指令 3. 控制转移指令 讲授法、演示法、实践操 教学手 2节 教学方法 作法 段 陈 平 人数
4
执行的操作:(POTR)<-- AL (字节操作) (PORT+1,PORT)<-- (AX) (字操作) 短格式为: OUT DX,AL (字节操作) OUT DX,AX (字操作) 执行的操作:((DX))<-- AL (字节操作) ((DX)+1,(DX))<-- (AX) (字操作) 在 IBM PC 机里,所有 I/O 端口与 CPU 之间的通信都由 IN 和 OUT 指令来完成。其中 IN 完 成从 I/O 到 CPU 的信息传送,而 OUT 完成从 CPU 到 I/O 的信息传送。CPU 只能用累加器(AL 或 AX)接收或发送信息。外部设备最多可有 65536 个 I/O 端口,端口号(即外设的端口地址)为 0000~FFFFH。其中前 256 个端口(0~FFH)可以直接在指令中指定,这就是长格式中的 PORT, 此时机器指令用二个字节表示,第二个字节就是端口号。所以用长格式时可以在指令中直接 指定端口号,但只限于外设的前 256 个端口。当端口号≥256 时,只能使用短格式,此时,必 须先把端口号放到 DX 寄存器中(端口号可以从 0000~FFFFH), 然后再用 IN 或 OUT 指令来传送 信息,必须注意。这里的端口号或 DX 的内容均为地址,而传送的是端口中的信息,而且在用 短格式时 DX 的内容就是端口号本身,不需要由任何段寄存器来修改它的值。 输入,输出指令不影响标志位。 (3)XLAT(Translate)换码指令 格式为: XLAT OPR 或 XLAT 执行的操作:(AL)<-- ((BX)+(AL)) 3.地址传送指令 (1)LEA(Load effective addres)有效地址送寄存器指令 格式为: LEA REG,SRC 执行的操作: (REG)<-- SRC 指令把源操作数的有效地址送到指定的寄存器中。 (2)LDS(Load DS with Pointer)指针送寄存器和 DS 指令 格式为: LDS REG,SRC 执行的操作:(REG)<-- (SRC) (DS)<-- (SRC+2) 把源操作数指定的 4 个相继字节送到由指令指定的寄存器及 DS 寄存器中。该指令常指定 SI 寄存器。 (3)LES(Load ES with Pointer)指针送寄存器和 ES 指令 格式为: LES REG,SRC 执行的操作:(REG)<--(SRC) (ES)<--(SRC+2) 把源操作数指定的 4 个相继字节送到由指令指定寄存器及 ES 寄存器中。 该指令常指定 DI 寄存器。 以上三条指令指定的寄存器不能使用段寄存器,且源操作数必须使用除立即数方式及寄 存器方式以外的其它寻址方式。这些指令不影响标志位。 本组指令把变量的偏移地址(LEA)或段地址和偏移地址(LDS 和 LES)送给寄存器,以提供 访问变量的工具。 例 4.3.7: LEA BX,[BX+SI+0F62H] 如指令执行前:(BX)=0400H,(SI)=003CH 则指令执行后:(BX)=0400+003C+0F,(SP))<-- (SRC) (3) POP(Pop from the stack)出栈指令 格式为: POP DST 执行操作:(DST)<-- ((SP) + 1,(SP)) (SP) <-- (SP) + 2 这两条堆栈的进栈和出栈指令。堆栈是以“后进先出”方式工作的一个存储区,它必须 存在于堆栈段中,因而此段地址存放于 SS 寄存器中。它只有一个出入口,所以只有一个堆栈 指针寄存器 SP,SP 的内容在任何时候都指向当前的栈顶,所以 PUSH 和 POP 指令都必须根据 当前 SP 的内容来确定进栈或是出栈的存储单元,而且必须及时修改指针,以保证(SP)指向当 前的栈顶。 堆栈的存取必须以字为单位,所以 PUSH 和 POP 指令只能作字操作。它们可以使用除立即 数以外的其他寻址方式。指令也可以指定段寄存器作为操作数,但 POP 指令不允许用 CS 寄存 器。这两条堆栈指令不影响标志位。 例 4.3.3: PUSH AX 堆栈在计算机工作中起着重要的作用,如果在程序中要用到某些寄存器,但它的内容却 在将来还有用,这时就可以用堆栈把它们保下来,然后到必要时再恢复其原来的内容。例如: PUSH AX PUSH BX „ 其间程序用到 AX 和 BX 寄存器 „ POP BX POP AX 堆栈在子程序结构的程序及中断程序中也很有用,这将在以后加以说明。 (4) XCHG(Exchange) 交换指令 格式为: XCHG OPR1,OPR2 执行操作:(OPR1)<--> (OPR2) 其中 OPR 表示操作数。该指令的两个操作数中必须有一个在寄存器中,因而它可以在寄 存器之间或者在寄存器和存储器之间交换信息,但不允许使用段寄存器。指令允许字或字节 操作,且不影响标志位。 2.累加器专用传送指令 这组指令只限于使用累加器 AX 或 AL 传送信息,不影响标志位。 (1) IN(Input)输入指令 长格式为: IN AL,PORT (字节操作) IN AX,PORT (字操作) 执行的操作:(AL)<-- (PORT) (字节操作) (AX)<-- (PORT+1,PORT) (字操作) 短格式为: IN AL,DX (字节操作) IN AX,DX (字操作) 执行的操作:(AL)<-- ((DX)) (字节操作) (AX)<-- ((DX)+1,(DX)) (字操作) (2)OUT(Output)输出指令 长格式为: OUT PORT,AL (字节操作) OUT PORT,AX (字操作)
第三章 8086 8088指令系统

SI 1200
+)
6000 0 1200 61200 AX 33 44
61200H 61201H
存储器 . . . 44H 33H 数 据 段
. . .
图 3-5 寄存器间接寻址示意图
3.2.5 寄存器相对寻址
寄存器相对寻址——操作数在存储器中。由指令指定的地址寄存器的内容加上指令中
给出的一个8位或16位的地址位移量,即可得操作数的偏移地址。
SI AX AX AX AX AX
3.2.8隐含寻址
隐含寻址—— 操作数隐含在操作码中,在有些指令的操作数中,不仅包含了操作的性质,
还隐含了部分操作数的地址。如乘法指令 MUL,在这条指令中只须指明乘数的地址,而被乘数 已经乘积的地址是隐含且固定的。这种将一个操作数隐含在指令码中的寻址方式就称为隐含
立即数操作数: 所谓立即数指具有固定数值的操作数,不因指令的执行而发生变化 。立即数操作 数只能用作源操作数,而不能用作目标操作数。
寄存器操作数:
8086CPU的8个通用寄存器和4个段寄存器可以作为指令中的寄存器操作数,寄存
器操作数在指令中既可以作为源操作数,也可以用作目标操作数。 存储器操作数: 参加运算的数据是存放在内存中。
两单元的内容送到AX中。假设DS=2000H,则所寻找的操作数的物理地址为: 2000H×10H+3102H = 23102H, 指令的执行情况如图3-3所示
存储器 . . .
MOV操作码
02H 31H AH AL 23102H 23103H
图 3-3 直接寻址方式
代 码 段
. . . ×× ×× . . . 数 据 段
请注意:使用基址—变址方式时,不允许将两个基址寄存器或两个变址寄存器组合
8086-8088 CPU的指令系统算术运算指令

微机原理
OP1 OP2
运算器
F
(a)
OP1 OP2
运算器
F
(b)
微机原理
⑵ ADC 带进位加法指令 指令格式:ADC DST,SRC 执行操作:(DST)←(SRC)+(DST)+CF 影响的标志位:OF、SF、ZF、AF、PF、CF ⑶ INC 加1指令 指令格式:INC OPR 执行操作:(OPR)←(OPR)+1。 影响的标志位:OF、SF、ZF、AF、PF。
⑵ IDIV 带符号数除法指令
指令格式:IDIV SRC 执行操作:与DIV相同,但操作数必须是带符号数,商 和余数也均为带符号数,用补码表示
⑶ CBW 字节转换为字指令 格式:CBW 执行操作:将AL的符号位扩展到整个AH 若AL的符号位为0,则AH←00H 若AL的符号位为1,则AH←0FFH 对标志位的影响:不影响标志位
微机原理
3.乘法指令 ⑴ MUL 无符号数乘法指令 指令格式:MUL SRC 执行操作: 字节操作数 AX←AL×(SRC)。 字操作数 DX,AX←AX×(SRC)。 对标志位的影响:OF、CF ⑵ IMUL 有符号数乘法指令 指令格式:IMUL SRC 执行操作:字节操作数AX←AL×(SRC)
微机原理
5.十进制调整指令 ⑴压缩的BCD码调整指令 ① DAA 加法的十进制调整指令 指令格式:DAA 执行操作:AL←加法结果AL的内容调整到压 缩的BCD码格式 标志位的影响:SF、ZF、AF、PF、CF
例:MOV AL, 28H MOV BL, 68H ADD AL, BL DAA
微机原理
MOV AL,08H
AAD
AL= 44H
AH=0
微型计算机基本原理与接口技术
微机原理 第三章1

(2)立即(数)寻址
② MOV AX,1234H
说明:这条指令的功能就是将立即数 1234H传送到寄存器AX中。 执行完该条指令后, AX=1234H
(3)寄存器寻址(Segment Addressing)
当操作数在寄存器中时为寄存器寻址(或称寄 存器直接寻址)。如: ① MOV AL,12H 说明:目的操作数AL即为寄存器寻址。
DS(BX的默认段)值
0000
Memory
ES值
SS(BP的默认段)值
CS值
BP: +)位移量:
0000 0000 0000
…… ××
0100 0000 0000 0000 0000 0000 0000 0010
20 位 物 理 地 址
MOV [SI]10 ,AH ( 设SI原值为008CH)
Bit 19 4 3 0
1、通用数据传送指令
(1)MOV指令 (2)PUSH和POP指令 (3)交换指令XCHG (4)换码指令XLAT
(1)MOV指令
是基本传送类指令,实现字或字节数据的 复制。
指令格式:MOV dst,src
指令功能:将源操作数src,传送到目的操作 数dst中。 如:MOV AL,12H
功能:执行指令就是将立即数12H传送到 AL中,执行完指令后AL=12H。
(6)寄存器相对寻址方式 使用基址寄存器(BX或BP)、并带位移 量的间接寻址。操作数EA=BX或BP值+位 移量。 例:MOV DL,[BP+2] 其它等效写法: MOV DL,[BP] 2 MOV DL,2 [BP]
MOV DL,[BP+2] ( 设BP原值为4000H)
Bit 19 4 3 0
汇编语言 用指令助记符表示机器码,例如对应于机器码 B8H、C3H的助记符为MOV AX,BX 。 CPU不同,机器码不同,助记符也不同。
第3章80888086指令系统(老师用的课件哦)

第3章 8088/8086指令系统
图3.5 变址寻址示意图
第3章 8088/8086指令系统
例:MOV AX,200AH[SI];或(AX)←
[(DS)*16+(SI)+200AH
EA=(SI)
+200AH,SI为变址寄存器,200AH为16位的位移量。
图3.6为用BP寄存器进行变址寻址时的示意图。
第3章 8088/8086指令系统
3.存储器操作数 存储器操作数是把操作数放在存储器单元中。对这 类操作数,在指令中必须给出存储器的地址。存储器 的实际地址(也称物理地址)是由指定的段基址和段内地 址偏移量(也称为有效地址EA)所决定的。由于段基址 相对很少改变,故一般预先予以指定,以后通过隐含 方法使用,即只要段基址未改变,其在汇编指令中便 不再出现。此时,只给出有效地址EA(以各种寻址方式 给出)。
第3章 8088/8086指令系统
3.2 8088/8086指令系统
3.2.1 数据传送指令 1 .数据传送指令MOV 指令格式:MOV OPRD1,OPRD2 MOV 为操作码。 OPRD1为目的操作数,可以是寄存器、存储器、
累加器。
第3章 8088/8086指令系统
OPRD2为源操作数,可以是寄存器、存储器、累 加器和立即数。
第3章 8088/8086指令系统
4.寄存器间接寻址
寄存器间接寻址的操作数类型为存储器操作数,与 直接寻址方式的区别是:该存储单元的16位段内偏移 地址,不是从指令代码中直接得到,而是从指令所指 定的寄存器中得到。能用于间接寻址的寄存器为SI、 DI、BX、BP。若以SI、DI、BX进行间接寻址,应由 数据段DS的内容作为段基址,间接寻址寄存器的内容 为段内偏移量,并指定形成操作数的物理地址。若以 寄存器BP间接寻址,则BP中的内容为段内偏移量,段寄 存器SS与之一起形成物理地址。寄存器间接寻址示意 图如图3.4所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 80x86指令系统
程序流程图如图4.16所示。程序如下:
MOV CX,5
;设置循环次数
MOV SI,0
;置位移量初值
CLC
;清进位CF
LOOPER:MOV AL,DATA2[SI];取一个加数
ADC DATA1[SI],AL ;和一个被加数相加
INC SI
;位移量加1
DEC CX
;循环次数减1
②堆栈按字操作;
③每执行一条入栈指令,堆栈地址指针SP减2,入栈 的数据位于栈顶;
④高位字节先入栈,放在高位地址单元,低位字节 后入栈,放在较低地址单元;先进先出原则;
⑤执行弹出指令时,过程相反,栈顶指针的值加2;
⑥CS段寄存器的值可以入栈,但不能反过来弹出一 个字到CS
第4章 80x86指令系统
所有的通用寄存器或存储器 AX、DX寄存器
所有的通用寄存器或存储器 AX寄存器
所有的通用寄存器或存储器 AX、DX寄存器
AX寄存器 AX寄存器 AX寄存器
第4章 80x86指令系统
1.加法指令
指令格式
ADD dst, src ADC dst, src INC dst AAA DAA
操作功能
(dst) ←(dst) +(src) (dst) ←(dst)+(src)+(CF) (dst) ←(dst) + 1 ASCII码调整指令 BCD调整指令
JNZ LOOPER ;加完否,若没完,转LOOPER,继续相加
XLAT Hex_table
;查表转换
Hex_table=1000H
…
60000H
Hex_table
30H
61000H
Hex_table+1
31H
61001H
A Hex_tabAle+2
32H
61002H
S C
S C
…
I Hex_tableI+A
41H
6100AH
I Hex_tableI+B
表
表
42H
(一)通用数据传送指令 1. 最基本的传送指令 指令格式及操作:
MOV dst,src ;(dst)←(src) 将源操作数s指定的内容送到d目的操作数 dst 是目的操作数,它可以是存储器、通用寄存器(不能为 IP)和段寄存器(不能为CS),不能为立即数。 Src 是源操作数,它可以是存储器、通用寄存器、段寄存器 和立即数。
第4章 80x86指令系统
4.1.3 8086/8088指令系统
8086/8088CPU指令系统包含有133条基 本指令。按其功能可以分为6类,它们是:
⑴ 数据传送类指令 ⑵ 算术运算类指令 ⑶ 逻辑运算与位移类指令 ⑷ 字符串指令 ⑸ 控制转移类指令 ⑹ 处理器控制类指令。
第4章 80x86指令系统
3.交换指令 将源操作数和目的操作数(字或字节)相互对 应交换位置。 指令格式及操作: XCHG opr1, opr2 ;(opr1) ←→ (opr2)
第4章 80x86指令系统
4.字节转换指令 通过查表来完成代码转换,用于实现字节翻译的 功能。
指令格式及操作:
XLAT src_table ;(AL) ←((BX)+(AL))
…
6100BH
Hex_table+F
46H
6100FH
DS:60000H
BX: 1000H
+ AX: 000AH
EA
6100AH
AL 04A1HH
第4章 80x86指令系统
(二) 输入/输出指令 只能用累加器作为执行I/0数据传送的机构。 输入输出指令可以分为两大类:一类是直接端口 地址的输入/输出指令:一类是通过DX寄存器 间接端口地址的输入/输出指令。 ⑴ 输入指令 ①直接寻址的输入指令 寻址范围0-255(少于8位地址) 指令格式及操作:
LDS DI, [2130H]
DM
DI 1234H DS 4000H
34H
2130H
12H
00H
2132H
40H
第4章 80x86指令系统
3. 地址指针装入ES指令 指令格式:
LES reg16, mem32
此指令的功能是将源操作数所对应的双字长的内 存单元中的高字内容(一般为16位段基址)送入ES, 低字内容(一般为偏移地址)送入指令所指定的寄存 器中。例如:
第4章 80x86指令系统
⑵ 弹出堆栈指令 指令格式及操作:
POP dst ; (dst) ←((SP)+1:(SP)), (SP) ←(SP)+2
dst 目的操作数可以是寄存器操作数和存储 器操作数,且必须是16位的操作数,但不能是立 即数。
第4章 80x86指令系统
特点:
①s和d可以是16位寄存器或存储器两相邻单元;
标志位影响 OSZAPC
○○○○○○ ○○○○○○ ○○○○○△ ×××○× 1 ×○○○○○
在微处理器中,没有专用的BCD码运算指令, 使用二进制运算指令进行BCD码数的运算,然后用 BCD码运算调整指令进行调整,重新得到BCD码的 结果。
第4章 80x86指令系统
① ADD dst, src (dst) ←(dst) +(src)
4.标志弹出堆栈指令
将当前栈顶和次栈顶中的数据弹出,送回标志寄存器当 中。
指令格式及操作:
POPF
; (FLAG) ←((SP)+1;(SP)),
; (SP) ←(SP)+2
经常成对出现,用在子程序和中断处理程序的首尾,用
来保护和恢复主程序涉及的标志寄存器的内容。
必要时可修改标志寄存器的内容。
第4章 80x86指令系统
一、 数据传送类指令
数据传送类指令时将数据、地址或立即数传送到寄存器或存 储器单元中。可完成寄存器与寄存器之间、寄存器与存储器之间、 寄存器与I/O端口之间的字节或字传送。它又可分为通用数据传送 指令、输入/输出指令、目标地址传送指令和标志传送指令四组。 特点:除SAHF和POPF不影响标志寄存器内容。
XLAT指令是用来将一种字节代码转换成另一种字 节代码。执行的结果放在AL中。
使用指令前: BX寄存器的内容指向表格首址; AL中存放待查的码,即某一项与表首地址的距离。
XLAT指令还可以有以下几种表示形式:
XLAT
;不写操作数
XLATB
;有B就不允许再写操作数。
XLAT ES:src_table ;重设段寄存器为ES
IN acc, port ;(acc) ←(port)
第4章 80x86指令系统
②间接寻址的输入指令 寻址范围0-65535(少于或超过8位地址) 指令格式及操作:
IN acc, DX ;(acc) ←((DX))
⑵ 输出指令 ①直接寻址的输出指令 指令格式及操作:
OUT port, acc ; (port) ← (acc) ②间接寻址的输出指令 指令格式及操作:
数据类型
8位无符号 二
16位无符号 进
8位带符号
制 16位带符号
十
组合式
进
制
分离式
数据范围 0~255
0~65535 -128~+127 -32768~+32767
0~99 0~9
运算
加减 乘除 加减 乘除 加减 乘除 加减 乘除
加减
加减 乘除
可作累加器使用的寄存器或存储器
所有的通用寄存器或存储器 AX寄存器
第4章 80x86指令系统
MOVE指令需要注意的问题: ①MOVE指令可传送8位数据,也可传送16位数据。 ②MOVE指令中的两操作数s和d,必用1个寄存器, 不允许同时为存储单元。 ③不能用CS和IP做目的操作数。 ④不允许段寄存器之间直接数据传送。 ⑤不允许立即数做目的操作数。 ⑥不能向段寄存器送立即数。
第4章 80x86指令系统
段寄存器
CS DS SS ES
16 位
存储器
16位 8\16位 立即数
8\16位
通用寄存器
AX BX CX DX 8\ BP SP SI DI 16 AL BL CL DL 位
AH BH CH DH
MOV 指令数据传送方向
需说明一点,对于代码段寄存器CS和指令 指针寄存器IP,通常无需用户利用传送指令改 变其中的内容。但是CS可以作为源操作数。
第4章 80x86指令系统
2.堆栈操作指令 堆栈操作指令是用来完成压入和弹出堆栈操作的。 8086/8088指令系统中提供了完成这两种操作的相应 指令。 ⑴ 压入堆栈指令 指令格式及操作:
PUSH src ;(SP) ←(SP)-2, ((SP)+1:(SP)) ←(src)
src 源操作数可以是寄存器操作数和存储器操作 数,且必须是16位的操作数,但不能是立即数。
L ES 4000H
34H
2130H
12H
00H
2132H
40H
第4章 80x86指令系统
(四) 标志传送指令 1.取标志指令 将标志寄存器F的低字节传送到AH中。 指令格式: LAHF 2.置标志指令 将AH寄存器的内容传送到标志寄存器F的低字节。 通过AH对标志寄存器的SF、ZF、AF、PF、CF标志位 置位。
第4章 80x86指令系统
[例]在内存的数据段有一张16进制数的ASCII码表,其首地址为
Hex_table,如下图所示,为了查出第10个元素, 即十六进制数A的ASCII码, 则可用以下几条指令实现:
MOV BX, OFFSET Hex_tale
;(BX) ←表首址
MOV AL, 0AH
;(AL) ←序号