It计算机课件 第五章 86系列微型计算机的指令系统_第1页
It计算机课件 第五章 86系列微型计算机的指令系统_第2页
It计算机课件 第五章 86系列微型计算机的指令系统_第3页
It计算机课件 第五章 86系列微型计算机的指令系统_第4页
It计算机课件 第五章 86系列微型计算机的指令系统_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章86系列微型计算机的指令系统

本章教学目的

-指令语言是面向机器的语言,它在自动控制、智能化

仪器仪表、监测等领域应用非常广泛。

■本章结合8086微处理器的指令系统学习,使学生掌握

指令系统相关知识,如寻址方式、各种指令的运用,

通过学习,要求学生能够用所学指令编程实现较简单

的程序设计,分析现有程序的功能,完成已知程序的

查错与填空等。

本章学习要求

,掌握

□8088CPU的寻址方式;

□8086CPU的指令系统;立即寻址,直接寻址,寄存器寻址,

寄存器间接寻址,变址寻址,基址加变址寻址方式中操作数

寻址过程;

□指令的构成,指令操作数有效地址(EA)的形成;

□间接寻址和基址加变址寻址方式中寄存器的约定,段基数及

操作数地址的确定,段超越的概念及其使用;

□8088指令系统中数据传送,算术运算,逻辑运算,串操作和

控制传送指令的含义及操作过程及算术和逻辑运算对标志位

的影响。

□掌握算术运算中加减法运算指令的组合BCD数的十进制调整

过程及在码制转换中的应用。

2.理解

□各种寻址方式的工作原理,各指令的执行对标志位

的影响;

□标志位的状态对指令执行的影响;重复前缀指令。

3.了解

□十进制调整指令;

□指令代码和执行周期数的含义;

□处理器控制指令的含义。

、本章主要外语词汇

—■—:---------

1.EA:EffectiveAddress,有效地址

主要内容

■86系列汇编语言及指令的格式与寻址方式

■传送类指令

■数据操作类指令

■串操作指令

-控制类指令

指令是让计算机完成某种操作的命令,指令的集合称作指令系统,

不同系列计算机有不同的指令系统。

-指令系统与计算机硬件有着某些对应关系,用指令进行编程能够充

分开发计算机硬件资源,它的程序目标代码短、运行速度快,在自

动控制、智能化仪器仪表、监测等领域应用非常广泛。

■86系列指令系统是在8位微处理器86系列的指令系统基础上设计的,

它兼容了86系列的全部指令,这部分对8位微处理器具有兼容性的

指令往往是处理字节(8位)的。

5.1寻址方式

5.L1指令的组成

■指令是计算机完成的某种动作的命令。

-指令的集合称作指令系统,指令系统与微处理器有密

切的联系,不同的微处理器有不同的指令系统。

■汇编指令与机器指令一一对应。

操作码操作数

做什么数据或数据在哪里,可

以由0~11个

■汇编指令中的操作码用助记符(英文单词或单词的缩

写形式)表示

指令的组成

•指令的组成

-操作码字段(Field):标明计算机要执行什么操作

-操作地址字段:指出指令在执行过程中所需要的操作数

(值为多少或者放在什么地方或者控制转移到什么地

方),以及操作结果送到哪里。

•指令通常应提供的信息

-做什么操作

-操作数从哪里来

-操作结果放在哪里

-对于调用和转移指令,还要涉及转移或调用地址的提供

方式

86系列汇编语言指令语句格式:

指令的一般格式

•操作数字段可以有一个,二个或三个操作数,通常

称为“一地址”,“二地址”或“三地址”指令。

操作码操作数操作数

•指令的操作码在机器中的表示比较简单,只要对每

一种操作指定相应的二进制代码即可。

•指令的操作数字段的情形就比较复杂。

一寻址方式。

指令示例

•力口1指令INCAX

-只需要指出加1的操作数,它是“单地址”指令。

•双操作数指令ADDAX,BX

-大多数运算型指令都是双操作数指令。

-x86处理器采用“二地址指令”,两个操作数分别

称为“源操作数”和“目的操作数”,指令执行

后,把运算结果放到目的操作数的地址之中。

-对这种指令,有的机器(大中型)使用“三地址

指令”,除给出参加运算的两个操作数外,还要

指出运算结果的存放地址。

5.1.2寻址方式

•定义1:指令中操作数的表示方式。

•定义2、规定如何对地址字段作出解释以找到操作数。

•程序转移时需提供转移地址,这与提供操作数地址

在方法上没有本质区别,因此也归入寻址方式的范

畴。

•一个指令系统能够提供哪些寻址方式,能否为编制

程序提供方便,这是指令系统设计的关键。

寻址方式

­数据的寻址方式

-立即寻址

-寄存器寻址

-存储器寻址

-I/O端口寻址

•转移地址的寻址方式

、立即寻址(Immediateaddressing)

•指令中直接给出操作数,操作数紧跟在操作码之后,

作为指令的一部分存放在代码段里;在取出指令的

同时也就取出了操作数,立即有操作数可用,所以

称之为立即寻址。存储器

AX

高地址

Example:

MOVAL,80H30代

64码

MOVAX,3064H段

OP

ADDAL,20H

低地址

ADDAX,1090H

MOVAX,3064H

立即寻址

•立即数可以是:

-16进制数,以H结尾

•MOVAL,43H

-2进制数,以B结尾

•MOVAL,01000000B

-10进制数,不需要加特殊符号

•MOVAL,100

-用'括起来的ASCH码表达的字符或字符串

•MOVAL,'A'

•MOVAXJAB'

■注意:以A〜F打头的数字出现在指令中时,前面要加一个数

字0。例如将立即数FF00H送到AX的指令必须写成如下形式:

MOVAX,0FF00H

立即寻址

•在8086、80286微处理器中,立即数可以为8位

(字节),也可以为16位(字)。如果是16位数,

则“高位字节存放在高地址中,低位字节存放在低

地址中”。

•立即数只能用于源操作数,而不能用于耳的操作数。

•立即数不但可以送到寄存器中,也可以送到一个存

储单元中(8位)、或两个连续的存储单元中(16

位)。

二、寄存器寻址(Registeraddressing)

•操作数在寄存器中,指令中指明寄存器号,这种寻

址方式叫寄存器寻址。用寄存器名表示它的内容。

Example:

•MOVAL,BL;MOVAX,BX;

MOVCX,DX;ROLAH,1;

I

将AH中的内容循环左移一位

H1-ID7DO

寄存器寻址

■寄存器寻址方式简单快捷,最常使用。

-绝大多数指令采用通用寄存器寻址。

-部分指令支持专用寄存器,例如段寄存器。

•当指令中的源操作数和目的操作数都是寄存器时,必须采

用同样字长的寄存器,否则汇编时出错。

-不可以:MOVAX,CL

•两个操作数不能同时为段寄存器。

一不可以:MOVSS,DS

•目的操作数不能是代码段寄存器。

-例如,指令MOVCS,AX,用MASM6.11汇编时没有报

错,执行时会发生问题。

寄存器寻址

•寄存器寻址的特点

1.操作数就在寄存器中,不需要访问存储器来取

得操作数(指令执行时,操作就在CPU的内部

进行),因而执行速度快。

2.寄存器号比内存地址短。

­在编程中,如有可能,尽量使用这种寻址方式的指

令。

三、存储器寻址方式

­除立即寻址、寄存器寻址外,其它各种寻址方式的

操作数均在存储器中,通过采用不同的寻址方式取

得操作数地址。

•16位系统的存储器寻址:

一物理地址PA=段基址SBA(SegmentBase

Address)与有效地址EA(EffecitiveAddress)

组合。

•在旧MPC机中,把操作数的偏移地址称为有效地

址EA。EA是16位无符号数,可通过不同的寻址方

式来得到。

16位系统中的存储器寻址

•有效地址EA:可由基址寄存器(BX和BP)、变

址寄存器(SI和DI)、指令中给出的8位或16位的

位移量组成。

•不同组合方式,形成不同的寻址方式:

1.直接寻址(DirectAddressing)

2.寄存器间接寻址(RegisterIndirectAddressing)

3.基址寻址(BaseAddressing)

4.变址寻址(IndexedAddressing)

5.基址变址寻址(BaseIndexedAddressing)

直接寻址

•在直接寻址方式中,指令中直接给出操作数的有效地址,或

者说,有效地址EA就在指令中。

-EA=Disp,Disp存放在指令中

-操作数表示为[Disp]

■操作数的有效地址(而不是操作数本身)存放在代码段中指

令的操作码之后,但操作数一般存放在数据段中。

•当然,也允许数据存放在数据段以外的其它段(如附加段)。

此时应在指令中给出“段超越前缀”。

•采用直接寻址方式,如果没有用“段超越前缀”标明操作数

在哪一段,就默认段寄存器为DS。

例1

•例1.MOVAX,[2000H];

若(DS)=3000H,则指令的执行情况如下图所示:

低地址执行结果:(AX)=3050H

例2

•如果数据在附加段(扩展段)中,则应指明“段超

越前缀”。

•例如:

MOVAX,ES:[3000H];

物理地址=16XES+3000H

寄存器间接寻址

•指令中给出寄存器号(寄存器为BX,BP,SI和DI之一),被指定

的寄存器中存放着操作数的有效地址,操作数在存储器中

(以寄存器的内容为操作数的有效地址)。

[BX]..........对应段寄存器为DS

EA=[BP]......................................SS

[SI].......................................DS

[DI].......................................DS

•指令中也可以通过“段超越前缀”取得其他段中的数据。

例如:MOVAX,ES:[BX]

MOVAX,ES:[SI]

MOVAX,DS:[BP]

Example

•例:MOVAX,[BX];

设(DS)=2000H,(BX)=1000H

则物理地址=20000H+1000H=21000H

AX高地址

H

50

21000H

指令的执行结果为:

低地址

(AX)=50A0H

基址寻址

•操作数的有效地址是一个基址寄存器BX或BP的内容

与指令中指定的8位或16位位移量(Disp8或Disp16)

之和。

一EA=BX/BP+Disp8/Disp16

•若没有段超越前缀,则

-当基址(变址)寄存器为BX时,段寄存器为DS;

-当基址(变址)寄存器为BP时,段寄存器为SS。

•例、MOVAL,[BX+1230H]

变址寻址

•操作数的有效地址是一个变址寄存器SI或DI的内容

与指令中指定的8位或16位位移量(Disp8或

Disp16)之和。

-EA=SI/DI+Disp8/Disp16

•若没有段超越前缀,则段寄存器为DS。

Example

例、MOVAX,[SI+3000H]

设(DS)=4000H,(SI)=2000H

则物理地址

=40000H+2000H+3000H位移量

=45000H

操作码

指令的执行情况如图

数据段

低地址

45000H

基址寻址/变址寻址的用途

•这种寻址方式可用于表格的处理。

-通过位移量来设置表格的首地址;

-利用修改基址寄存器(或变址寄存器)的内容来

获得表项的值。

SI

DS:DISP

DS:OOOO

基址变址寻址

■操作数的有效地址是一个基址寄存器和一个变址寄存器内

容之和,两个寄存器均由指令指定。

EA=[BX]/[BP]+[SI]/[DI][+Disp16/Disp8]

•[+Disp16/Disp8]为可选项,此时也称为“相对基址变址

寻址”,或“带位移量的基址变址寻址方式”。

•[BX]和[BP]只能选用一个,[SI]和[DI]亦然。即[BX]和

[BP]不能相加,[SI]和[DI]也不能相加。

•若基址寄存器为BX,则段寄存器为DS。

•若基址寄存器为BP,则段寄存器为SS。

Example

例:MOVAX,[BX+DI]

设(DS)=2100H,(BX)=0158H,[DI]=10A5H.

贝ijEA=0158H+10A5H=11FDH

物理地址=21000H+11FDH=221FDH

高地址

这种寻址方式同样适用

AX

于表格(或数组)。首地址

可存放在基址寄存器中,

34而用变址寄存器来访问表

格中的各项。由于两个寄

12221FDH存器都可以修改使用起来

更灵活。

低地址

Example

例:MOVAX,[BX+SI+0250H]

设(DS)=3000H,(BX)=2000H,(SI)=1000H,

EA=2000H+1000H+0250H=3250H

物理地址=30000H+3250H=33250H

AX

33250H

指令中带方括号的地址表达式遵循的规则

1.立即数可以出现在方括号内,表示直接地址,例如[2000H]

■注意区别:movAX,2000HmovAX,[2000H]

2.只有BX/BP,SI/DI四个寄存器可以出现在[]内。它们可以

单独出现,也可以组合出现(只能相加),或以寄存器与

常数相加的形式出现。但BX和BP寄存器不允许同时出现

在一个[]内,SI和DI也不能同时出现。

•正确:[BX+SI-2]

•不正确:[BX-SI-2]

3.由于方括号有相加的含义,下面几种写法等价:

•6[BX][SI]

•[BX+6][SI]

•[BX+SI+6]

指令中带方括号的地址表达式遵循的规则

4.若方括号内包含BP,则蕴含使用SS来提供基地址。

物理地址=16XSS+EA。

•包含BP的操作数有下列三种形式:

DISP[BP+SI]

DISP[BP+DI]

DISP[BP]

注:DISP是8位或16位的位移量

允许川段超越前缀将SS修改为CS、DS或ES中的一个。

指令中带方括号的地址表达式遵循的规则

5.其余情况蕴含使用DS来提供基地址。物理地址计

算方法为:

物理地址=16XDS+EA

■此时操作数可以有以下几种形式:

[DISP]

DISP[BX]或DISP[SI]或DISP[DI]

DISP[BX+SI]

DISP[BX+DI]

•同样允许用段超越前缀将DS修改为CS、ES或SS中的

隐含寻址

•指令中不指明操作数,但有蕴隐含规定的寻址方式。

•例如,指令DAA

-它的功能是将两个压缩BCD数相加后的结果调

整为正确的压缩BCD数。

-两个压缩BCD数相加相加后的结果在寄存器AL

中,DAA指令调整后的结果仍然保存在AL中。

四、I/O端口寻址

•若10端口采用独立编址的方式,则对10端口的寻址

有以下两种方式:

-直接端口寻址

端口地址用8位地址码表示,它是指令的一部分。

如:INAL/AX,21H

-间接端口寻址

此时I。端口的地址由16位表示,并规定存放在

DX寄存器中。如OUTDX,AL/AX;表示将

AL/AX中的内容输出到地址由DX寄存器内容所

指定的端口中。

转移地址的寻址方式

•控制转移的寻址方式:按指令中给出的操作数转移

到相应的目的地址。

一相对寻址

一段内寄存器寻址

一段内间接转移寻址

一段间直接转移寻址

一段间间接转移寻址

■相关指令:条件转移指令、无条件转移指令、循环

指令和调用指令。

相对寻址

•相对寻址,又称为段内直接转移:以IP的内容为基

准地址,加上紧跟指令操作码后的相对位移量

DISP,得到转移地址的偏移量。

•例1、条件转移指令JEA

•例2、无条件转移指令JMPADDR

-指令中的A、ADDR为转移地址的标号,且标号

为“近型标号”(即“Near”型标号)。

相对寻址

段内寄存器寻址

•段内寄存器寻址:以寄存器的内容为转移地址的偏

移地址。

•例如,指令JMPBX

-BX中的内容即为偏移地址。

—BXfIP,CS值不变。

•16位微处理器中,AX、BX、CX、DX、SP、BP、

SI和DI都可以用作目标地址的寄存器。

•注意:仅用于段内寻址。

段内间接转移寻址

•段内间接转移寻址

-包括前述的存储器操作数中的寄存器间接寻址、

变址寻址、基址寻址、基址变址寻址等几种寻址

方式,这些寻址方式求得的操作数即为转移地址

的偏移地址。

•例1、JMPWORDPTR[BX]

•例2、JMPVAR[BX][SI]

-指令中的[BX]、VAR[BX][SI]都表示段内间接转

移地址为彳扁移地址。

段间直接转移寻址

•段间转移:程序从一个代码段转移到另一个代码段。

一不仅要求改变IP中的指令偏移地址,还要改变

CS中的段基值。

•段间直接转移寻址:转移指码

令中带有两个16位地址,第

一个地址位转移地址的偏移

值,第二个地址位转移地址

CS当

的段基值。前

IP代

段间间接转移寻址

•段间间接转移寻址:实现数

段间转移所需的两个16段

位地址,可以用任何数据

存储器的间接寻址方式求

得。目

•汇编指令形式:

JMPDWORDPTR[EA]当

寻址方式小结

•操作数寻址方式

-立即寻址、寄存器寻址、存储器寻址I/O端口寻址

•转移地址的寻址方式

一段内转移、段间转移

练习

1.在16位系统中,下列指令中的源操作数和目的操

作数分别采用什么寻址方式?

①MOVAX,OOFFH;

②MOVAL,[BX+100];

③MOVX,[SI+BX];

④MOV[BX+DI+10H],AH;

⑤MOV[BP+1054H],AX;

⑥MOVAX,[SI];

练习

2.设DS=1000H,ES=2000H,SS=3500H,SI=OOAOH,DI

=0024H,BX=0100H,BP=0200H,数据段中变量名为

VAL的偏移地址值为0030H,试说明下列源操作数字段的

寻址方式是什么?物理地址值是多少?

①MOVAX,[100H]

②MOVAX,VAL

③MOVAX,[BX]

④MOVAX,ES:[BX]

⑤MOVAX,[SI]

⑥MOVAX,[BX+10H]

⑦MOVAX,[BP]

⑧MOVAX,VAL[BP][SI]

⑨MOVAX,VAL[BX][DI]

⑩MOVAX,[BP][DI]

5.2传送类指令

6系列指令分类:

■传送类指令

■数据操作类指令

■算数运算

■逻辑运算

■串操作指令

■控制类指令

■程序控制转移

■处理器控制

传送类指令

■传送类指令是指令系统中最活跃的一类指令,也是条

数最多的一类指令,主要用于数据的保存及交换等场

合。

■传送类指令可以分为4种:

■通用数据传送指令

■目标地址传送指令

■标志位传送指令

■I/O数据传送指令

传送类指令

指令指令格式指令功能状态标志位备注

类型0SZAPC

通用数MOVH标,源传送字节或字源:R、M、立即数目标:R、M

据传送PUSH源字压入堆栈--------------------------源:R、M

POP目标字弹出堆栈目标:R(CS除外)、M

XCHG目标,源交换字节或字源:通用R、M目标:通用R、M

XLAT字节翻译

目标地LEA目标,源装入有效地址--------------------------源:内存操作数目标:16位通用R

址传送LDS目标,源装入数据段指针到DS源:内存操作数目标:16位通用R

LES目标,源装入附加段指针到ES源:内存操作数目标:16位通用R

标志位LAHF把FR低字节装入AH

传送SAHF把AH内容装入FR低字节

PUSHF把FR内容压入堆栈

POPF从堆栈中弹出FR内容

I/O数IN累加器,端口输入字节或字--------------------------累加器:AL或AX

据传送OUT端口,累加器输出字节或字端口:地址0〜255或间接寄存器DX

■:运算结果影响标志位

运算结果不影响标志位

5.2.1通用数据传送指令

!通用传送指令中包括最基本的传送指令MOV,

堆栈指令PUSH和POP,数据交换指令XCHG

和XLAT。

-通用数据传送指令包括:

1.传送指令MOV

2.数据交换指令XCHG

3.查表转换指令XLAT

4.堆栈操作指令PUSH和POP

1.最基本的传送指令MOV

MOV指令是形式最简单、用得最多的指令。它可以

实现CPU内部寄存器之间的数据传送、寄存器和内

存之间的数据传送,还可以把一个立即数送给CPU

的内部寄存器或内存单元。

■语句格式:MOVOPD,OPS

-功能:将源操作数传送入目的地址,源地址内容不

变。即(OPS)一OPD。

■对标志位的影响:无

字节类型与类型

MOV指令所允许的数据传送路径及类型

例如:

■MOVAX,BUF

■MOVBH,[DI]

■MOVDI,ES:[SI]

■MOVBP,3[BX+SI]

■MOVBUFA,DL

■MOV[BP],AX

■MOVDS:[BP],DL

■MOVBUF,DS

■MOVES,BUF

.MOV指令的几点说明:

I)双操作数指令不允许两个操作数同时为段寄存器或存储

器操作数

MOVseg,seg;错误

MOVmem,mem;错误

(2)立即数不能传送到段寄存器中。

MOVseg,imm;错误

(3)目的操作数不允许使用CS段寄存器。

(4)指令指针IP,不能作为MOV指令的操作数

(5)dest与src必须类型匹配,即同时是字节或字类型。

(6)MOV指令不影响标志寄存器的值。

[几点注意:

相存器具有明确的类型,例如,AL、AX分别为字节、字

类型。若立即数没有明确的类型,MASM负责将立即数扩

展为与目的操作数位数相同。

■有时MASM不能确定内存操作数的类型,需要用byteptr

和wordptr明确指出是字节或字类型。

-如,判断下述指令是否正确:

MOV[2345H],12

例:;分析如下MOV指令的正确性:

•MOVAX,BL;类型不匹配

•MOVDS,1000H;不允许立即数送段寄存器

•MOV[BX],[SI];不允许内存操作数之间传送

•MOVES,CS;不允许段寄存器之间传送

•MOVCS,AX;CS不能作为目的操作数

例:设B是已定义的字节变量,判断指令的正确性。

•MOVAX,B

;错误,类型不匹配

•MOVAL,0

;正确,MASM可以判断出要送字节0

练习1

■用MOV指令实现两内存字节单元内容

的交换,要求使用直接寻址和寄存器寻

址两种方式来实现。

2035H01H

2045H02H

用直接寻址方式实现

MOVBL,[2035];

MOVCL,[2045H];

MOV[2045H],BL;

MOV[2035H],CL;

HLT

用寄存器间接寻址方式实现

MOVSI,2035H;

MOVDI,2045H;

MOVAH,[SI];

MOVAL,[DI];

MOV[2035H],AL;

MOV[2045H],AH;

N.交换指令

■交换指令XCHG可以实现字节交换,也可以实现字交换。

■格式:XCHGDEST,SRC;

-功能:将源操作数与目的操作数的内容互换。

■交换过程可以在CPU的内部寄存器之间进行,也可以在内

部寄存器和存储单元之间进行,但不能在两个存储单元之

间执行数据交换过程。

■例如:

XCHGAL,BL

XCHGBX,CX

XCHG[2530],CX

3.换码指令

■XLAT是一条完成字节翻译功能的指令,它可以使累加

器中的一个值变换为内存表格中的某一个值,一般用来

实现编码制的转换。

■语句格式:XLAT

-功能:将(BX)为首址(AL)为位移量的字节存储单元

中的数据送AL寄存器。即([BX+AL])—AL。

■使用换码指令时,要求BX寄存器指向表的首地址,AL

的内容为表中某一项与表格首地址之间的偏移量,指令

执行时,会将BX和AL中的值相加,把得到的值作为地

址,然后将此地址所对应的单元中的值取到AL中去。

•图5.6表示了换码指令的功能。XLAT指令就是通过查

表方式来完成翻译功能的,因此,在执行该指令之前,

必须建立好一张翻译表,该表的最大容量为256字节。

■执行XLAT指令可将任意一个十进制数翻译成7段显示

码,其操作步骤如下:

(1)将译码表定位到某个逻辑段的一片连续地址中,并将其表首

址的偏移地址置入BX寄存器中。

(2)将待翻译的十进制数字送入AL寄存器中。

(3)执行XLAT指令。

■例如,假设这段数据存放在偏移地址为2000H开始的

内存中,取出“3”所对应的7段码,用如下几条程序助

记符即可完成:如七段数码管显示控制程序

MOVBX,2000H

MOVAL,3

XLAT

旨令

F栈作用:

-在调用一个过程时,保存返回地址;

■暂时存放寄存器或存储器单元操作数的内容。

进栈PUSHSRC;

操作:

(SP)6(SP)-2

((SP)+i,(SP))q(SRC)

出栈POPDST;

操作:(DST)Q((SP)+1,(SP))

(SP)((SP)+2

试分析如下两条指令执行

后,SP的变化情况:

01F8

PUSHAX

01FA

POPAX01FC

01FE

堆栈

(执行PUSHAX之前)

01F8堆栈

(执行PUSHAX之后)

5.2.1通用数据传送指令(3)

■例如,将16位通

用寄存器CX的内容

压入堆栈,然后,

弹出栈顶至CX中,已

知:(SS)=0200H,

(SP)=0008H,(CX)

=12FAHo

5.2.1通用数据传送指令(4)

।5.2.2目标地址传送指令

-这是一类专用于传送地址码的指令,可用来传送操作

数的段地址或偏移地址,共包含以下3条指令:

1.取有效地址指令LEA

2.取偏移地址及数据段首址指令LDS

3.取偏移地址及附加数据段指令LES

1.取有效地址指令LEA

语句格式:LEAOPD,OPS

功能:将存储器地址送到一个寄存器,主存按源地址的

寻址方式计算偏移地址,将偏移地址送入指定寄存器。

LEA指令格式中,要求源操作数必须为内存单元地址目

的操作数必须为一个16位的通用寄存器。

例如:

LEAAX,[2728]

LEABX,[BP+SI]

LEA指令与MOV指令的区别:

LEASI,BUFF;将标号BUFF的偏移地址送入寄存器中

MOVSLBUFF;将标号BUFF所指存储单元的内容送入SI

段起始地址

LEASI,BUFF;

执行后:(SI)=0002H

MOVSI,BUFF;

执行后:(SI)=0048H

2,将地址指针装到DS和另一个寄存器的指令

■语句格式:LDSOPD,OPS

■功能:把4个字节的地址指针(其中包括一个段地址和一

个偏移量)传送到两个目的寄存器,其中,地址指针的后

两个字节即段地址一定送到DS中。

该指令常指定S1寄存器。

高16位DS(隐含)

OPS

(32位,低16位DEST的REG

4字节)

LDS或LES指令将源操作数指定的4个连续字节单元内容分别送

入指令指定的寄存器以及DS或ES中。

其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中。

例:(DS)=COOOH,[C2480H]=1357H,[C2482H]=2468H

LDSSI,[2480H]

DS:2480H

DS:2481H

DS:2482H

SI

DS:2483H

DS

I3.将地址指针装到ES和另一个寄存器的指令

■语句格式:LESOPD,OPS

.LES指令与LDS指令的操作基本相同

■区别:将源操作数所指向地址指针中的段基址

(后两个字节)传送到ES段寄存器,而不是DS段

寄存器。

5.23标志位传送指令

可完成标志位传送的指令共有4条:

1.读取标志指令LAHF

2.设置标志指令SAHF

3.标志寄存器进栈指令PUSHF

4.标志寄存器出栈指令POPF

.L读取标志指令

广语句格式:LAHF

■功能:将标志寄存器的低8位送入AH寄存器。

■即(FLAGS)7-0-AH。读取标志指令LAHF被执

行时,将标志寄存器中的低8位传送到AH中。

■该指令的执行对标志位无影响。

2.设置标志指令SAHF

■语句格式:SAHF

■功能:将AH的内容送入标志寄存器的低8位,高

8位不变。即(AH)-FLAGS7-0.。

■从该指令功能可看出,SAHF为LAHF的逆过程。

■设置标志指令SAHF被执行后,标志寄存器内容改变,

该指令的执行会影响PSW

3.对标志寄存器的压入堆栈指令和弹出堆栈指令

■PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆

栈指针SP的值减2

-POPF指令的功能正好相反,此指令在执行时从堆栈中弹

出一个字送到标志寄存器中,同时堆栈指针SP的值加2。

■PUSHF和POPF指令一般用在子程序和中断处理程序的首

尾,起保存主程序标志和恢复主程序标志的作用。

■注:

-LAHF/SAHF指令是寄存器AH与标志寄存器PSW

的低字节之间完成的字节型数据传送。

-LAHF/SAHF指令是寄存器AH与标志寄存器PSW

的低字节之间完成的字节型数据传送。

■PUSHF/POPF指令是标志寄存器PSW与堆栈间进

行的字型数据传送。

-指令SAHF/POPF将影响标志位。

、5.2.4输入/输出数据传送指令

M----------------------

1.输入指令IN

2.输出指令OUT

CPU

II/O线

1.输入指令IN

■输入指令用来从指定的外设寄存器取信息送入

累加器。它有四种形式:

(1)语句格式:INAL,PORT

功能:(PORT)一AL

语句格式:INAX,PORT

功能:(PORT)一AX

语句格式:INAL,DX

功能:([DX])一AL

(4)语句格式:INAX,DX

功能:([DX])一AL

■直接IN指令(口地址只能8位)

INAL,50H

INAX,80H

■间接IN指令(口地址是16位,也可8位。)

MOVDX,0FFF2H

INAL,DX

2.输出指令OUT

(1)语句格式:OUTPORT,AL

功能:(AL)一PORT

(2)语句格式:OUTPORT,AX

功能:(AX)一PORT

(3)语句格式:OUTDX,AL

功能:(AL)一[DX]

(4)语句格式:OUTDX,AX

功能:(AX)一[DX]

■直接OUT指令(口地址只能8位)

OUT44H,AL

OUT70H,AX

■间接OUT指令(口地址是16位,也可8位。)

MOVDX,87FEHMOVDX,80H

MOVAL,40HOUTDX,AL

OUTDX,AL

5.3数据操作类指令

■86系列CPU指令系统中,具有完备的加、减、乘、除

算术运算指令,可处理不带符号或带符号的8/16位二

进制整数,以及不带符号的装配型/拆开型十进制整数。

数据操作类指令包括以下几种类型的指令:

■算术运算指令

-加法指令

-减法指令

-乘法指令

■除法指令

-BCD码运算(十进制调整)指令*

■逻辑运算和移位指令

■逻辑运算指令

■移位指令

■循环移位指令

5.3.1算术运算类指令

孝加法指令

■不带进位的加法ADD

格式:ADDDEST,SRC;DEST+SRC-DEST

■带进位的加法ADC

格式:ADCDEST,SRC;DEST+SRC+CF->DEST

■加1指令INC

格式:INCDEST;DEST+1-DEST(不影响CF)

SRC:n,通用REG,M三种寻址方式

DEST:通用REG,M两种寻址方式

■立即数不能做目的操作数,DEST,SRC不能同为存储器寻址方式,

类型要一致,段寄存器不能做操作数。

■说明:这在三条指令运算结果将影响状态标志位,但是INC指令不影响

本小/LSCFo

](1)不带进位位的加法指令:

ADD用来执行两个字或两个字节的相加操作,结果放在原

来存放目的操作数的地方。

例如:

ADDAL,50H

ADDDLSI

ADD[BX+DI],AX

(2)带进位位的加法指令

ADC指令被执行时,将进位标志CF的值加在和中。

例如:

ADCAX,SI

ADCDX,[SI]

练习

■试编写程序实现两个4字节的无符

号数相加,这两个数分别存放在

2000H和3000H开始的存储单元中,

低位在前,高位在后,进行加法运

算后得到的和2000H开始的内存单

元中。

程序如下:

CLC

MOVSL2000H

MOVAX,[SI]

MOVDL3000H

ADDAX,[DI]

MOV[SI],AX

MOVAX,[SI+2]

ADCAX,[DI+2]

MOV[SI+2],A

1(3)增量指令:

千INC只有1个操作数,指令在执行时,将操作数的内容

加1,再送回该操作数。

■一般用在循环程序中修改指针和循环次数。

例如:

INCAL

INCCX

INCBYTEPTR[BX+DI+500]

在编程中要注意,INC指令不影响进位标志CF的状态。

2,减法指令

-不带借位减法SUB

格式:SUBDEST,SRC;DEST-SRCDEST

-带借位减法SBB

格式:SBBDEST,SRC;DEST-SRC-CFDEST

■减工指令DEC

格式:DECDEST;DEST-1DEST

■取补指令NEG:

格式:

■比较指令CMP

格式:CMPDEST,SRC;DEST-SRC(不回送结果)

■除DEC不影响CF外,其他都按一般规则影响状态标志位。

(1)不带借位的减法指令SUB:

SUB完成两个字节或两个字的相减,结果存于目的地址,源

地址内容不变。

例如:

SUBBX,CX

SUB[BP+2],CL

SUBAL,20

SUBWORDPTR[DI],1000H

■^⑵带借位的减法指令SBB

■SBB在形式上和功能上都和SUB指令类似,只是SBB指令在执

行减法运算时,还要减去CF的值。

-SBB在执行减法运算时,用被减数减去减数,并减去低位字

节相减时产生的借位。

例如:

SBBAX,2030H

SBBWORDPTR[DI+2],1000H

3・(3)减量指令DEC:

-功能:将目的操作数减1,结果送目的地址。

■DEC只有1个操作数。

■DECm令是一个单操彳乍数指令,操作数可以是寄存器或

存储器操作数。

-减1指令DEC也一般用于对计数器和地址指针的调整。

例如:

DECAX

DECBL

DECBYTEPTR[DI+2]

4(4)取补指令NEG:

7功能:将目的操作数的每一位求反(包括符号位)后

加1,结果送目的地址。

-因为对一个操作数取补码相当于用。减去此操作数,所

以NEG指令执行的也是减法操作。

■例如:

NEGAL

NEGCX

&(5)比较指令CMP

-功能:执行目的操作数减源操作数,结果只影响标志位,

不送回相减的结果。

-一般情况,CMP指令后面经常会有一条条件转移指令,

用来检查标志位的状态是否满足了某种关系。

例如:

CMPAX,2000H

CMPAL,50H

CMPAX,[BX+DI+100]

CMPDX,DI

1限乘法指令

■乘法运算是双操作数运算,但是,在指令中却只指定

一个操作数,另一个操作数是隐含规定的。

■其中的操作数可以是寄存器操作数或存储器操作数,而隐含的为

AL或AX。

指令格式:

无符号数乘法MULSRC;(AX)-(AL)*(SRC)字节乘法

;(DX,AX)-(AX)*(SRC)字乘法

带符号数乘法IMULSRC;操作同上

8位乘法

RH(8位)

字节运算字运算

•注:

•乘法指令运算结果只影响状态标志CF、OFo

•SRC只能是通用REG或M寻址,不能是立即数。

•只能是字节乘字节或字乘字

•存储器寻址时加类型说明,如MULBYTEPTR[BX],

MULWORDPTR[BX]

、.4.除法指令

-指令格式:

无符号数除法DIVSRC

带符号数除法IDIVSRC

■在除法运算中,如果除数8位的,则要求被除数是16位的;

如果除数是16位的,则要求被除数是32位的。

操作数

•注:

-当除数是字节数据时,被除数必须放在AX中;当除数是字数据时,

被除数必须放在DX,AX中。

-除法指令运算结果对状态标志无定义。

-8086/8088规定IDIV指令运算结果余数的符号与被除数相同。

-带符号数除法运算中,当被除数位数不够时,可进行扩展。

-若商超出字或字节表示的范围,自动产生0号中断

53.2逻辑运算和移位指令

1.逻辑运算指令

-求反指令NOT

■逻辑乘指令AND

.测试指令TEST

-逻辑加指令OR

■按位加指令XOR

■AND,OR和XOR指令都是双操作数指令,即可对

8位数操作,也可对16位数操作

-当有两个操作数时,不能同时都为存储器操作数

■无论是目的操作数,还是源操作数,都不能是段寄存

—Bro

■AND指令主要用来屏蔽掉一个数中某些位,以便对剩下的

其它位进行某些处理。对两个操作数都是1的位,目的操作

数相对应位就是1,其它各种组合的位,目的操作数相应位

都是0。

例:

■ANDAX,BX

■ANDAL,11110000B

■ANDMEM-BYTE,AL

■OR指令在两个操作数相对应位中有一个是1或两个都

是1时,在目的操作数的该位产生一个1。

■例:ORBX,0C000B

-XOR指令主要用于判断两个操作数中哪些位是不同的。

如两个操作数相对应位的值不同时,在目的操作数产

生一个1。相同为0,不同为1。

■例:XORBX,0C000B

XORAX,AX

■NOT指令的操作数只有一个,它求出指令所给的操作

数的反码,再送回。

-NOT指令改变寄存器或存储单元的每一位状态,原来

为0变为1,原为1变为0。

■例:

NOTAX

NOTAL

NOTBX

NOTWORDPTR[1000H]

-TEST指令是一条测试指令,它执行的操作与AND相同,

不过它不送回结果,只影响标志位。

■例如:

TESTAX,8000H;如AX的最高位为1,则ZF=O,否则ZF=1

TESTAL,01;如AL的最低位为1,则ZF=0,否则ZF=1

■例:试用一段小程序实现奇偶校验

的补偶操作

在传送ASCII码给外设时,常将最

高位作为奇偶校验位,假定ASCII码存

入AL中,AL的最高位初始为0

ANDAL,AL;(AL)与(AL)进行与操作,结果影响

;PF标志

JPNEXT;若PF=1,转至NEX1;PF=O,顺序执行

ORAL,10000000B;最高位补1,以使传送字节中的1的

;个数为偶数

NEXT:

■■■;补偶后,往下继续执行

■移位与循环移位指令

;8086有4条移位指令和4条循环移位指令

■功能:将目的操作数的所有位按操作符规定的方式移

动1位或按寄存器CL规定的次数(0〜255)移动,结果

送入目的地址。

■算术移位n,可相当于把二进制数乘以或除以2n

-逻辑移位则用于截取字或字节中的若干位

对标志位的影响:

-移位指令的执行结果会影响PF、SF、ZF和CF,并且CF总是等与目

的操作数最后移出的那一位的值;

■AF是不定的

■若只移动一位,且执行的结果使最高位(符号位)发生变化,则

OF置1,否则置0,若移位大于1,则OF不定。

(1)非循环移位指令:

.算术左移SAL

-算术右移指令SAR

-逻辑左移SHL

-逻辑右移指令SHR

■逻辑移位指令在执行时,实际上是把操作数看成无符

号数来进行移位,所以右移时,最高位添0

■算术移位指令在执行时,则将操作数看成有符号数来

进行移位,所以,右移时保持最高位的值不变,这里

的最高位就是符号位。

最高位最低位

0

(a)算术左移指令SAL

及逻辑左移指令SHL

最高位最低位

CF

(b)算术右移指令SAR

最高位最低位

(c)逻辑右移指令SHR

■■■■■■例:将两个非压缩BCD码

「(高位在BL,低位在AL)合

K7Jj并成压缩BCD码送AL。

MOVCL,4;将计数值送CL

SHLBL,CL;将高位移到BL的高4位

ANDAL,OFH;清零AL高4位

ORAL,BL;合并AL和BL形成压缩BCD码。

-当n=:L时,1写在指令中,如常SHLAL,1

■当n大于1时,将计数值n写入CL,再把CL写入指令,如

MOVCL,3

SHLBX,CL

■这类指令都把CF看做第9位或第17位参加运算。

-算术移位是对带符号数,逻辑移位是对无符号数而言。SAL要判断OF,

OF=工结果无效(符号变),SAR要保持符号位不变。

(2)循环移位指令:

•8086指令系统中有4条循环移位指令:

-不带进位位的循环左移指令ROL(rotateleft)

-不带进位位的循环右移指令ROR(rotateright)

—带进位位的循环左移指令RCL(rotatethroughCFleft)

—带进位位的循环右移指令RCR(rotatethroughCFright)

最高位最低位最高位最低位

CF.CF•'・

(a)不带CF的循环左移指令ROL(c)带CF的循环左移指令RCL

最高位最低位最高位最低位

r*CF-------------»-

(b)不带CF的循环右移指令ROR(d)带CF的循环右移指令RCR

丁循环移位指令的操作数可以是寄存器,也可以是存储单元。

可以是字节,也可以是字。

■如果循环移位指令只移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论