【教学课件】第二章微处理器和指令系统.ppt

上传人:牧羊曲112 文档编号:5661969 上传时间:2023-08-07 格式:PPT 页数:183 大小:819KB
返回 下载 相关 举报
【教学课件】第二章微处理器和指令系统.ppt_第1页
第1页 / 共183页
【教学课件】第二章微处理器和指令系统.ppt_第2页
第2页 / 共183页
【教学课件】第二章微处理器和指令系统.ppt_第3页
第3页 / 共183页
【教学课件】第二章微处理器和指令系统.ppt_第4页
第4页 / 共183页
【教学课件】第二章微处理器和指令系统.ppt_第5页
第5页 / 共183页
点击查看更多>>
资源描述

《【教学课件】第二章微处理器和指令系统.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第二章微处理器和指令系统.ppt(183页珍藏版)》请在三一办公上搜索。

1、1,第二章 微处理器和指令系统,2.1 Intel系列微处理器概述2.2 Intel 80486微处理器体系结构2.3 80486的数据类型与寻址方式2.4 80486的汇编级指令系统2.5 关于指令系统的说明,2,2.1 Intel系列微处理器概述,Intel 8086/8088 Intel 80286 Intel 80386/80486 Pentium(80586),3,2.1.1 Intel 8086/8088,8088 是准16位微处理器,8086/8088除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。,8086 是全16位微处理器,在80

2、86/8088的设计中,引入了两个重要的结构概念:指令流水线 存储器分段,数据总线和地址总线的低16位/低8位分时复用。,这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。正是这两个概念的引入,使8086/8088比原来的8位MPU在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。,4,2.1.1 Intel 8086/8088,8086/8088 MPU由两个独立的处理单元构成:总线接口单元BIU和执行单元EU。,5,2.1.1 Intel 8086/8088,当EU从指令队列中取出指令时,BIU便从内存中取出后续的代码放入队列中;当EU需要数据时,BIU根据EU输出

3、的地址,从指定的内存单元或外设中取出数据供EU使用;当运算结束时,BIU将运算结果送给指定的内存单元或外设。,EU控制电路从指令队列取出指令代码,经译码发出相应的控制信号;数据在ALU中进行运算;运算结果的特征保留在标志寄存器(FLAGS)中。,EU-负责分析和执行指令,BIU-负责执行所有的“外部总线”操作,指令队列的存在使EU和BIU并行工作,取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,减少了CPU等待时间,提高了CPU的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。,6,2.1.1 Intel 8086/8088,4个段寄存器为8086/8088采用存储器

4、分段管理提供了主要硬件支持。通过分段管理,把1MB可寻址的物理存储空间分成若干个逻辑段,每段大小为64KB。段的起始单元地址叫段基址,存放在段寄存器中。通过4个段寄存器,CPU每次可同时对4个段进行寻址。且分段方式不唯一,各段之间可以连续、分离、部分重叠或完全重叠,具体取决于对各个段寄存器的预置内容。,7,2.1.1 Intel 8086/8088,采用分段管理,存储器地址有物理地址和逻辑地址之分。,物理地址是1MB存储空间中的某一单元地址,用20位地址码表示,CPU访问存储器时,地址总线上送出的就是物理地址。逻辑地址在编程时采用,由段基址和偏移地址组成,两者均为16位。,8,2.1.2 In

5、tel 80286,(1)内部有4个独立的可并行操作单元:执行单元(EU)、总线单元(BU)、指令单元(IU)和地址单元(AU),可实现4级流水线作业;(2)地址总线和数据总线完全分开;(3)存储空间有实地址和保护虚拟地址两种工作方式。两者的实地址空间分别为1MB和16MB;(4)在保护方式下,4个段寄存器装入的不再是段基址,而是指向段描述符表中某个段描述符的索引值,称为段选择符。,80286是增强型标准16位微处理器。与8086/8088相比,它结构上的改进和性能上的提高主要体现在4方面:,总之,80286主要是增加了多用户、多任务系统所必需的任务转换、虚拟存储器管理和多种保护功能,不仅提高

6、了运算速度,而且可支持多用户、多任务操作。但其优越性必须在多任务操作系统的支持下才能充分发挥。,9,2.1.3 Intel 80386/80486,1.内部寄存器数量明显增加,并可进行64位的数据运算,具有全32位数据处理能力。2.片内存储管理部件可实现段页式存储管理,比80286可提供更大的虚拟存储空间和物理存储空间。3.比80286新增了一种保护模式下的工作方式,即虚拟8086方式。4.80486的指令流水线增加到了6级。5.提供了32位外部总线接口,最大数据传输速率显著提高。6.运算速度大大加快。,80386/80486是针对多用户和多任务的应用而推出的32位微处理器。与80286相比,

7、80386/80486在结构和性能上的主要特点如下:,10,2.1.4 Pentium微处理器(80586),1.采用超标量体系结构,内含两条指令流水线。2.内置的浮点运算部件采用超流水线技术。3.增加了分支指令预测。4.内置了指令和数据两个独立的超高速缓存器,避免了预取指令和数据可能发生的冲突。5.采用64位外部数据总线。6.引入了大型机中采用的内部错误检测、功能冗余检验和错误报告等自诊断功能。7.进行了更多的可测性设计。8.提供了独特的性能监察功能,以利于软、硬件产品的优化和升级。9.提供了灵活的存储器页面管理。,Pentium是一种高性能的64位微处理器。其对80486作了下列重大改进:

8、,11,2.2 Intel 80486微处理器体系结构,80486的体系结构特点 80486的内部结构与内部寄存器 80486的三种工作方式及转换 80486的外部引脚信号,12,2.2.1 80486的体系结构特点,1.采用单倍的时钟频率,即CPU的CLK端输入的外部时钟频 率就是其内部的工作时钟频率。2.内部包含有8K字节的指令/数据合用型高速缓存。3.内部包含了相当于增强型80387功能的浮点协处理器(FPU)。4.对使用频率较高的基本指令,改为硬件逻辑直接控制,并在指 令执行单元采用了RISC技术和流水线技术。5.采用突发式总线传输方式。6.内部数据总线宽度有32位、64位和128位多

9、种,分别用于不同 单元之间的数据通路。7.对某些内部寄存器中部分位的内容进行了变动和增加。8.面向多处理器结构,增加了总线监视功能和支持多机操作的指令。,80486的特点主要表现在:,2.2.2 80486的内部结构与内部寄存器,内部结构构成,总线接口单元指令预取单元指令译码单元指令执行单元段管理单元页管理单元高速缓存单元浮点运算单元,1.内部结构,15,基本寄存器系统级寄存器调试和测试寄存器浮点寄存器,2.2.2 80486的内部结构与内部寄存器,2.内部寄存器 80486的内部寄存器除FPU部分外,与80386完全相同,按功能可分为4类:,16,2.2.2 80486的内部结构与内部寄存器

10、,1)基本寄存器,17,通用寄存器,为了与8086/8088兼容,它们的低16位 可以单独访问,并以同8086/8088中相 同的名称命名:AX、BX、CX、DX、SI、DI、BP、SP。,2.2.2 80486的内部结构与内部寄存器,8个32位通用寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP,其中AX、BX、CX、DX 还可进一步分成 两个8位寄存器单独访问。,18,指令指针寄存器(EIP),EIP用于保存下一条待预取指令相对于代码段基址的偏移量。,2.2.2 80486的内部结构与内部寄存器,19,2.2.2 80486的内部结构与内部寄存器,标志寄存器(EFLA

11、GS),32位的EFLAGS包含三种标志:,状态标志(S)-报告算术/逻辑运算指令执行后的状态;控制标志(C)-仅含一个标志DF,用于控制串操作指令的地址改变方向;系统标志(X)-用于控制I/O、屏蔽中断、调试、任务转换和控制保护方式与虚拟8086方式间的转换。,20,2.2.2 80486的内部结构与内部寄存器,21,2.2.2 80486的内部结构与内部寄存器,段寄存器,80486有6个段寄存器:,22,2.2.2 80486的内部结构与内部寄存器,段寄存器的结构,段选择器是编程者可直接访问的,而描述符高速缓存器则是编程者不能访问的。,段寄存器由16位的段选择器和64位的描述符高速缓存器组

12、成。,23,2.2.2 80486的内部结构与内部寄存器,关于对段寄存器的说明:,实地址方式和虚拟8086方式下,段选择器就是段寄存器,它保存的是逻辑段基址的高16位,将它的内容左移4位即可得到实际段基址,而不必使用描述符高速缓存器。,在保护虚地址方式下,为了描述每个段的基址、属性和边界,为每个段定义了一个描述符。操作系统使用的各任务公用的段描述符放在一起构成全局描述符表GDT;某个任务专用的段描述符放在一起构成局部描述符表LDT。,24,2.2.2 80486的内部结构与内部寄存器,25,为了说明一个段的描述符在哪个表中,表的序号是多少以及特权的高低,为每个段定义了一个16位的选择符,存于段

13、选择器中,其格式为:,2.2.2 80486的内部结构与内部寄存器,26,将一个选择符装入一个段选择器时,处理器将自动从GDT或LDT中找到其对应的描述符装入相应描述符高速缓存器中。,2.2.2 80486的内部结构与内部寄存器,以后,每当访问存储器时,与所用段相关的段描述符高速缓冲器就自动参与该次存储器访问操作。转换关系:线性地址=段描述符高速缓存器中段基址+偏移地址,27,2)系统级寄存器,2.2.2 80486的内部结构与内部寄存器,包括4个控制寄存器和4个系统地址寄存器。只能由特权级0的程序访问。,控制寄存器:,28,2.2.2 80486的内部结构与内部寄存器,系统地址寄存器(只在保

14、护方式下使用,所以又叫保护方式寄存器):,其中GDTR和LDTR分别用来存放GDT和LDT的32位线性基地址等内容;IDTR用来存放中断描述符表的基址和界限;TR用来存放任务状态段(TSS)的基址、界限和其他属性。,29,2.2.2 80486的内部结构与内部寄存器,3)调试和测试寄存器,8个32位可编程调试寄存器;5个32位测试寄存器。,30,2.2.2 80486的内部结构与内部寄存器,4)浮点寄存器,80486的FPU中含有13个浮点寄存器:,8个80位浮点数据寄存器R0R7-用作固定寄 存器组或硬件堆栈;1个16位标志字寄存器-用来标记每个数据寄存 器的内容;1个16位控制寄存器-用于

15、提供FPU的若干处理选 择项;1个16位状态寄存器-用于反映FPU的总状态;2个48位的指令、数据指针寄存器-可为用户编 写错误处理程序提供指令、数据指针。,31,2.2.3 80486的三种工作方式及转换,.IRETD指令.任务转换,32,2.2.4 80486的外部引脚信号(80486 CPU总线),33,2.3 80486的数据类型与寻址方式,数据类型寻址方式操作数宽度和地址宽度的确定,34,2.3.1 数据类型,80486在其内部定点处理单元CPU和浮点处理单元FPU的支持下,共可处理7类数据:,1.无符号二进制数2.带符号的二进制定点整数3.浮点数4.BCD码数5.串数据6.ASCI

16、I码数据块7.指针数据类,35,2.3.1 数据类型,1.无符号二进制数(序数),这类数有3种,受CPU支持:,字节:任何逻辑地址上的8位相邻位串。字:任何字节地址开始的2个相邻字节。低字节 地址为该字地址。双字:任何字节地址开始的2个相邻字,即4个 相邻字节。最小字节地址为双字的地址。,36,2.带符号的二进制定点整数(整数),2.3.1 数据类型,这类数均以补码表示,有8位数(字节)、16位数(字)、32位数(双字)、64位数(4字)四种。,CPU支持前3种,FPU支持后3种。,37,2.3.1 数据类型,3.浮点数(实数),这类数由FPU支持,有单精度、双精度和扩展精度三种形式:,38,

17、2.3.1 数据类型,关于浮点数格式的两点说明:,(1)3种浮点数的有效数字段都做了规格化处理,其整数位总是1。但需注意,只有扩展精度格式的整数位1真的存在,其余两种格式下整数位1是隐含的,并不真的被存放起来。,(2)格式中的阶码是以偏置形式存放的(即其阶码要加上一个常数偏置值才是格式阶码),且偏置后的格式阶码恒为正数。这样有利于简化浮点数大小的比较过程:对两个相同格式的实数进行比较时,就像对两个无符号二进制整数进行比较一样方便,当从高位到低位比较两个实数阶码时,若某位的阶码有大小之分,就不用再比较下去了。,39,2.3.1 数据类型,由于三种浮点数格式的阶码位数不同,其数值范围也不同。为了保

18、证统一偏置后的阶码恒为正数,其偏置值必然也为不同正值。,在作了上述偏置处理后,进行浮点数运算时,一个数的真阶码需要将其格式阶码减去偏置值来获得。,40,4.BCD码数,BCD码数有压缩BCD码数和非压缩BCD码数两种。CPU两种数都支持;FPU只支持压缩BCD码数,且最大长度为80位,最多可处理20位BCD码数。,2.3.1 数据类型,41,2.3.1 数据类型,5.串数据,包括位串、字节串、字串和双字串,仅CPU支持。位串是从任何字节的任何位开始的相邻位的序列,最长可达232-1位。字节/字/双字串是字节/字/双字的相邻序列,最长可达232-1字节。,42,2.3.1 数据类型,6.ASCI

19、I码数据类,包括ASCII码字符串和ASCII码数(0F)两种。,7.指针数据类,包括近指针和远指针两种:,近指针即32位指针,是一个32位的段内偏移量,段内寻址用。远指针即48位指针,由16位选择符和32位偏移量组成,用于跨段访问。,43,关于数据类型的两点说明:,2.3.1 数据类型,字和双字数据操作的对准和不对准 一般应尽可能将字操作对准于偶地址,将双字操作对准于4的 整数倍地址。但也允许不对准。对准和不对准获得的数据传递速度不一样:对准的字和双字可 一次传递完,而未对准时需几次才能传递完。,(2)采用低端低地址方式存储字和双字数据 字数据被存储在两个相邻的字节单元之中,低字节在低地址单

20、 元,高字节在高地址单元;双字数据存储在四个连续字节单元中,最低字节在最低地址单 元,最高字节在最高地址单元。字或双字数据的地址是指最低字节所在的单元地址。,44,2.3.2 寻址方式,1.寻址方式和有效地址概念,寻址方式:寻找指令中操作数地址的方式。,直接包含在指令中,即指令的操作数部分就是操作数本身。这种操作数叫立即数,对应的指令寻址方式称为立即数寻址。,包含在CPU的某个内部寄存器中。这时指令中的操作数部分是CPU的一个寄存器,这种指令寻址方式称为寄存器寻址。,在存储器中。这时指令的操作数部分包含着该操作数所在的存储器地址。这种指令寻址方式称为存储器寻址。,操作数所在地址有三种可能:,4

21、5,2.3.2 寻址方式,在8086系列MPU中,内存实际地址(PA)由段基地址和段内偏移地址两部分组成。,EA=基址+(变址比例因子)+位移量,其中段内偏移地址又叫有效地址(EA)。,46,16位和32位寻址时的四元素定义,2.3.2 寻址方式,47,物理地址,逻辑(虚拟)地址,2.3.2 寻址方式,48,2.3.2 寻址方式,2.11种寻址方式,偏移地址四元素可优化组合出9种存储器寻址方式,加上立即数寻址和寄存器寻址,80486共有11种寻址方式:,(1)立即数寻址(2)寄存器寻址(3)直接寻址(4)寄存器间接寻址(5)基址寻址(6)变址寻址(7)比例变址寻址(8)基址加变址寻址,(9)基

22、址加比例变址寻址(10)带位移的基址加变址寻址(11)带位移的基址加比例变址寻址,49,(1)立即数寻址,2.3.2 寻址方式,在这种寻址方式下,操作数作为立即数直接存在指令中,可为8位、16位或32位。,以第3条指令为例,动画演示立即数寻址过程。,注意:(1)源和目的操作数字长应一致;(2)立即数只能作为源操作数。,50,2.3.2 寻址方式,(2)寄存器寻址(寄存器直接寻址),在这种方式下,操作数包含在指令规定的8位、16位或32位寄存器中。,这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。,注意:(1)字节寄存器只有8个;(2)源和目的操作数的字长应一致;(3)CS不能用MO

23、V改变。,51,2.3.2 寻址方式,(3)直接寻址(存储器直接寻址),在这种方式下,指令中的操作数部分直接给出操作数有效地址EA,它和操作码一起放在存储器代码段中,可以是16位或32位整数。但操作数一般在数据段DS中。,例:MOV AX,DS:3000H,设DS=5000H,执行过程见动画演示,52,2.3.2 寻址方式,直接寻址主要用于单个操作数的相对寻址场合(如简单的标量操作数寻址和静态分配数组的起始地址寻址等)。,53,2.3.2 寻址方式,(4)寄存器间接寻址,在这种方式下,操作数在存储器中,但存储器有效地址EA放在寄存器中,即 EA=寄存器。,寄存器的使用规定在16位寻址和32位寻

24、址时不一样。,54,2.3.2 寻址方式,16位寻址时,偏移地址放在SI、DI、BP或BX中。这时又有两种段默认情况:,若以SI、DI、BX间接寻址,则默认操作数在DS段中。例如:MOV AX,SI;默认DS为段基址若以BP间接寻址,则默认操作数在SS段中。例如:MOV AX,BP;默认SS为段基址,如果操作数不在上述规定的默认段,而是在其他段,则必须在指令中相应的操作数前加上段超越前缀。例如:,MOV AX,ES:SIMOV AX,DS:BP,55,2.3.2 寻址方式,32为寻址时,8个32位通用寄存器均可用作寄存 器间接寻址。,除ESP、EBP默认段寄存器为SS外,其余6个通用寄存器均默

25、认段寄存器为DS。如操作数在默认段之外,指令中必须加段超越前缀。,寄存器间接寻址的应用场合与直接寻址的应用场合相似,但更灵活。,56,2.3.2 寻址方式,(5)基址寻址,在这种方式下,EA=基址寄存器+位移量。其中位移量一定要为常数,且跟随在操作码之后,与操作码一起存放在代码段中。,16位寻址情况下,BX和BP作为基址寄存器。在缺省段超越前缀时,BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。位移量可为8位或16位;32位寻址情况下,8个32位通用寄存器均可作基址寄存器,其中ESP、EBP以SS为默认段寄存器,其余6个通用寄存器均以DS为默认段寄存器。位移量为8位或32位。,例如:M

26、OV EAX,BX+24;也可写成MOV EAX,24BXMOV ECX,EBP+50;也可写成MOV ECX,50EBPMOV DX,EAX+1500;也可写成MOV DX,1500EAX,57,2.3.2 寻址方式,(6)变址寻址,在这种方式下,EA=变址寄存器+位移量。指令书写格式和寻址执行过程与基址寻址相同,区别仅在于将基址寄存器改成变址寄存器。,58,2.3.2 寻址方式,基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址/变址表示数组元素的下标,可变。,59,2.3.2 寻址方式,(7)比例变址寻址,比例变址寻址和基址/变址寻址的作用相似,也适用

27、于对一维数组元素的检索。但当数组元素大小为2/4/8字节时,用它更方便、更高效。,比例变址寻址方式的执行过程如动画演示。,60,2.3.2 寻址方式,它有16位寻址和32位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认规定与前面所述相同,但一种寻址方式中既有基址寄存器又有变址寄存器,而两个寄存器默认的段寄存器又不相同时,一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针。,例如:MOV EAX,EBPECX;由EBP决定默认SS为段基址寄存器,基址加变址寻址主要用于二维数组元素的检索和二重循环等。,61,2.3.2 寻址方式,(9)基址加比例变址寻址,在这种方式下,E

28、A=变址寄存器比例因子+基址寄存器,它只有32位寻址一种情况。格式举例:,MOV ECX,EDX*8EAX;或MOV ECX,EDX*8+EAXMOV AX,EBX*4ESI;或MOV AX,EBX*4+ESI,这种方式主要用于数组元素大小为2/4/8字节时的二维数组检索操作等场合。,62,2.3.2 寻址方式,这种方式也分16位寻址和32位寻址两种情况。变址、基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同。,以第(1)条指令为例,执行过程如动画演示。,这种寻址方式也是主要用于二维数组操作,位移量即为数组起始地址。,63,2.3.2 寻址方式,当二维数组的数组元素大小为2/4/8字节

29、,且数组起始地址不为0时,适于用这种寻址方式进行数组检索操作。,64,2.3.2 寻址方式,3.存储器寻址时的段约定,访存操作类型 默认段寄存器 允许超越的段寄存器 偏移地址寄存器,堆栈操作 SS 无(E)SP,取指令代码 CS 无(E)IP,源串数据访问 DS CS、SS、ES、FS、GS(E)SI,目的串数据访问 ES 无(E)DI,通用数据访问 DS CS、SS、ES、FS、GS 偏移地址,以(E)BP、(E)SP间接寻址的指令,SS,CS、DS、ES、FS、GS,偏移地址,65,2.3.2 寻址方式,4.应用举例,例2.1 已知80486工作在实地址方式下,其中一些寄存器的内容和一些存

30、储单元的内容如图2.1所示,试指出下列各条指令执行后,AX中的内容。,MOV AX,2010H,MOV AX,BX,MOV AX,1200H,MOV AX,BX,MOV AX,1100HBX,MOV AX,BXSI,MOV AX,1100HBX+SI,LEA AX,SI,66,2.3.2 寻址方式,例2.2 假定80486工作在实模式下,(DS)=1000H,(SS)=2000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,变量TABLE的偏移地址为0100H。请指出下列指令的源操作数字段是什么寻址方式?它的有效地址(EA)和物理地址(PA)分别是多少?,MOV AX,1

31、234H MOV AX,TABLE MOV AX,BX+100H MOV AX,TABLEBPSI,67,2.3.3 操作数宽度和地址宽度的确定,操作数宽度和地址宽度与工作方式直接相关,还与指令中是否加这两种宽度的超越前缀有关。,68,2.3.3 操作数宽度和地址宽度的确定,注意:,(1)在实地址方式下,使用地址宽度前缀不能使偏移量超过FFFFH,否则将会导致一个一般保护异常.,(2)80486/80386的操作数宽度除了16位(字)和32位(双字)两种外,还有一种8位(字节)宽度。首先由指令操作码中的W域决定是8位字节操作数(W=0)还是16位字和32位双字操作数(W=1);在W=1时,再由

32、段描述符中的D位值来确定是16位操作模式还是32位操作模式。,69,2.4 80486的汇编级指令系统,80486指令系统概述,80486指令格式,80486的指令简介,几类常用指令详解,70,2.4.1 80486指令系统概述,80486的指令系统是在8086指令系统的基础上逐步发展而来的,在代码级具有向上兼容性。它提供了32位寻址方式和32位操作方式,并且包含全部浮点运算指令。80486指令的操作数可以是03个,根据寻址方式不同,可直接包含在指令中,也可存于寄存器或存储器中。每条指令的长度因指令而异,最短1字节,最长16字节,平均3.2字节。指令的操作数宽度可以是8位、16位、32位,寻址

33、宽度可以是16位或32位。,71,2.4.2 80486指令格式,80486和其他80X86系列CPU一样,采用变字节的指令格式。指令由116字节组成,一般格式如下(由6个字段组成):,6个字段中,只有操作码字段是必要的,其他字段均可有可无,具体取决于涉及的特定操作和操作的位置与类型。,72,2.4.3 80486的指令简介,80486指令系统,73,2.4.3 80486的指令简介,其中整数指令按功能又可分为:,74,2.4.3 80486的指令简介,1.数据传送指令,这是计算机中最基本、最常用、最重要的一类操作。在实际程序中,它的使用频率最高,用于实现存储器与寄存器、寄存器与寄存器、累加器

34、与I/O端口之间字节、字或双字的传送,也可将立即数传送到存储器或寄存器。这类指令寻址方式最丰富,除POPF外,均不影响标志寄存器的标志位。,75,数据传送指令主要包括:,通用数据传送指令,如数值传送类指令(MOV)、装入有效地址指令(LEA)、段装入指令、交换类指令(XCHG和BSWAP)、查表转换指令(XLAT)等。堆栈指令,如PUSH类/POP类指令等。数据类型变换指令,如数据宽度变换指令,带符号数符号位扩展/无符号数位扩展指令等。I/O指令,如IN类/OUT类指令等。,2.4.3 80486的指令简介,76,2.4.3 80486的指令简介,2.算术运算指令,这类指令支持加、减、乘、除四

35、种基本算术运算,其操作对象可以是字节、字、双字的无符号和有符号的二进制整数;也可以是无符号的压缩/非压缩BCD码数;还支持符号扩展指令和十进制调整指令。它的操作结果一般会影响标志寄存器中的状态标志位,如ZF、CF、SF、OF、AF、PF等。,77,2.4.3 80486的指令简介,算术运算指令有:,双操作数指令,如加、减、比较等。,单操作数指令,如增/减、整数变反、乘除法指令等。,无操作数指令,如十进制运算调整和符号位扩展等。,三操作数指令,如有符号整数乘法指令IMUL等。,78,2.4.3 80486的指令简介,3.逻辑运算与移位指令,这类指令包括与、或、非、异或、测试(TEST)和左移、右

36、移、循环左/右移指令。,重点要弄清各种移位操作的功能,以及与操作和TEST操作的区别。,这类指令除NOT外,都会影响某些标志位。,79,2.4.3 80486的指令简介,4.串操作指令,串操作是指对存储器中的一个或多个长度为字节、字或双字的字符串进行操作,包括串传送、串装入、串存储、串比较、串扫描、串输入、串输出等。,串操作指令都是约定以DS:(E)SI来寻址源串,以ES:(E)DI来寻址目的串,故指令中不必显式指明操作数。其中源串的段寄存器DS可通过加段超越前缀而改变,但目的串的段寄存器ES不能超越。源、目的两个指针(E)SI和(E)DI在每次操作后都将根据方向标志DF的值自动增量(DF=0

37、时)或减量(DF=1时),以指向串中的下一项。增量/减量的大小由操作串的长度决定:字节串只加/减1,字串加/减2,而双字串加/减4。,80,2.4.3 80486的指令简介,通常在串操作指令前加重复前缀来传送一组串数据,但必须用(E)CX来作重复次数计数器,每传送一次,(E)CX值减1,直至减为0。,除了串比较指令(CMPS)和串扫描指令(SCAS)外,其余串操作指令均不影响标志位。,81,5.位操作指令,2.4.3 80486的指令简介,为80386/80486所特有。包括以下两类:,位测试指令-对指定的位串数据的指定位进行测试 操作后送入CF,然后将该位按操作规 定变为新值(置1,置0或变

38、反)。位扫描指令-由左至右或由右至左检索字或双字中 的第一个“1”位,记下其下标存至给 定的寄存器中。,82,2.4.3 80486的指令简介,6.控制转移指令,包括以下5种指令:,无条件转移指令(JMP)过程调用/返回指令(CALL/RET)条件转移指令(JCC)循环控制指令(LOOP)中断指令(INT),这类指令的共同特点是可改变程序的正常执行顺序,使之转移。而改变程序的执行顺序,本质上就是要改变CS:(E)IP的内容。这类指令对标志位无影响。,83,2.4.3 80486的指令简介,7.标志操作指令,标志寄存器中的标志位一般是由算术/逻辑运算的结果影响的,但也可通过标志操作指令直接对它或

39、它的某些位进行操作,通过改变其状态来控制程序的运行。,主要包括:,标志寄存器读/写指令(LAHF/SAHF),标志寄存器入栈/出栈指令(PUSHF/POPF 和PUSHFD/POPFD),单个标志位操作指令,84,2.4.3 80486的指令简介,8.按条件设置字节指令SET,与条件转移指令相似,只是满足条件时,不是转移,而是将特定的字节(目的操作数)置“1”。置“1”的条件则直接包含在指令助记符之中。,85,9.处理器控制指令,这类指令可分为以下四类:,标志操作指令,操作系统型指令-又分系统寄存器装入与存储 指令和保护属性检查指令两类。通常只由系统 程序员使用,一般用户很少用到。,空操作指令

40、-NOP.使CPU不作任何操作,仅影 响(E)IP寄存器,对标志位无影响。,外同步类指令-实现CPU与外部时间的同步,包括HTL、ESC、WAIT、LOCK。,2.4.3 80486的指令简介,86,10.高级语言指令,主要包括:,数组边界检查指令BOUND,进入过程指令ENTER,退出过程指令LEAVE,可为实现像C和PASCAL这样的结构化语言提供机器语言支持。,2.4.3 80486的指令简介,87,2.4.4 几类常用指令详解,数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令,88,重点关注:,指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的

41、特殊要求,89,数据传送指令,数据传送是计算机中最基本、最常用的一类操作。,不影响标志位,寻址方式最丰富,特点:,90,传送指令(MOV)交换指令(XCHG)I/O指令(IN/OUT)装入有效地址指令(LEA)装入段寄存器指令(LDS、LES、LFS、LGS、LSS)查表转换指令(XLAT)压栈/弹栈指令(PUSH/PUSHA/PUSHAD/POP/POPA/POPAD))扩展传送指令(MOVSX/MOVZX)字节交换指令(BSWAP),91,1.传送指令,指令操作:(源操作数)目的操作数,指令格式:MOV 目的操作数,源操作数,寻址规定:REG/MEM/SREG,REG REG/MEM,SR

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

43、识别下列指令的正确性,对错误的指令,说明错误的原因。,MOV 1000H,23H,错。源、目的操作数不能同为存储器寻址。,MOV 1000H,2000H,错。立即数不能直接赋给段寄存器。,错。目的操作数长度不确定。,MOV DATA,1133H,MOV CS,AX,依赖于DATA的定义,错。不能用传送指令改变代码段寄存器。,MOV AX,0100H+BX+BP,错。地址寄存器不能同为基址寄存器。,95,例2.4 FIRST,SECOND为字节变量,写出将FIRST开始的字内容送给变量SECOND开始的字单元指令序列。,MOV AL,FIRSTMOV SECOND,ALMOV AL,FIRST1

44、MOV SECOND1,AL,MOV AX,WORD PTR FIRSTMOV WORD PTR SECOND,AX,用字传送,用字节传送,96,2.交换指令,操作:(目的操作数)(源操作数),格式:XCHG 目的操作数,源操作数REG/MEM,REG REG,MEM,说明:基本用法同MOV指令;当源或目的操作数为MEM操作数时,会自动激活LOCK信号,该特性常用于多机、多任务或多用户系统中的临界段(共享资源)访问。,注意:(1)该指令不影响标志位;(2)不允许使用段寄存器。,97,例2.5 FIRST,SECOND已定义为字节变量,写出将变量FIRST和SECOND中内容交换的指令序列。,解

45、:用交换指令XCHG AL,FIRST XCHG SECOND,ALXCHG AL,FIRST 用MOV指令MOV AL,FIRSTMOV BL,SECONDMOV FIRST,BLMOV SECOND,AL,98,TEST:MOV AL,0FFH XCHG AL,SEMAPHORE AND AL,AL;产生条件码 JNZ TEST;忙时等待(临界段程序)MOV AL,0 MOV SEMAPHORE,AL;清信号灯,例2.6:临界段访问(测试与置操作),99,输入指令格式:IN 累加器,端口 AL/AX/EAX,IMM8 AL/AX/EAX,DX操作:(I/O端口)AL/AX/EAX,I/O指

46、令,直接寻址:指令给出的立即数是I/O端口地址,间接寻址:DX寄存器给出的是I/O端口地址,100,输出指令,格式:OUT 端口,累加器 IMM8,AL/AX/EAX DX,AL/AX/EAX操作:(AL/AX/EAX)I/O端口,说明:I/O端口有两种寻址方式 使用立即数的直接寻址,寻址范围为0255;使用DX寄存器的间接寻址,寻址范围为0216-1。,101,格式:LEA r16/r32,mem;r16/r32目的操作数寄存器例 LEA AX,BPDI说明LEA指令处理变量的地址(EA)而不是变量的内容 LEA和MOV指令的比较 MOV BX,OFFSET VAL;将VAL的有效地址=BX

47、 MOV BX,VAL;将VAL的值=BX LEA BX,VAL;将VAL的有效地址=BX,4.地址-目标传送指令,102,MOV指令用OFFSET操作不能直接取数组中任意元素的位移量,只能取数组的第一个元素的位移量,而LEA可以传送任意数组元素的位移量。如LEA DX,BETABXSILEA的源操作数必须是存储器操作数LEA不影响F标志LDS reg,mem 目的操作数为16位或32位通用寄存器之一,源操作数是双字长存储器指针,将双字长源操作数中的低地址字传送给目的寄存器,将双字长源操作数中的高地址字传送给DS段寄存器,103,如B DB F A DD B LDS BX,A;B的位移量=BX

48、,B的段基址=DS MOV AL,BX;将F=AL,LES reg,mem 和LDS一样,只是把双字长源操作数中的高地址字传送给ES而不是DS,104,说明:XLAT是一条隐含寻址的指令。隐含两个操作数:DS:(E)BX存放表基址,AL存放查表参数。使用前要给隐含操作数赋初值。,5.查表指令,格式:XLAT 操作:(EBX)+(AL)AL(BX)+(AL)AL,注意:(1)不影响标志位;(2)字节表格(长度不超过256)首地址存入BX;(3)需转换代码存入AL。,105,例2.7 内存中自TABLE开始的16个单元连续存放着自然数0到15的平方值(构成一个平方表),任给一整数M在XX单元中(该

49、数为0M15),查表求M的平方值,并将结果存入YY单元中。,解:LEA BX,TABLEMOV AL,XX XLAT MOV YY,AL,106,6.压栈/弹栈指令,格式:PUSH 源操作数REG16/MEM16/IMM16REG32/MEM32/IMM32操作:(E)SP)-2/4(E)SP(源操作数)(SS:(E)SP),107,格式:POP 目的操作数 MEM16/REG16 MEM32/REG32操作:(SS:(E)SP)目的操作数(E)SP)+2/4(E)SP,弹栈指令,108,堆栈指令的操作数只能为字或双字。PUSH和POP要成对出现,以保持堆栈平衡。堆栈指令也隐含了一个目的/源操

50、作数 堆栈。压栈顺序是先压高字节后压低字节,弹栈则是先弹低字节后弹高字节。(先进后出),使用说明:,注意:(1)指令执行后不影响标志位;(2)不能用立即寻址方式;(3)目标操作数不能是CS。,109,例2.8 用堆栈操作指令将BX和CX中的两个16位数(其中BX是高16位)组成32位数传送到EAX寄存器中。,解:,PUSH BX;先压高16位 PUSH CX;后压低16位 POP EAX,110,例2.9设程序在数据段中定义的数组如下:NAMES DB TOM.DB 20 DB ROSE DB 30 DB KATE.DB 25 请指出下列指令是否正确,如正确,A累加器中的结果是多少?,7.传送

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号