第2,3,4章微处理器与指令系统-15_第1页
第2,3,4章微处理器与指令系统-15_第2页
第2,3,4章微处理器与指令系统-15_第3页
第2,3,4章微处理器与指令系统-15_第4页
第2,3,4章微处理器与指令系统-15_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

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

文档简介

第二章微处理器2016.22.1.18086/8088微处理器8086是1978年推出的全16位微处理器,8088是1978年推出的准16位微处理器。二者除外数据总线位数(8086为16位,8088为8位)及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。

在8086/8088的设计中,引入了两个重要的结构概念:

指令流水线

存储器分段这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。正是这两个概念的引入,使8086/8088比原来的8位MPU在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。2.18086/8088微处理器内部结构指令流水线存储器分段8086是全16位微处理器,8088是准16位微处理器。二者除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。

1.内部结构2.1.18086/8088微处理器20位ABEU控制电路总线控制电路通用寄存器累加器基址寄存器计数寄存器数据寄存器堆栈指针基址指针目的变址源变址指针寄存器变址寄存器地址加法器运算暂存器ALU标志寄存器指令指针内部暂存器指令队列总线接口单元(BIU)执行单元(EU)外部总线8086/8088DB8088:8位8086:16位∑CSDSSSESIP1234568位80888086AXAHALBXBHBLCXCHCLDXDHDL

SPBPDISIALUDB16位8086CPU内部指令执行流程段寄存器CS程序指针寄存器IP内容经过地址加法器形成20位地址;由CPU内部地址总线AB,经过总线地址控制电路,向外部总线发读取指令的的控制信号,外部总线开始总线操作;读取指令送入到指令队列中,等待执行;EU单元从队列中取一条指令到EU控制电路,译码指令需要做的系列操作,包括寄存器的内容送累加器;操作结果经过内部数据总线,存放到寄存器或内部暂存器,同时置FR;根据DS寄存器的内容,及指令寻址方式产生的偏移量,经过地址加法器,形成数据保存地址,并送到外部总线。CPU发写总线操作命令,将暂存器的内容,通过总线,写到指定内存单元。2.指令流水线指令队列的存在使EU和BIU并行工作,取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,减少了CPU等待时间,提高了CPU的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。BIUEU8086/8088的指令“流水”操作取指令1取指令2译码1取数据1执行1取指令3译码2存结果1执行2取指令4译码3取指令5等待3.存储器分段8086物理地址(1M=220)将1MB的物理存储空间分成若干个逻辑段,每段大小为64KB。

64KB30000H(段基址)段的起始单元地址叫段基址,存放在段寄存器中。通过4个段寄存器,CPU每次可同时对4个段进行寻址。内存00000H00001H00002H00003HFFFFFH分段方式不唯一,各段之间可以连续、分离、部分重叠或完全重叠,这主要取决于对各个段寄存器的预置内容。1000H2000H3100H3100H代码段(64KB)堆栈段(64KB)数据段与附加数据段重叠(64KB)CS10000H20000H31000HSSDSES1FFFFH2FFFFH……40FFFH……………存储器分段结构示例

物理地址是1MB存储空间中的某一单元地址,用20位地址码表示,CPU访问存储器时,地址总线上送出的就是物理地址。

逻辑地址在编程时采用,由段基址和偏移地址组成,两者均为16位。内存20000H20A00H0A00H物理地址20A00H逻辑地址2000物理地址和逻辑地址逻辑地址与20位物理地址的变换关系:

物理地址=段基址×16+偏移地址偏移地址段基址段基址000020位物理地址逻辑地址150150

左移四位190∑地址加法器逻辑地址与物理地址的变换【例】若数据段寄存器DS=2100H,试确定该存储区段物理地址的范围。

一个逻辑段的最大容量为64KB;第一个存储单元的偏移地址为0;最后一个存储单元的偏移地址为FFFFH。该数据区段由低至高相应存储单元的偏移地址为:0000H~FFFFH。

存储区的首地址=DS×16+偏移地址=2100H×16+0000H=21000H

存储区的末地址=DS×16+偏移地址=2100H×16+FFFFH=30FFFH

2.2Pentium微处理器2-16实地址工作模式最基本的工作方式。

8086/8088的实地址模式保持兼容。

微处Pentium理器的实地址模式具有更强的功能,增加了寄存器,扩充了指令,可进行32位操作。

实模式操作方式只允许微处理器寻址第一个1MB存储器空间;当微处Pentium理器工作于实地址模式时,存储器的管理方式与8086微处理器存储器的管理方式完全相同。2.2.3Pentium的四种工作方式2.保护虚拟方式

通常在程序运行过程中,应防止以下情况的发生:

①应用程序破坏系统程序。

②某一应用程序破坏了其他应用程序。

③错误地把数据当作程序运行。

为了避免出现以上情形的发生,所采取的措施称作“保护”。

CPU复位RSM复位或RSMVM=0VM=1复位复位或PE=0使CR0的PE=1系统管理方式保护方式虚拟8086方式RSMSMI实地址方式SMISMI实地址方式实地址方式:工作原理与8086基本相同,主要区别是借助操作数长度前缀能处理32位数据,运行速度也更高,且可使用4个数据段。保护方式保护方式:CPU可访问的物理存储空间为232=4GB;程序可用的虚拟地址空间为246=64TB。段长度在启动页功能时是4GB,不启动页功能时是1MB。可支持多用户和单用户的多任务操作,并对各任务提供了多方面的保护机制。虚拟8086方式虚拟8086方式:既有保护功能又能执行8086代码的工作方式,是保护方式的一种子方式。CPU的工作原理与保护虚地址方式下相同,但程序指定的逻辑地址解释与8086相同。系统管理方式系统管理方式:使设计者实现高级管理功能,如对电源的管理以及为操作系统和正在运行的程序提供安全性。基本寄存器系统级寄存器调试和模型专用寄存器浮点寄存器Pentium的内部寄存器,按功能可分为4类:2.2.2Pentium内部寄存器

2.280486微处理器的体系结构标志寄存器指令指针寄存器EFLAGSFLAGSEIPIP311503115031161570通用寄存器EAXAHAXALEBXBHBXBLECXCHCXCLEDXDHDXDLEDIDIESISIEBPBPESPSP1.基本寄存器选择器CSSSDSESFSGS150630描述符高速缓存器段寄存器EIP用于保存下一条待预取指令相对于代码基址的偏移量。它的低16位也可单独访问,称之为IP。标志寄存器位定义CFEFLAGSFLAGS313029282726252423222120191817161514131211109876543210ACVMRF0NTIOPLOFDFIFTFSFZF0AF0PF0X对准检查标志X虚拟86模式标志X恢复标志X嵌套标志X特权级标志S溢出标志C方向标志X中断允许标志X自陷标志S符号标志S零标志S辅助进位标志S奇偶标志S进位标志注:S表示状态标志,X表示系统标志,C表示控制标志X虚拟中断标志XID标志X虚拟中断挂起0000000000VIFVIPID选择器描述符高速缓存器CSSSDSESFSGS150630段寄存器段寄存器Pentium有6个段寄存器:CS--指明当前的代码段SS--指明当前的堆栈段DSESFSGS决定程序使用存储器区域块指明当前的4个数据段编程者可直接访问的编程者不能访问的段选择符段描述符实地址方式和虚拟8086方式下相同,段的长度固定为64KB,段选择器就是段寄存器,它保存的是逻辑段基址的高16位,将它的内容左移4位即可得到实际段基址,而不必使用描述符高速缓存器。在保护虚地址方式下,段的长度可以在1字节到4G字节之间变化;为了描述每个段的基址、属性和边界,为每个段定义了一个描述符。Pentium段的定义与8086有所不同:2.2.3Pentium的四种工作方式实地址工作模式最基本的工作方式。

8086/8088的实地址模式保持兼容。

微处Pentium理器的实地址模式具有更强的功能,增加了寄存器,扩充了指令,可进行32位操作。

实模式操作方式只允许微处理器寻址第一个1MB存储器空间;当微处Pentium理器工作于实地址模式时,存储器的管理方式与8086微处理器存储器的管理方式完全相同。

2.保护虚拟方式

通常在程序运行过程中,应防止以下情况的发生:

①应用程序破坏系统程序。

②某一应用程序破坏了其他应用程序。

③错误地把数据当作程序运行。

为了避免出现以上情形的发生,所采取的措施称作“保护”。

CPU复位RSM复位或RSMVM=0VM=1复位复位或PE=0使CR0的PE=1系统管理方式保护方式虚拟8086方式RSMSMI实地址方式SMISMI实地址方式实地址方式:工作原理与8086基本相同,主要区别是借助操作数长度前缀能处理32位数据,运行速度也更高,且可使用4个数据段。保护方式保护方式:CPU可访问的物理存储空间为232=4GB;程序可用的虚拟地址空间为246=64TB。段长度在启动页功能时是4GB,不启动页功能时是1MB。可支持多用户和单用户的多任务操作,并对各任务提供了多方面的保护机制。虚拟8086方式虚拟8086方式:既有保护功能又能执行8086代码的工作方式,是保护方式的一种子方式。CPU的工作原理与保护虚地址方式下相同,但程序指定的逻辑地址解释与8086相同。系统管理方式系统管理方式:使设计者实现高级管理功能,如对电源的管理以及为操作系统和正在运行的程序提供安全性。这类数不带任何符号信息,只含有量值域,仅CPU支持。分为三类:字节:字:双字:任何逻辑地址上的8位相邻位串。任何字节地址开始的2个相邻字节。低字节地址为该字地址。任何字节地址开始的2个相邻字,即4个相邻字节。最小字节地址为双字的地址。1.无符号二进制数(序数)3.1.0基本数据类型第三章80486微处理器指令系统这类数均以补码表示,有8位数(字节)、16位数(字)、32位数(双字)、64位数(4字)四种。CPU支持前3种,FPU支持后3种。2.带符号的二进制定点整数(整数)★关于数据类型的两点说明:(1)各类型数据中,基本的数据类型仍是字节、字和双字尽可能将字操作对准于偶地址,将双字操作对准于4的整数倍地址。对准的字和双字可一次传递完,未对准的字和双字需几次才能传递完。(2)对于字和双字数据,80X86是采用低端低地址方式来存储字数据被存储在两个相邻的字节单元之中,低位字节在低地址单元,高位字节在高地址单元;双字数据存储在四个连续字节单元中,最低位字节在最低地址单元,最高字节在最高地址单元。

而字或双字数据的地址是指最低位字节所在的单元地址。3.1.1操作数寻址方式1.寻址方式和有效地址概念2.11种寻址方式3.存储器寻址时的段约定4.应用举例寻址方式就是寻找指令中操作数地址的方式。操作数所在地址有三种可能:

直接包含在指令中,即指令的操作数部分就是操作数本身。这种操作数叫立即数,对应的指令寻址方式称为立即数寻址。包含在CPU的某个内部寄存器中。这时指令中的操作数部分是CPU的一个寄存器,这种指令寻址方式称为寄存器寻址。在内存储器中。这时指令的操作数部分包含着该操作数所在的内存地址。这种指令寻址方式称为存储器寻址。1.寻址方式和有效地址概念寻址方式

在Pentium系列MPU中,内存实际地址(PA):

PA=段基地址+段内偏移地址(EA)为了适应处理各种数据结构的需要,段内偏移地址可由以下几部分组合而成:基址寄存器内容变址寄存器内容比例因子(仅与32位方式相关)位移量

这四个基本部分称为偏移地址四元素,一般又将由这四种元素组合形成的偏移地址称为有效地址EA。EA=基址+(变址×比例因子)+位移量有效地址EA有效地址元素16位寻址32位寻址基址寄存器BX,BP任何32位通用寄存器变址寄存器SI,DI除ESP外的任何32位通用寄存器比例因子无(或1)1,2,4,8位移量0,8,16位0,8,32位

指令寻址字段规定了操作数的来源部件和如何计算EA的方法。实地址与保护方式的PA方法不同.无AX、CX、DX、SP、IP寄存器

保护方式下的寻址过程(地址转换过程)---

虚拟存储有效地址计算变址位移基址×比例因子+32位有效地址310BE7~BE0A31~A3┇┇┇32位32位13位描述符检索段寄存器选择符TIRPL153210分段部件线性地址物理存储器4G分页部件(可选)物理地址逻辑地址(虚拟)(CS,DS,ES,SS,FS,GS)不分页逻辑地址=段选择符:有效地址

偏移地址四元素可优化组合出9种存储器寻址方式,加上立即数寻址和寄存器寻址,Pentium共有11种寻址方式:(1)立即数寻址(2)寄存器寻址(3)直接寻址(4)寄存器间接寻址(5)基址寻址(6)变址寻址(7)比例变址寻址(8)基址加变址寻址(9)基址加比例变址寻址(10)带位移的基址加变址寻址(11)带位移的基址加比例变址寻址2.11种寻址方式EA=基址+(变址×比例因子)+位移量

在这种寻址方式下,操作数作为立即数直接存在指令中,可为8位、16位或32位。例:MOVAX,4567HMOVBL,78HMOVECX,12345678H⑴立即数寻址78563412顺序存放在指令后面

在这种方式下,操作数包含在指令规定的8位、16位或32位寄存器中。例:MOVEAX,EDXINCCLMOVDS,AX

这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。(2)寄存器寻址(寄存器直接寻址)指令中的操作数部分直接给出操作数有效地址EA。与操作码一起放在存储器代码段中,可以是16位或32位整数。操作数一般在数据段DS中。(3)直接寻址(存储器直接寻址)实际中对于直接寻址,如操作数在DS段中,则可直接写成:MOVAX,[3000H]

如操作数在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中则必须用段寄存器名前缀(称为段超越前缀)予以指明。例如:MOVAX,FS:[3000H]

直接寻址主要用于单个操作数的相对寻址场合(如简单的标量操作数寻址和静态分配数组的起始地址寻址等)。操作数放在存储器中,但其有效地址EA在寄存器中,即:

EA=[寄存器]寄存器的使用规定在16位寻址和32位寻址时不一样。

16位:BX,BP,SI,DI

32位:EAXEBX,ECX,EDX

ESI.EDI.EBP,ESP(4)寄存器间接寻址8个通用寄存器①16位寻址时,偏移地址放在SI、DI、BP或BX中。这 时又有两种段默认情况:若以SI、DI、BX间接寻址,则默认操作数在DS段中。例如:

MOVAX,[SI];默认DS为段基址若以BP间接寻址,则默认操作数在SS段中。例如:

MOVAX,[BP];默认SS为段基址

如果操作数不在上述规定的默认段,而是在其他段,则必须在指令中相应的操作数前加上段超越前缀。例如:MOVAX,ES:[SI]MOVAX,DS:[BP]②32位寻址时,8个32位通用寄存器均可作寄存器间接寻址例如:MOVEBX,[EAX];默认DS为段基址,传送双字给EBXMOVDX,[EBX];默认DS为段基址,传送字给DXMOVCH,[EAX];默认DS为段基址,传送字节给CH

除ESP、EBP默认段寄存器为SS外,其余6个通用寄存器均默认段寄存器为DS。如操作数在默认段之外,指令中必须加段超越前缀。

寄存器间接寻址的应用场合与直接寻址的应用场合相似,当更灵活。

在这种方式下,

EA=[基址寄存器]+位移量。其中位移量一定要为常数,且跟随在操作码之后,与操作码一起存放在代码段中。①16位寻址情况下,BX和BP作为基址寄存器。BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。位移量可为8位或16位;②32位寻址情况下,8个32位通用寄存器均可作基址寄存器其中ESP、EBP以SS为默认段寄存器,其余6个通用寄存器均以DS为默认段寄存器。位移量为8位或32位。例如:MOVEAX,[BX+24];也可写成MOVEAX,24[BX]MOVECX,[EBP+50];也可写成MOVECX,50[EBP]MOVDX,[EAX+1500H];也可写成MOVDX,1500H[EAX](5)基址寻址与32位寄存器间接寻址方式相同2-47

EA=[变址寄存器]+位移量指令书写格式和寻址执行过程与基址寻址相同;区别仅在于将基址寄存器改成变址寄存器。(6)变址寻址

①16位寻址时,仅SI、DI可作变址寄存器,且默认DS作为段基址寄存器。如:MOVAX,COUNT[SI]

②32位寻址时,除ESP外的任何通用寄存器均可作变址寄存器。默认EBP以SS作段基址寄存器,其余均以DS作段基址寄存器。

MOVEAX,5[EBP]MOVECX,DATA[EAX]

基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址/变址表示数组元素的下标,可变。MOVECX,DATA[ESP]

是什么寻址方式?答案:基址寻址方式。默认段寄存器SS

变址寻址不能使用ESP在这种方式下:EA=[变址寄存器]×比例因子+位移量这种寻址方式只适于32位寻址一种情况。例如:MOVEAX,TABLE[ESI*4]

;TABLE是位移量,4是比例因子(7)比例变址寻址

比例变址寻址和基址/变址寻址的作用相似,也适用于对一维数组元素的检索。但当数组元素大小为2/4/8字节时,用它更方便、更高效。在这种寻址方式下,EA=[基址寄存器]+[变址寄存器]例如:MOVAX,[BX+SI];或写成MOVAX,[BX][SI]

MOVAX,[BP][SI]

它有16位寻址和32位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认规定与前面所述相同。

基址寄存器与变址寄存器默认的段寄存器不相同时,一般规定由基址寄存器(比如:BP,BX)来决定默认哪一个段寄存器作段基址指针。基址加变址寻址主要用于二维数组元素的检索和二重循环等。(8)基址加变址寻址在这种方式下,EA=[基址寄存器]+[变址寄存器]×比例因子它只有32位寻址一种情况。格式举例:MOVECX,[EDX*8][EAX];或MOVECX,[EDX*8+EAX]MOVAX,[EBX*4][ESI];或MOVAX,[EBX*4+ESI]

这种方式主要用于数组元素大小为2/4/8字节时的二维数组检索操作等场合。(9)基址加比例变址寻址在这种方式下:EA=[变址寄存器]+[基址寄存器]+位移量

这种方式也分16位寻址和32位寻址两种情况。变址、基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同。格式举例:MOVAX,[BX+DI+MASK]或MOVAX,MASK[BX][DI]ADDEDX,[ESI][EBP+0FFFF000H]或ADDEDX,0FFFF000H[ESI][EBP]这种寻址方式也是主要用于二维数组操作,位移量即为数组起始地址。(10)带位移的基址加变址寻址这种方式将偏移地址四元素都用上了,即:EA=[变址寄存器]×比例因子+[基址寄存器]+位移量它只有32位寻址一种情况。各种约定和默认情况同前所述。格式举例:INC[EDI*8][ECX+40];或INC[EDI*8+ECX+40]

当二维数组的数组元素大小为2/4/8字节,且数组起始地址不为0时,适于用这种寻址方式进行数组检索操作。(11)带位移的基址加比例变址寻址3.存储器寻址时的段约定访存操作类型 默认段寄存器允许超越的段寄存器偏移地址寄存器堆栈操作

SS

无(E)SP取指令代码

CS

无(E)IP源串数据访问

DS

CS、SS、ES、FS、GS(E)SI目的串数据访问

ES

无(E)DI通用数据访问

DSCS、SS、ES、FS、GS偏移地址SSCS、DS、ES、FS、GS偏移地址以(E)BP、(E)SP间接寻址的指令4.应用举例

CPUBX0100HSI0002HDS3000H30100H12H30101H34H30102H56H30103H78H31200H2AH31201H4CH31202HB7H31203H65HM

例2.1已知80486工作在实地址方式下,其中一些寄存器的内容和一些存储单元的内容如图所示,试指出下列各条指令执行后,AX中的内容。⑴MOVAX,2010H⑵MOVAX,BX⑶MOVAX,[1200H]⑷MOVAX,[BX]⑸MOVAX,1100H[BX]⑹MOVAX,[BX][SI]⑺MOVAX,1100H[BX+SI]AX=2010AX=0100HAX=4C2AHAX=3412AX=4C2AHAX=7856AX=65B7H数据传送是计算机中最基本、最常用、最重要的一类操作。如:这类指令寻址方式最丰富,除POPF外,均不影响标志寄存器的标志位。在实际程序中,它的使用频率最高。●各种初始化操作●取操作数●保存结果3.2.1数据传送类指令3.280486微处理器指令系统1.传送指令MOV指令操作:(源操作数)→目的操作数

指令格式:MOV目的操作数,源操作数寻址规定: REG/MEM/SREG,REGREG/MEM,SREG REG/SREG,MEMREG/MEM,IMM立即数通用寄存器(EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI)CS存储器段寄存器(SS、DS、ES、FS、GS)MOV指令允许的传送关系MOV指令使用说明:源操作数和目的操作数的类型必须一致。目的操作数不能为立即数。CS和(E)IP均不能用作指令的目的寄存器。段寄存器间不能直接传送,也不能直接将立即数送给段寄存器。源操作数为立即数,而目的操作数类型不确定时,要给目的操作数加类型说明。源操作数和目的操作数不能同为存储器操作数。

目的操作数,源操作数REG/MEM/SREG,REGREG/MEM,SREGREG/SREG,MEMREG/MEM,IMM⑴MOVDS,100⑵MOV[1000H],23H错。源、目的操作数不能同为存储器寻址。⑶MOV[1000H],[2000H]错。立即数不能直接赋给段寄存器。错。目的操作数长度不确定。⑷

MOVCS,AX错。不能用传送指令改变代码段寄存器。⑸

MOVAX,[0100H+BX+BP]错。地址寄存器不能同为基址寄存器。

例识别下列指令的正确性,对错误的指令,说明错误的原因。MOVAX,100MOVDS,AXMOVWORDPTR[1000H],23HMOVAX,[2000H]MOV[1000H],AX2.交换指令操作:(目的操作数)(源操作数)格式:XCHG目的操作数,源操作数

REG/MEM, REG REG,MEM

XCHGAX,CX

等价如下指令:

MOVBX,AXMOVAX,CXMOVCX,BX

注意:(1)该指令不影响标志位;(2)不允许使用段寄存器。

MOVSXECX,AL;(AL)=F8H;(ECX)F=FFFFFFF8MOVZXECX,AX;(AX)=FFF8H;(ECX)=0000FFF8H3.扩展传送指令(非8086指令)

格式:

MOVSX目的操作数,源操作数

MOVZX目的操作数,源操作数

操作:MOVSX:带符号扩展指令 MOVZX:零扩展指令特点:扩展后数的真值不变。 4.地址传送指令格式:LEA目的操作数,源操作数 REG16/REG32MEM操作:

REG16/REG32←EA

(源操作数地址偏移)装入有效地址注意:寄存器、立即数和段寄存器都不能作为源操作数。

说明:LEA指令处理变量的地址(EA)而不是变量的内容

LEA和MOV指令的比较

MOVBX,OFFSETVAL;将VAL的有效地址=>BXMOVBX,VAL;将VAL的值=>BXLEABX,VAL;将VAL的有效地址=>BXMOV指令用

OFFSET操作不能直接取数组中任意元素

的位移量,只能取数组的第一个元素的位移量,而LEA可以传送任意数组元素的位移量。如

LEADX,BETA[BX][SI]LEA的源操作数必须是存储器操作数LEA不影响F标志5.堆栈指令PUSH/POP格式:PUSH 源操作数

REG16/MEM16 REG32/MEM32操作:((E)SP)-2/4→(E)SP (源操作数)→(SS:(E)SP)注:286以上可以有立即数方式。(1)压栈指令先调整指针,然后存储数据;先压高字节后压低字节格式:POP目的操作数

MEM16/MEM32/REG16/REG32操作:([SS:(E)SP])→目的操作数 ((E)SP)+2/4→(E)SP(2)弹栈指令先传数据,后调整指针先弹低字节后弹高字节。堆栈指令的操作数只能为字或双字。8086只有字操作指令操作数是存储器寻址时,操作数长度不确定时,要用PTR运算符。PUSH和POP要成对出现,以保持堆栈平衡堆栈指令也隐含了一个目的/源操作数—堆栈。压栈顺序是先压高字节后压低字节,弹栈则是先弹低字节后弹高字节。(3)堆栈指令使用说明:

例用堆栈操作指令将BX和CX中的两个16位数(其中BX是高16位)组成32位数传送到EAX寄存器中。

PUSH BX ;

PUSH CX ;

POP EAXEAX=BX:CX解:SP1SP1-2BHBLCHCLSP1-4……SS【例】分析下列程序段的执行情况。MOVCX,3000H

MOVSP,CX;设置堆栈的底 部,MOVAX,1234H;设置AX初始值,MOVBX,5678H;设置BX初值,

PUSHAX

PUSHBX;将AX,BX内容压入堆栈

POPAX

POPBX;由堆栈弹出数据送入AX,BX中实现AX,BX寄存器内容交换POP:先传数据,后调整指针;先弹低字节后弹高字节。PUSH:先调整指针,然后存储数据;先压高字节后压低字节说明:

XLAT是一条隐含寻址的指令。隐含两个操作数:DS:(E)BX存放表基址,AL存放查表参数。使用前要给隐含操作数赋初值。6.查表指令

格式:

XLAT

操作:

((EBX)+(AL))→AL((BX)+(AL))→AL

例2.5内存中自TABLE开始的16个单元连续存放着自然数0到15的平方值(构成一个平方表),任给一整数M在XX单元中(该数为0≤M≤15),查表求M的平方值,并将结果存入YY单元中。解: LEABX,TABLE MOVAL,XX

XLAT

MOVYY,ALTABLE0+11+24+39+15225XX5►说明:I/O端口有两种寻址方式

直接寻址,寻址范围为0~255;

间接寻址,寻址范围为0~216-1。(1)输入指令►格式:IN累加器,端口AL/AX/EAX,IMM8AL/AX/EAX,DX►操作:AL/AX/EAX←(I/O端口)7.I/O指令(2)输出指令格式:OUT端口, 累加器

IMM8,AL/AX/EAXDX,AL/AX/EAX操作:(AL/AX/EAX)→I/O端口

‘T’+1‘O’+2‘M’+3‘.’+4‘.’+520+6‘R’+7‘O’+8‘S’+9‘E’+1030+11‘K’+12‘A’+13‘T’+14‘E’+15‘.’+16

25NAMESDS……例

设程序在数据段中定义的数组如下:NAMESDB'TOM..'DB20DB'ROSE'DB30DB'KATE.'DB25

请指出下列指令是否正确,如正确,A累加器中的结果是多少?8.传送指令应用举例1.MOVBX,OFFSETNAMESMOVAL,[BX+5](AL)=[NAMES+5]=202.MOVAX,WORDPTRNAMES+1

(AX)=[NAMES+1]=‘MO’=4D4FH

‘T’+1‘O’+2‘M’+3‘.’+4‘.’+520+6‘R’+7‘O’+8‘S’+9‘E’+1030+11‘K’+12‘A’+13‘T’+14‘E’+15‘.’+16

25NAMESDS……3.MOVBX,6MOVSI,5LEADI,NAMES[BX][SI]MOVAL,[DI](DI)=NAMES偏移地址+(BX)+(SI)=NAMES偏移地址+11(AL)=[NAMES+11]=‘K’=4BH它的操作结果一般会影响标志寄存器中的状态标志位,如ZF、CF、SF、OF、AF、PF等。3.2.2算术运算类指令1.加法/减法指令

操作:

ADD:(目的)+(源)→目的

SUB:(目的)-(源)→目的

ADC:(目的)+(源)+CF→目的

SBB:(目的)-(源)-CF→目的目的操作数,源操作数REG,REG/MEM/IMMMEM,REG/IMM

格式:

ADDSUB

ADCSBB列3.12已知AL=0C1H,BL=7FH.

SUBAL,BL人工计算:11000001(AL)-01111111(BL)=0100001042HAL=42H,ZF=0,SF=0,CF=0,AF=1,PF=1,OF=1[负-正]=正,或C2=0,C1=1

对于无符号数,CF=0,无溢出;对于有符号数,OF=1,溢出。

机器计算过程:

11000001+10000001;补码,BL求反加1=101000010;42H根据补码溢出判断标准,C2=1,C1=0,溢出;AL=42H,ZF=0,SF=0,CF=0,AF=1,PF=1,OF=1

用补码加法实现减法时,CF,AF需要取反。X34H+112H+278H+356HYEAH+13FH+233H+3A0H解:⑴用8086指令MOVAX,YSUBX,AX;低16位字数据相减

MOVAX,2[Y]SBB2[X],AX;高16位字数据相减⑵用80386/486指令

MOVEAX,DWORDPTRYSUBDWORDPTRX,EAX两个32位双字数据X、Y定义如下:

XDW1234H,5678H;X=56781234YDW3FEAH,A033H;Y=33A03FEA请编写计算X=X-Y的程序段(低位在前)例特殊加减法指令INC:(目的操作数 )+1→目的操作数DEC:(目的操作数)+1→目的操作数目的操作数:寄存器或存储器影响状态标志:OF,SF,ZF,AF,PF。不影响CFINCSIINCWORDPTR[SI]INCBYTEPTR[BX][SI]DECECX加法/减法指令使用说明:ADD/SUB指令用于单个字节/字/双字数的加/减法运算;ADC/SBB指令则常用于多精度或多字节/多字/多双字数的加/减法运算。INC/DECREG/MEMADD/SUBREG/MEM,1两者都执行加1/减1操作,但前者不影响进位,而后者影响。指令的异同:2.整数变反指令(求补)格式:

NEG目的操作数

REG/MEM操作:0-(目的操作数)→目的操作数标志:OF,SF,ZF,ZF,PF,CF应用:

常用于求负数的绝对值。解:

TESTAX,8000H;测试符号位JZNEXTNEGAXNEXT:HLT

求AX中存放的有符号数的绝对值。3.比较指令格式:CMP目的操作数,源操作数

REG,REG/MEM/IMM MEM,REG/IMMCMP与SUB指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。操作:(目的操作数)-(源操作数),根据操作结果修改状态标志,但不改变目标操作数值。

【例】CMPAL,CL

指令执行前,AL=68H,CL=9AH。

指令执行:

AL=68H,CL=9AH,CF=1,ZF=0,SF=1,AF=1,OF=1,PF=0。

作为无符号数比较,被减数小于减数,不够减,有借位,CF=1。作为有符号数时,C2C1=10,结果已超出有符号数所能表示的范围,因此OF=1,有溢出。单操作数乘法指令格式:MUL/IMUL

源操作数

REG/MEM操作:MUL和IMUL分别为无符号数和有符号数乘法指令,两种指令除操作数类型不同外,操作完全相同:字:(AX)×(源操作数)→DX:AX双字:(EAX)×(源操作数)→EDX:EAX字节:(AL)×(源操作数)→AX源操作数4.乘法指令单操作数乘法指令的被乘数是隐含的(在AL/AX/EAX中),而结果长度一定是被乘数/乘数的二倍(在AX/DX:AX/EDX:EAX中)。源操作数不能为立即数。源操作数为存储器操作数,且类型不能确定时,要显式说明操作数类型。要根据是有符号数还是无符号数,分别选用IMUL或MUL指令指令执行影响CF和OF标志.若指令执行后,结果的高一半是有效数值位,则CF=OF=1,否则CF=OF=0。乘法指令使用说明:例2.11解:⑴MULBL指令完成AL和BL中的两个无符号数相乘:AH含有效数字,∴OF=1、CF=1。(AX)=0A8CH(AL)96H×(BL)12H12C+96若(AL)=96H,(BL)=12H,求分别执行MULBL和IMULBL指令后的结果及OF、CF状态。AH含有效数字,∴OF=1、CF=1。解:

IMUL执行有符号数乘法,此时AL=96H中的数是负数,真值为-6AH,即:用补码表示:(AX)=F88CH(AX)=-774H(AL)–6AH×(BL)12HD4+6A5.除法指令格式:DIV∕IDIV源操作数(除数)

REG/MEM操作:按源操作数类型:状态标志不确定字节:(AX)/(源),商存于AL中,余数存于AH字:(DX:AX)/(源),商存于AX中,余数存于DX双字: (EDX:EAX)/(源),商在EAX中,余数在EDX说明:

除法指令的被除数是隐含的,且长度一定是除数的二倍(在AX,DX:AX,EDX:EAX中)。使用除法指令常要扩展被除数长度。扩展时无符号数一般用:

MOVZXAX,ALMOVDX,0MOVEDX,0

有符号数一般用:CBW/CWD/CDQ。

CBW:等价指令MOVSXAX,ALCWD:AX带符号扩展→DX:AX

源操作数无立即数。

MOVAX,a①;②;a×b在CX:BX中③

MOVAX,c④;c在DX:AX中⑤;a×b+c在DX:AX中⑥⑦;(a×b+c)/a,商存入S⑧IMULbMOVCX,DXMOVBX,AXCWDADDAX,BXADCDX,CXIDIVaMOVS,AX

例2.12

下列程序段完成S=(a×b+c)/a的运算,其中变量a、b、c和S均为带符号的字数据,结果的商存入S,余数则不计,填空完成下列程序。格式:AAA∕AAS∕AAM∕AAD∕DAA∕DAS功能:AAA/AAS:

未组合BCD加法/减法调整指令,隐含操作数为AL。DAA/DAS:

组合BCD加法/减法调整指令,隐含操作数为AL。6.BCD调整指令例解:MOVAL,BYTEPTRXADDAL,BYTEPTRY;低位相加

DAA;BCD码调整

MOVBYTEPTRX,AL;保存低位结果

MOVAL,BYTEPTRX[1];取字变量的高字节

ADCAL,BYTEPTRY[1];高位相加

DAAMOVBYTEPTRX[1],AL;X=7412两个4位压缩BCD码定义如下:

XDW3578H

YDW3834H

请编写计算X+Y的程序段。多字节BCD加法/减法只能用带进位/借位的字节加法/减法指令实现!

功能:分别按位进行逻辑“与”、“或”、“异或”、“测试”和“非”。◆格式:AND

OR

XOR

TEST

目标操作数,源操作数

REG,REG/MEM/IMMMEM,REG/IMM

NOT目标操作数

REG/MEM3.2.3逻辑运算与移位指令1.逻辑运算指令ANDAL,DATAORAL,DATAXORAL,DATANOTDATANEGDATAANDAL,0FHORAL,01HXORAL,0FFHTESTAL,80H设AL=0C4H=11000100B

(DATA)=5AH=01011010B(AL)=01000000(AL)=11011110(AL)=10011110(DATA)=10100101(DATA)=10100110(AL)=00000100(AL)=11000101(AL)=00111011(AL)=原值CF=OF=0,ZF=0,SF=1,PF=0使用说明:②编程时要根据操作合理选用指令,一般:

●对某些二进制位‘清零’用逻辑‘与’指令AND;●对某些二进制位‘置位’用逻辑‘或’指令OR;●对某些二进制位‘求反’用逻辑‘异或’指令XOR,全部位‘求反’用逻辑‘非’指令NOT。①逻辑运算指令除NOT指令外,都影响标志寄存器的状态标志位,且逻辑运算后进位标志CF一定为0,所以逻辑运算指令常用于清0和清进位。③AND指令与TEST指令的区别:相同:都执行按位“与”操作,对状态标志位的影响相同,不同:

AND改变目标操作数的值,

TEST并不改变目标操作数的值。所以TEST指令与CMP指令的用法类似,用于产生按位测试的条件码。

例已知寄存器DX:AX的内容为32位带符号数,编写一段程序使DX:AX的内容成为原来数据的绝对值。 解:TESTDX,8000H;测试符号位,产生状态

JZEXIT;符号位=0,结束

NEGDX;求绝对值

NEGAXSBBDX,0EXIT:HLT2.移位指令

移位指令包括:算术移位指令(SAL/SAR)逻辑移位指令(SHL/SHR)循环移位指令(ROR/ROL/RCR/RCL)双精度移位指令(SHLD/SHRD)2-113逻辑移位算术移位算术移位只对带符号数进行移,在移位过程中必须保持符号位不变。逻辑移位是对无符号数移位,移位时,总是用0来填补已空出的数位。每左移一位,相当于将原数据乘以2;SHL=SAL每右移一位,相当于将原数据除以2。SHR(无符号数);SAR(有符号数)根据移位操作的结果置标志寄存器中的状态标志(AF位除外)。若移位的次数是1:

SHL,SAL移位后的结果使最高位(符号位)发生变化(CF≠SF),则将溢出标志OF置1;SAR:OF=0;SHR:OF=右移动前的最高位;若移次数大于1时,OF标志无效。逻辑移位算术移位ROL和ROR指令在执行时,没有把CF套在循环中,常称为小循环移位。RCL和RCR指令在执行时,连同CF一起循环移位,称为大循环移位。以上四条指令仅影响标志位CF和OF。循环移位指令

例试编写用移位和加法指令完成计算:(EAX)×9/4的程序段。

解:

(EAX)×9/4=[(EAX)×8+(EAX)]/4MOVEBX,EAX;保存EAXSAL/SHLEAX,3;(EAX)×8→EAXADD EAX,EBX;(EAX)×8+(EAX)→EAXSAR/SHR

EAX,2;(EAX)×9/4→EAX串操作约定:

用DS:(E)SI寻址源串,允许段超越;

用ES:(E)DI寻址目的串,但ES段不能超越;

由DF标志位决定(E)SI,(E)DI指针增减:DF=0,递增;DF=1,递减;(CLD,STD)指令执行完成后,(E)SI,(E)DI指向下一个单元。

由串长度(字节、字、双字)决定指针增/减量大小;

带重复前缀时,用(E)CX作重复计数器。

3.2.4串操作类指令1.串传送指令

格式:MOVSB/MOVSW/MOVSDMOVS 目的串,源串

MEM,MEM操作:将DS:[(E)SI]所指的源串中的一个字节、字或双字传送到ES:[(E)DI]指的目的串中,然后,按DF指示和操作数长度修改(E)SI,(E)DI指针,即:[ES:(E)DI]←([DS:(E)SI])(E)SI←((E)SI)±1/2/4;修改源指针(E)DI←((E)DI)±1/2/4;修改目的指针说明:应用:用于数据块传送该指令允许加重复前缀REP。即:REPMOVSB/MOVSW/MOVSD由(E)CX控制串传送指令MOVS的执行次数。相当于指令序列:

AGAIN:MOVSB/MOVSW/MOVSDLOOPAGAIN

例2.18编写将数据段中自AREA1开始的100个字数据搬到附加段中以AREA2开始的数据区中的程序段。解:①用MOV指令

LEASI,AREA1

LEADI,AREA2

MOVCX,100

DONE:MOV AX,[SI]

MOV ES:[DI],AX

ADD SI,2

ADD DI,2

LOOP DONE②用基本串传送指令

LEASI,AREA1

LEADI,AREA2

MOVCX,100

CLD

DONE:MOVSW

LOOPDONE

用重复串传送指令

LEASI,AREA1 LEADI,AREA2 MOVCX,100 CLD REPMOVSW格式:LODSB/LODSW/LODSDLODS 源串

MEM说明:允许加重复前缀REP。操作:([DS:(E)SI])→AL/AX/EAX

按DF指示和操作数长度修改(E)SI指针应用:用于取数据块中元素值2.串装入指令3.串存储器指令

格式:STOSB/STOSW/STOSD STOS 目的串

MEM

说明:允许加重复前缀REP。操作:

AL/AX/EAX→([ES:(E)DI])

按DF指示和操作数长度修改(E)DI指针应用:用于数据块初始化。LODS和STOS结合常用于数据块传送。4.串扫描指令

格式:

SCASB/SCASW/SCASD SCAS 目的串

MEM 说明:允许加重复前缀REPE或REPNE。扫描次数由(E)CX指定。重复条件:REPE:IF((E)CX)≠0ANDZF=1THEN重复串扫描REPNE:

IF((E)CX)≠0ANDZF=0THEN重复串扫描,即:只要串元素不等且未到达串尾,那么就重复执行。

操作:(AL/AX/EAX)-([ES:(E)DI]),影响标志,但不改变目的串内容。按DF指示和操作数长度修改(E)DI指针。应用:用于在串数据中查找关键字。

MOVSI,2170H;搬移 ①

MOVCX,100HCLD② MOVDI,1000H;查找

MOVCX,100H ③

JNZK1 ④MOVBYTEPTR[DI],20H;ASCII码20H为空

K1: …MOVDI,1000HREPMOVSBREPNESCASBDECDI;回调指针例用串操作指令将100H个数的字符从2170H处搬到1000H处,然后从中检索与AL中字符相同的单元,并将此单元换成空格符,程序段如下,请把所缺指令填上。列:对内存中的某给定的数据块或字符串进行搜索扫描,看其中有无关键字,若有,将搜索次数和存放关键字的地址记录下来。分析:主体指令SCAS。要搜索的关键字存放在AL/AX/EAX中,被搜索实地址存放在ES:DI中;搜索数据长度存放在CX/ECX中;利用重复前缀REPNE:在没有成功匹配前,继续搜索;

志位ZF=1,表示成功搜索到需要的关键字;INC5.串比较指令格式:

CMPSB/CMPSW/CMPSDCMPS 源串,目的串

MEM,MEM说明:允许加重复前缀REPE或REPNE。操作:([DS:(E)SI])-([ES:(E)DI]),影响标志,但不改变源串和目的串内容。按DF指示和操作数长度修改(E)DI、(E)SI指针应用:常用于比较两个串数据是否匹配。包括以下5种指令:无条件转移指令(JMP)过程调用/返回指令(CALL/RET)条件转移指令(JCC)

循环控制指令(LOOP)中断指令(INT)无条件向目标地址转移,可分为段内、段间转移,段内、段间转移又可分别分为直接和间接转移。实现子程序调用或返回,也可归入无条件转移指令中。根据指令执行后标志寄存器的状态进行转移,通常和CMP或TEST指令组合使用。控制循环程序的循环,实质上也是条件转移指令,在CX(ECX)中预置循环次数。产生一个由8位立即数指定中断号的软中断和处理溢出中断。这类指令的共同特点是可改变程序的正常执行顺序,使之转移。而改变程序的执行顺序,本质上就是要改变CS

温馨提示

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

评论

0/150

提交评论