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

下载本文档

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

文档简介

2-1,第二章微处理器和指令系统,重点:1.Intel系列微处理器的演变历史;2.Pentium的内部基本寄存器功能及应用;3.操作数寻址方式;4.通用整数指令,2-2,第二章微处理器和指令系统,2.1Intel系列微处理器概述2.28086/8088微处理器2.3Pentium微处理器2.4Pentium微处理器指令系统,2-3,2.1.18086/8088微处理器2.1.280486微处理器2.1.3Pentium微处理器(80586)2.1.4PentiumPro微处理器2.1.5Pentium微处理器2.1.6Pentium微处理器2.1.7Pentium4微处理器,2.1Intel系列微处理器概述,2-4,2.1.18086/8088微处理器,8086是1978年推出的全16位微处理器,8088是1978年推出的准16位微处理器。二者除外数据总线位数(8086为16位,8088为8位)及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。,在8086/8088的设计中,引入了两个重要的结构概念:指令流水线存储器分段,这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。正是这两个概念的引入,使8086/8088比原来的8位MPU在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。,2-5,2.1.280486微处理器,1.内部寄存器的容量都扩充到了32位或以上,具有全32位数据处理能力,并可进行64位的数据运算。2.片内存储管理部件可实现段页式存储管理,比80286可提供更大的虚拟存储空间和物理存储空间。3.新增了一种保护模式下的工作方式,即虚拟8086方式。4.指令流水线增加到了6级。5.提供了32位外部总线接口,最大数据传输速率显著提高。,80486是继80386之后推出的第二代32位高性能微处理器,它以提高性能和面向多处理器系统为主要目标。80486继承了80386的各种优点,表现在以下几方面:,2-6,2.1.280486微处理器,1.片内集成了一个浮点运算单元FPU。2.内含一个8KB的数据与指令合用的Cache。3.采用RISC技术。使芯片内的不规则控制部分减少,同时常用基本指令采用硬件逻辑控制执行,使基本指令可以用一个时钟周期完成。4.采用一种突发总线(BurstBus)的技术。使取得一个地址后,与该地址相关的一组数据可以连续输入/输出,有效地解决了微处理器同内存储器之间的数据交换问题。5.面向多处理器结构,增加了支持多机操作的指令。,除以上80386、80486共有的特点之外,80486也采用了许多新技术:,2-7,2.1.3Pentium微处理器(80586),1.采用超标量体系结构。2.内置的浮点运算部件采用超流水线技术。3.增加了分支指令预测。4.内置了指令和数据两个独立的超高速缓存器,避免了预取指令和数据可能发生的冲突。,Pentium是一种高性能的32位微处理器。其对80486作了下列重大改进:,2-8,5.采用64位外部数据总线。6.引入了大型机中采用的内部错误检测、功能冗余检验和错误报告等自诊断功能。7.进行了更多的可测性设计。8.提供了独特的性能监察功能,以利于软、硬件产品的优化和升级。9.提供了灵活的存储器页面管理。,2.1.3Pentium微处理器(80586),2-9,精简指令集技术。二级缓冲结构。乱序执行和预测执行技术。三级超标量和14级超流水线结构。寄存器重命名技术,2.1.4PentiumPro微处理器,简称P6,中文名为“高能奔腾”。在体系结构中采用了许多新的思想和新的技术:,2-10,2.1.5Pentium微处理器,P6级微处理器的第二代产品,从系统结构角度看,主要采用了以下几种先进技术:,采用了由三种创新处理技巧结合的动态执行技术,即:多分支预测、数据流分析和推测执行。双重独立总线技术(DIB,DualIndependentBus),多媒体增强技术(MMX技术)采用单指令流多数据流SIMD技术新增加了57条功能强大的MMX指令,2-11,2.1.6Pentium微处理器,Pentium是第三代P6级微处理器产品。与Pentium相比,有如下改进:,前端总线的时钟频率为100MHz(采用0.18m新工艺的Pentium,其前端总线达到133MHz)。,将256KB的L2Cache集成到了芯片内。增加了70条流式单指令多数据扩展SSE指令。首次设置了处理器序列号PSN。,2-12,2.1.7Pentium4微处理器,1.采用了超级管道技术,使用长达20级的分支预测/恢复管道,而P6只有10级。2.它的简单算术逻辑单元(ALU)采用2倍的处理器核心频率运行。3.动态执行技术中的指令池能容下126条指令。4.内含一个4KB的分支目标缓冲。5.增加了由144条新指令组成的SSE2。,它是第一个非P6核心结构的全新32位微处理器,与P6级微处理器相比,主要结构特点如下:,2-13,2.28086/8088微处理器,内部结构指令流水线存储器分段,8086是全16位微处理器,8088是准16位微处理器。二者除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。,2-14,1.内部结构,2.28086/8088微处理器,2-15,EU(ExecutionUnit),2-16,(2)功能,BIU(BusInterfaceUnit),完成所有外部总线的操作,提供总线控制信号。具体地完成:取指、指令排队、读写操作数、地址转换(将两个16位地址相加20位物理地址),总线控制。,2-17,(3)指令队列,BIU使用指令队列实现流水线操作。当指令队列中有2个或2个(1个)以上的字节空间,且EU未申请读写存储器,则BIU顺序预取后续指令代码Queue。,2-18,EU的工作过程,2-19,2.指令流水线,指令队列的存在使EU和BIU并行工作,取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,减少了CPU等待时间,提高了CPU的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。,2.28086/8088微处理器,2-20,2-21,将1MB的物理存储空间分成若干个逻辑段,每段大小为64KB。,段的起始单元地址叫段基址,存放在段寄存器中。通过4个段寄存器,CPU每次可同时对4个段进行寻址。,3.存储器分段,2.28086/8088微处理器,2-22,分段方式不唯一,各段之间可以连续、分离、部分重叠或完全重叠,这主要取决于对各个段寄存器的预置内容。,2.28086/8088微处理器,存储器分段结构示例,2-23,物理地址是1MB存储空间中的某一单元地址,用20位地址码表示,CPU访问存储器时,地址总线上送出的就是物理地址。逻辑地址在编程时采用,由段基址和偏移地址组成,两者均为16位。,物理地址和逻辑地址,2.28086/8088微处理器,2-24,逻辑地址与20位物理地址的变换关系:物理地址=段基址16+偏移地址,逻辑地址与物理地址的变换,2.28086/8088微处理器,2-25,例:已知CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H,DS段有一操作数,其偏移地址=0204H,1)画出各段在内存中的分布2)指出各段首地址3)该操作数的物理地址=?,解:各段在内存中的分布右图所示。操作数的物理地址为:250AH10H+0204H=252A4H,2-26,2.3Pentium微处理器,2.3.1内部结构与外部引脚2.3.2内部寄存器2.3.3Pentium的四种工作方式,2-27,Pentium在结构上由如下功能部件组成:整数执行单元浮点单元指令Cache和数据Cache指令预取单元指令译码单元地址转换与管理单元总线接口单元控制单元(核心,又叫运算器)这些功能部件除地址转换与管理单元与80386/80486保持兼容外,其他都进行了重新设计。,2.3.1内部结构和外部引脚,2-28,1.内部结构,2.2.1内部结构和外部引脚,1)总线接口单元主要用于管理访问外部存储器和I/O端口必须的地址、数据和控制总线,完成预取指令、读/写数据等总线操作。,3)预取缓冲单元预取缓冲单元在总线接口单元空闲时,负责提前去内存或指令Cache预取指令。其指令预取缓冲器在前一条指令执行结束之前可以预取多达94个字节的指令代码。,4)指令译码单元将预取的指令译成Pentium可以执行的控制信号并送控制单元。对绝大多数指令来说,Pentium微处理器可以做到每个时钟周期以并行方式完成两条指令的译码操作。,5)控制单元负责解释来自指令译码单元的指令字和控制ROM的微代码。控制部件的输出直接控制两条指令流水线和浮点单元。,6)地址转换与存储管理单元Pentium的地址转换与存储管理单元与80386/80486保持完全兼容,由分段和分页部件组成。Pentium除继续支持4KB大小的页面外,还允许使用高达4MB的页面,从而减少了页面切换的频率,并加快了某些应用程序的执行。,8)浮点运算单元,2-29,2.Pentium的外部引脚,2-30,2-31,2-32,Pentium微处理器总线周期,2-33,基本寄存器系统级寄存器调试和模型专用寄存器浮点寄存器,Pentium的内部寄存器,按功能可分为4类:,2.3.2Pentium内部寄存器,2-34,2.3.2Pentium内部寄存器,1.基本寄存器,EIP用于保存下一条待预取指令相对于代码基址的偏移量。它的低16位也可单独访问,称之为IP。,2-35,标志寄存器位定义,2.3.2Pentium内部寄存器,2-36,在调试程序时,DEBUG提供了测试标志位的手段,用符号表示标志位的值,每种标志位的符号如右表,2-37,标志:运算结果最高位为0SF=0运算结果0ZF=0低8位中1的个数为奇数个PF=0最高位有进位CF=1第三位向第四位无进位AF=0次高位向最高位没有进位,最高位向前进位,OF=1,例:执行两个数的加法,分析对标志位的影响。,2-38,段寄存器,Pentium有6个段寄存器:,2.3.2Pentium内部寄存器,编程者可直接访问的,编程者不能访问的,2-39,实地址方式和虚拟8086方式下相同,段的长度固定为64KB,段选择器就是段寄存器,它保存的是逻辑段基址的高16位,将它的内容左移4位即可得到实际段基址,而不必使用描述符高速缓存器。,在保护虚地址方式下,段的长度可以在1字节到4G字节之间变化;为了描述每个段的基址、属性和边界,为每个段定义了一个描述符。操作系统使用的各任务公用的段描述符放在一起构成全局描述符表GDT;某个任务专用的段描述符放在一起构成局部描述符表LDT。,Pentium段的定义与8086有所不同:,2.3.2Pentium内部寄存器,2-40,描述符与描述符表,2.3.2Pentium内部寄存器,2-41,段的的选择符,为了说明一个段的描述符在哪个表中,表的序号是多少以及特权的高低,为每个段定义了一个16位的选择符,存于段选择器中,其格式为:,2.3.2Pentium内部寄存器,2-42,将一个选择符装入一个段选择器时,处理器将自动从GDT或LDT中找到其对应的描述符装入相应描述符高速缓存器中。,2.3.2Pentium内部寄存器,以后,每当访问存储器时,与所用段相关的段描述符高速缓冲器就自动参与该次存储器访问操作。转换关系:线性地址=段描述符高速缓存器中段基址+偏移地址,2-43,例题有一个描述符表存放在全局描述符表的第63个表项中,访问该描述符的请求特权级为2,请写出该描述符的选择符。已知段描述符中有基址=56780000H,界限=10,G=1。求该描述符定义的存储段的线性地址范围。,2-44,例:假设虚拟地址为0100:00000200H,禁止分页。如果描述符中读出的段基址为00030000H,那么操作数的物理地址是什么?,解:将此虚拟地址转换成物理地址为,基地址+偏移量,=00030000H+00002000H,=00032000H,2-45,Pentium微处理器中包含一组系统级寄存器:即5个控制寄存器CR0CR4和4个系统地址寄存器。这些寄存器只能由在特权级0上运行的程序(一般是操作系统)访问。,2.2.2Pentium内部寄存器,控制寄存器,Pentium在80486控制寄存器CR0CR3的基础上新增了一个控制寄存器CR4,这些寄存器用来存放全局特性的机器状态和实现对80X86/Pentium微处理器的多种功能的控制与选择。,2.系统级寄存器,2-46,2.3.2Pentium内部寄存器,CR0,CR4,CR3,CR2,CR1,控制寄存器格式:,2-47,系统地址寄存器,2.3.2Pentium的内部寄存器,系统地址寄存器,其中GDTR和LDTR分别用来存放GDT和LDT的32位线性基地址等内容;IDTR用来存放中断描述符表的基址和界限;TR用来存放任务状态段(TSS)的基址、界限和其他属性。,只在保护方式下使用,所以又叫保护方式寄存器。用于把在保护方式下常用的数据基地址、界限和其他属性保存起来,以确保其快速性。,2-48,图2.14GDTR与它定义的全局描述符表,2-49,例:(GDTR)=001000000FFFH,求GDT在物理存储器中的起始地址,结束地址,表的大小,表中可以存放多少个描述符?,解:GDT的起始地址为:00100000H结束地址为:00100000H+0FFFH=00100FFFH表的大小为:0FFFH+1=4096字节表中可以存放4096/8=512个描述符,2-50,2-51,图2.15LDTR和它定义的局部描述符表,2-52,例:设LDT的基址为00120000H,GDT的基址为00100000H,(CS)=1007H,那么:请求的特权级是多少?段描述符位于GDT还是LDT中?段描述符的地址是什么?,2-53,解:(CS)=1007H=0001000000000111B,RPL=3,申请的特权级为3,TI=1,描述符位于LDT中,描述符相对于LDT基址的偏移量,段描述符的地址为0,0001000000000B8=5128=4096=1000H,00120000H+1000H=00121000H,2-54,2-55,图2.16任务寄存器和任务切换机制,2-56,Pentium处理器中提供了一组调试寄存器和一组模型专用寄存器,用于排除故障和用于执行跟踪、性能监测、测试及机器检查错误。,2.3.2Pentium的内部寄存器,3.调试和模型专用寄存器,2-57,Pentium处理器取消了80386/80486中的测试寄存器TR,其功能由一组“模型专用寄存器”MSR(ModelSpecialRegister)来实现,这一组MSR用于执行跟踪、性能监测、测试和机器检查错误。Pentium处理器采用两条指令RDMSR(读MSR)和WRMSR(写MSR)来访问这些寄存器,ECX中的值(8位值)确定将访问该组寄存器中哪一个MSR。,2.3.2Pentium的内部寄存器,(2)模型专用寄存器,2-58,2.3.3Pentium的四种工作方式,2-59,2.4Pentium微处理器指令系统,2.4.1基本数据类型2.4.2操作数寻址方式2.4.3Pentium指令系统概貌2.4.4数据传送类指令2.4.5算术运算类指令2.4.6逻辑运算和移位指令2.4.7串操作类指令2.4.8控制转移类指令,2-60,Pentium在其内部定点处理单元CPU和浮点处理单元FPU的支持下,共可处理7类数据:,1.无符号二进制数2.带符号的二进制定点整数3.浮点数4.BCD码数5.串数据6.ASCII码数据7.指针数据,2.4.1基本数据类型,2-61,2.4.1基本数据类型,这类数不带任何符号信息,只含有量值域,仅CPU支持。分为三类:,字节:字:双字:,任何逻辑地址上的8位相邻位串。,任何字节地址开始的2个相邻字节。低字节地址为该字地址。,任何字节地址开始的2个相邻字,即4个相邻字节。最小字节地址为双字的地址。,1.无符号二进制数(序数),2-62,这类数均以补码表示,有8位数(字节)、16位数(字)、32位数(双字)、64位数(4字)四种。,CPU支持前3种,FPU支持后3种。,2.4.1基本数据类型,2.带符号的二进制定点整数(整数),2-63,2.4.1基本数据类型,这类数由FPU支持,有单精度、双精度和扩展精度三种形式:,单精度数,双精度数,扩展精度数,3.浮点数(实数),2-64,BCD码数有压缩BCD码数和非压缩BCD码数两种。CPU两种数都支持;FPU只支持压缩BCD码数,且最大长度为80位,最多可处理20位BCD码数。,2.4.1基本数据类型,5.串数据,这类数据仅CPU支持。包括:位串:字节/字/双字串:,是从任何字节的任何位开始的相邻位的序列,最长可达232-1位。,是字节/字/双字的相邻序列,最长可达232-1字节。,4.BCD码数,2-65,2.4.1基本数据类型,包括ASCII码字符串和ASCII码数(0F)两种。,7.指针数据,包括近指针和远指针两种:,近指针即32位指针,是一个32位的段内偏移量,段内寻址用。远指针即48位指针,由16位选择符和32位偏移量组成,用于跨段访问。,6.ASCII码数据,2-66,关于数据类型的两点说明:,(1)在上述各类型数据中,基本的数据类型仍是字节、字和双字。一般应尽可能将字操作对准于偶地址,将双字操作对准于4的整数倍地址。但也允许不对准操作,以便在数据结构的处理上和存储器的有效利用上给系统设计人员和用户提供最大的灵活性。不过,对准和不对准获得的数据传递速度不一样:对准的字和双字可一次传递完,而未对准的字和双字需几次才能传递完。(2)对于字和双字数据,80X86是采用低端低地址方式来存储的。即字数据被存储在两个相邻的字节单元之中,低位字节在低地址单元,高位字节在高地址单元;双字数据存储在四个连续字节单元中,最低位字节在最低地址单元,最高字节在最高地址单元。而字或双字数据的地址是指最低位字节所在的单元地址。,2.4.1基本数据类型,2-67,2.4.2操作数寻址方式,1.寻址方式和有效地址概念2.11种寻址方式3.存储器寻址时的段约定4.应用举例,2-68,2.4.2寻址方式,寻址方式就是寻找指令中操作数地址的方式。操作数所在地址有三种可能:,直接包含在指令中,即指令的操作数部分就是操作数本身。这种操作数叫立即数,对应的指令寻址方式称为立即数寻址。,包含在CPU的某个内部寄存器中。这时指令中的操作数部分是CPU的一个寄存器,这种指令寻址方式称为寄存器寻址。,在内存储器中。这时指令的操作数部分包含着该操作数所在的内存地址。这种指令寻址方式称为存储器寻址。,1.寻址方式和有效地址概念,寻址方式,2-69,在Pentium系列MPU中,内存实际地址(PA)由段基地址和段内偏移地址两部分组成。段内偏移地址可由以下几部分组合而成:,基址寄存器内容变址寄存器内容比例因子位移量,这四个基本部分称为偏移地址四元素,一般又将由这四种元素组合形成的偏移地址称为有效地址EA。,EA=基址+(变址比例因子)+位移量,有效地址EA,2.4.2寻址方式,2-70,2.4.2寻址方式,16位和32位寻址时的四元素定义,2-71,保护方式下的寻址过程(地址转换过程),2.4.2寻址方式,2-72,2.4.2寻址方式,偏移地址四元素可优化组合出9种存储器寻址方式,加上立即数寻址和寄存器寻址,Pentium共有11种寻址方式:,(1)立即数寻址(2)寄存器寻址(3)直接寻址(4)寄存器间接寻址(5)基址寻址,(6)变址寻址(7)比例变址寻址(8)基址加变址寻址(9)基址加比例变址寻址(10)带位移的基址加变址寻址(11)带位移的基址加比例变址寻址,2.11种寻址方式,2-73,2.4.2寻址方式,在这种寻址方式下,操作数作为立即数直接存在指令中,可为8位、16位或32位。,MOVAX,4567HMOVBL,78HMOVECX,12345678H,(1)立即数寻址,动画演示,2-74,2.4.2寻址方式,在这种方式下,操作数包含在指令规定的8位、16位或32位寄存器中。,这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。,(2)寄存器寻址(寄存器直接寻址),2-75,2.4.2寻址方式,在这种方式下,指令中的操作数部分直接给出操作数有效地址EA,它和操作码一起放在存储器代码段中,可以是16位或32位整数。但操作数一般在数据段DS中。,例:MOVAX,DS:3000H,将DS段中3000H和3OO1H单元的内容送到AX中。假设DS=5000H,则此指令是将物理地址为53000H单元的内容送到AL寄存器,将53001H单元的内容送到AH寄存器,直接寻址方式的执行过程动画演示。,(3)直接寻址(存储器直接寻址),2-76,2.4.2寻址方式,实际中对于直接寻址,如操作数在DS段中,则可直接写成:,MOVAX,3000H,如操作数在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中则必须用段寄存器名前缀(称为段超越前缀)予以指明。,MOVAX,FS:3000H,直接寻址主要用于单个操作数的相对寻址场合(如简单的标量操作数寻址和静态分配数组的起始地址寻址等)。,2-77,2.4.2寻址方式,在这种方式下,操作数放在存储器中,但其有效地址EA放在寄存器中,即:EA=寄存器寄存器的使用规定在16位寻址和32位寻址时不一样。,(4)寄存器间接寻址,2-78,2.4.2寻址方式,若以SI、DI、BX间接寻址,则默认操作数在DS段中。MOVAX,SI;默认DS为段基址若以BP间接寻址,则默认操作数在SS段中。MOVAX,BP;默认SS为段基址动画演示,如果操作数不在上述规定的默认段,而是在其他段,则必须在指令中相应的操作数前加上段超越前缀。,MOVAX,ES:SIMOVAX,DS:BP,16位寻址时,偏移地址放在SI、DI、BP或BX中。两种段默认情况:,2-79,2.4.2寻址方式,MOVEBX,EAX;默认DS为段基址,传送双字给EBXMOVDX,EBX;默认DS为段基址,传送字给DXMOVCH,EAX;默认DS为段基址,传送字节给CH,除ESP、EBP默认段寄存器为SS外,其余6个通用寄存器均默认段寄存器为DS。如操作数在默认段之外,指令中必须加段超越前缀。,寄存器间接寻址的应用场合与直接寻址的应用场合相似,但更灵活。,32位寻址时,8个32位通用寄存器均可作寄存器间接寻址。,2-80,2.4.2寻址方式,EA=基址寄存器+位移量。其中位移量一定要为常数,且跟随在操作码之后,与操作码一起存放在代码段中。,16位寻址情况下,BX和BP作为基址寄存器。在缺省段超越前缀时,BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。位移量可为8位或16位;32位寻址情况下,8个32位通用寄存器均可作基址寄存器,其中ESP、EBP以SS为默认段寄存器,其余6个通用寄存器均以DS为默认段寄存器。位移量为8位或32位。,MOVEAX,BX+24;也可写成MOVEAX,24BXMOVECX,EBP+50;也可写成MOVECX,50EBPMOVDX,EAX+1500H;也可写成MOVDX,1500HEAX,(5)基址寻址,2-81,2.4.2寻址方式,EA=变址寄存器+位移量指令书写格式和寻址执行过程与基址寻址相同,区别仅在于将基址寄存器改成变址寄存器。,(6)变址寻址,2-82,2.4.2寻址方式,MOVAX,COUNTSI,MOVEAX,5EBPMOVECX,DATAEAX,基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址/变址表示数组元素的下标,可变。,16位寻址时,仅SI、DI可作变址寄存器,且默认DS作为段基址寄存器。,32位寻址时,除ESP外的任何通用寄存器均可作变址寄存器,且默认EBP以SS作段基址寄存器,其余均以DS作段基址寄存器。,2-83,2.4.2寻址方式,EA=变址寄存器比例因子+位移量,这种寻址方式只适于32位寻址一种情况。,MOVEAX,TABLEESI*4;TABLE是位移量,4是比例因子,比例变址寻址和基址/变址寻址的作用相似,也适用于对一维数组元素的检索。但当数组元素大小为2/4/8字节时,用它更方便、更高效。,(7)比例变址寻址,2-84,2.4.2寻址方式,EA=基址寄存器+变址寄存器,MOVAX,BX+SI;或写成MOVAX,BXSI动画演示,它有16位寻址和32位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认规定与前面所述相同,但一种寻址方式中既有基址寄存器又有变址寄存器,而两个寄存器默认的段寄存器又不相同时,一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针。,基址加变址寻址主要用于二维数组元素的检索和二重循环等。,(8)基址加变址寻址,2-85,2.4.2寻址方式,EA=变址寄存器比例因子+基址寄存器,它只有32位寻址一种情况。,MOVECX,EDX*8EAX;或MOVECX,EDX*8+EAXMOVAX,EBX*4ESI;或MOVAX,EBX*4+ESI,这种方式主要用于数组元素大小为2/4/8字节时的二维数组检索操作等场合。,(9)基址加比例变址寻址,2-86,2.4.2寻址方式,在这种方式下:,EA=变址寄存器+基址寄存器+位移量,这种方式也分16位寻址和32位寻址两种情况。变址、基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同。,MOVAX,BX+DI+MASK或MOVAX,MASKBXDIADDEDX,ESIEBP+0FFFF000H或ADDEDX,0FFFF000HESIEBP,这种寻址方式也是主要用于二维数组操作,位移量即为数组起始地址。,(10)带位移的基址加变址寻址,动画演示,2-87,2.4.2寻址方式,EA=变址寄存器比例因子+基址寄存器+位移量,它只有32位寻址一种情况。各种约定和默认情况同前所述。,INCEDI*8ECX+40;或INCEDI*8+ECX+40,当二维数组的数组元素大小为2/4/8字节,且数组起始地址不为0时,适于用这种寻址方式进行数组检索操作。,(11)带位移的基址加比例变址寻址,2-88,2.4.2寻址方式,3.存储器寻址时的段约定,2-89,4.应用举例,例2.1已知Pentium工作在实地址方式下,其中一些寄存器的内容和一些存储单元的内容如图所示,试指出下列各条指令执行后,AX中的内容。,MOVAX,2010H,MOVAX,BX,MOVAX,1200H,MOVAX,BX,MOVAX,1100HBX,MOVAX,BXSI,MOVAX,1100HBX+SI,LEAAX,SI,2.4.2寻址方式,2-90,2.4.2寻址方式,例2.2假定Pentium工作在实地址方式下,已知:(DS)=1000H,(SS)=2000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,变量TABLE的偏移地址为0100H。请指出下列指令的源操作数字段是什么寻址方式?它的有效地址(EA)和物理地址(PA)分别是多少?,MOVAX,1234HMOVAX,TABLEMOVAX,BX+100HMOVAX,TABLEBPSI,2-91,Pentium的指令系统是在80X86系列指令系统的基础上逐步发展而形成的,在代码级具有向上兼容性。它增加了指令的种类,增强了一些指令的功能,提供了32位寻址方式和32位操作方式,并且包含全部浮点运算指令。Pentium指令的操作数可以是03个,根据寻址方式不同,可直接包含在指令中,也可存于寄存器或存储器中。每条指令的长度因指令而异,平均指令长度为3.2字节。指令的操作数宽度可以是8位、16位、32位,寻址宽度可以是16位或32位。Pentium指令系统的突出特点是:功能强、灵活性高,给编译程序和汇编语言程序的设计人提供了很宽的选择余地。,2.4.3Pentium指令系统概貌,2-92,1.指令格式,2.4.3Pentium指令系统概貌,2-93,Pentium指令系统分为:,整数指令-最常用部分浮点数指令操作系统型指令,2.指令分类,2.4.3Pentium指令系统概貌,2-94,数据传送是计算机中最基本、最常用、最重要的一类操作。如:,这类指令寻址方式最丰富,除POPF外,均不影响标志寄存器的标志位。,在实际程序中,它的使用频率最高。,各种初始化操作取操作数保存结果,2.4.4数据传送类指令,2-95,通用数据传送指令。如数据传送指令(MOV)、装入有效地址指令(LEA)、段装入指令、交换类指令(XCHG和BSWAP)、查表转换指令(XLAT)等。堆栈指令。如PUSH类/POP类指令等。数据类型变换指令。如数据宽度变换指令,带符号数符号位扩展/无符号数位扩展指令等。I/O指令。如IN类/OUT类指令等。标志寄存器传送指令,2.4.4数据传送类指令,数据传送指令主要包括:,2-96,1.传送指令MOV,指令操作:(源操作数)目的操作数,指令格式:MOV目的操作数,源操作数,寻址规定:REG/MEM/SREG,REGREG/MEM,SREGREG/SREG,MEMREG/MEM,IMM,2.4.4数据传送类指令,2-97,2.3.4数据传送类指令,2-98,MOV指令使用说明:,源操作数和目的操作数的类型必须一致。目的操作数不能为立即数。CS和(E)IP均不能用作指令的目的寄存器。段寄存器间不能直接传送,也不能直接将立即数送给段寄存器。源操作数为立即数,而目的操作数类型不确定时,要给目的操作数加类型说明。,源操作数和目的操作数不能同为存储器操作数。,2.4.4数据传送类指令,目的操作数,源操作数REG/MEM/SREG,REGREG/MEM,SREGREG/SREG,MEMREG/MEM,IMM,2-99,MOVDS,100,MOV1000H,23H,错。源、目的操作数不能同为存储器寻址。,MOV1000H,2000H,错。立即数不能直接赋给段寄存器。,错。目的操作数长度不确定。,MOVDATA,1133H,MOVCS,AX,依赖于DATA的定义,错。不能用传送指令改变代码段寄存器。,MOVAX,0100H+BX+BP,错。地址寄存器不能同为基址寄存器。,例2.3识别下列指令的正确性,对错误的指令,说明错误的原因。,MOVAX,100MOVDS,AX,MOVWORDPTR1000H,23H,MOVAX,2000HMOV1000H,AX,2.3.4数据传送类指令,2-100,2.交换指令,操作:(目的操作数)(源操作数),格式:XCHG目的操作数,源操作数REG/MEM,REGREG,MEM,说明:基本用法同MOV指令;当源或目的操作数为MEM操作数时,会自动激活LOCK信号,该特性常用于多机、多任务或多用户系统中的临界段(共享资源)访问。,2.4.4数据传送类指令,2-101,例2.4临界段访问(测试与置位操作),TEST_SET:MOVAL,0FFHXCHGAL,SEMAPHORE;读信号灯并置位ANDAL,AL;产生条件码JNZTEST_SET;忙时等待(临界段程序)MOVAL,0MOVSEMAPHORE,AL;清信号灯,2.4.4数据传送类指令,2-102,说明:XLAT是一条隐含寻址的指令。隐含两个操作数:DS:(E)BX存放表基址,AL存放查表参数。使用前要给隐含操作数赋初值。,3.查表指令,格式:XLAT操作:(EBX)+(AL)AL(BX)+(AL)AL,2.4.4数据传送类指令,2-103,例2.5内存中自TABLE开始的16个单元连续存放着自然数0到15的平方值(构成一个平方表),任给一整数M在XX单元中(该数为0M15),查表求M的平方值,并将结果存入YY单元中。,解:LEABX,TABLEMOVAL,XXXLATMOVYY,AL,2.4.4数据传送类指令,2-104,4.堆栈指令PUSH/POP,格式:PUSH源操作数REG16/MEM16/IMM16/SREGREG32/MEM32/IMM32/SREG操作:(E)SP)-2/4(E)SP(源操作数)(SS:(E)SP),(1)压栈指令,2.4.4数据传送类指令,2-105,格式:POP目的操作数MEM16/MEM32/REG16/REG32/SREG操作:(SS:(E)SP)目的操作数(E)SP)+2/4(E)SP,(2)弹栈指令,2.4.4数据传送类指令,2-106,堆栈指令的操作数只能为字或双字。PUSH和POP要成对出现,以保持堆栈平衡堆栈指令也隐含了一个目的/源操作数堆栈。压栈顺序是先压高字节后压低字节,弹栈则是先弹低字节后弹高字节。,(3)堆栈指令使用说明:,2.4.4数据传送类指令,2-107,例2.6用堆栈操作指令将BX和CX中的两个16位数(其中BX是高16位)组成32位数传送到EAX寄存器中。,PUSHBX;先压高16位PUSHCX;后压低16位POPEAX,解:,2.4.4数据传送类指令,2-108,说明:I/O端口有两种寻址方式直接寻址,寻址范围为0255;间接寻址,寻址范围为0216-1。,(1)输入指令格式:IN累加器,端口AL/AX/EAX,IMM8AL/AX/EAX,DX操作:AL/AX/EAX(I/O端口),直接寻址:指令给出的立即数是I/O端口地址,间接寻址:DX寄存器给出的是I/O端口地址,5.I/O指令,2.4.4数据传送类指令,2-109,(2)输出指令,格式:OUT端口,累加器IMM8,AL/AX/EAXDX,AL/AX/EAX操作:(AL/AX/EAX)I/O端口,2.4.4数据传送类指令,2-110,例2.7设程序在数据段中定义的数组如下:NAMESDBTOM.DB20DBROSEDB30DBKATE.DB25请指出下列指令是否正确,如正确,A累加器中的结果是多少?,6.传送指令应用举例,2.4.4数据传送类指令,2-111,1.MOVBX,OFFSETNAMESMOVAL,BX+5,(AL)=NAMES+5=20,2.MOVAX,NAMES,错,源与目的操作数类型不一致,3.MOVAX,WORDPTRNAMES+1,(AX)=NAMES+1=MO=4D4FH,4.MOVBX,6MOVSI,5MOVAX,NAMESBXSI,前两条指令正确,第三条错,源与目的操作数类型不一致,2.4.4数据传送类指令,2-112,5.MOVBX,6*2MOVSI,5MOVAX,OFFSETNAMESBXSIINCAX,6.MOVBX,6MOVSI,5LEADI,NAMESBXSIMOVAL,DI,(DI)=NAMES偏移地址+(BX)+(SI)=NAMES偏移地址+11(AL)=NAMES+11=K=4BH,前两条指令正确,第三条错,OFFSET只能取直接变量的偏移地址;第四条错,非法寻址。,2.4.4数据传送类指令,2-113,例2.880486工作在实地址方式时,(DS)=091DH,(BX)=0024H,有关存储器的内容如图所示。求指令LESDI,32HBX执行后的结果。,LESDI,32HBX,2.4.4数据传送类指令,2-114,这类指令支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的无符号和有符号的二进制整数;也可以是无符号的压缩/非压缩BCD码数;还支持符号扩展指令和十进制调整指令。它的操作结果一般会影响标志寄存器中的状态标志位,如ZF、CF、SF、OF、AF、PF等。,2.4.5算术运算类指令,2-115,算术运算指令有:,双操作数指令,如加、减、比较等。,单操作数指令,如增/减、整数变反、乘除法指令等。,无操作数指令,如十进制运算调整和符号位扩展等。,三操作数指令,如有符号整数乘法指令IMUL等。,2.4.5算术运算类指令,2-116,1.加法/减法指令,操作:ADD:(目的)+(源)目的SUB:(目的)-(源)目的ADC:(目的)+(源)+CF目的SBB:(目的)-(源)-CF目的,2.4.5算术运算类指令,2-117,加法/减法指令使用说明:,ADD/SUB指令用于单个字节/字/双字数的加/减法运算;ADC/SBB指令则常用于多精度或多字节/多字/多双字数的加/减法运算。INC/DECREG/MEM与ADD/SUBREG/MEM,1指令的异同:两者都执行加1/减1操作,但前者不影响进位,而后者影响。,2-118,解:用8086指令MOVAX,YSUBX,AX;低16位字数据相减MOVAX,2YSBB2X,AX;高16位字数据相减,用80386/486指令MOVEAX,DWORDPTRYSUBDWORDPTRX,EAX,两个32位双字数据X、Y定义如下:XDW1234H,5678HYDW3FEAH,A033H请编写计算X=XY的程序段(低位在前),例2.9,2.4.5算术运算类指令,2-119,2.整数变反指令(求补),格式:NEG目的操作数REG/MEM操作:0-(目的操作数)目的操作数应用:常用于求负数的绝对值。,解:TESTAX,8000H;测试符号位JZNEXTNEGAXNEXT:HLT,例2.10求AX中存放的有符号数的绝对值。,2.4.5算术运算类指令,2-120,3.比较指令,格式:CMP目的操作数,源操作数REG,REG/MEM/IMMMEM,REG/IMM,CMP与SUB指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。,操作:(目的操作数)(源操作数),根据操作结果修改状态标志,但不改变目标操作数值。,2.4.5算术运算类指令,2-121,表2.8状态标志反映的两数关系,2-122,乘法指令分为有符号数和无符号数乘法指令(IMUL/MUL)。无符号数乘法指令只有单操作数格式一种;有符号数乘法指令则有单操作数、双操作数和三操作数三种格式。,4.乘法指令,2.4.5算术运算类指令,2-123,1)单操作数乘法指令,格式:MUL/IMUL源操作数REG/MEM,操作:MUL和IMUL分别为有符号数和无符号数乘法指令,两种指令除操作数类型不同外,操作完全相同:,字:(AX)(源操作数)DX:AX,双字:(EAX)(源操作数)EDX:EAX,2.4.5算术运算类指令,2-124,单操作数乘法指令的被乘数是隐含的(在AL/AX/EAX中),而结果长度一定是被乘数/乘数的二倍(在AX/DX:AX/EDX:EAX中)。源操作数不能为立即数。源操作数为存储器操作数,且类型不能确定时,要显式说明操作数类型。要根据是有符号数还是无符号数,分别选用IMUL或MUL指令指令执行影响CF和OF标志,若指令执行后,结果的高一半是有效数值位,则CF=OF=1,否则CF=OF=0。,乘法指令使用说明:,2.4.5算术运算类指令,2-125,例2.11,解:MULBL指令完成AL和BL中的两个无符号数相乘:,AH含有效数字,OF=1、CF=1。,(AX)=0A8CH,12C,+96,若(AL)=96H,(BL)=12H,求分别执行MULBL和IMULBL指令后的结果及OF、CF状态。,2.4.5算术运算类指令,2-126,AH含有效数字,OF=1、CF=1。,解:IMUL执行有符号数乘法,此时AL中的数是负数,真值为-6AH,即:,用补码表示:(AX)=F88CH,(AX)=-774H,D4,+6A,2.4.5算术运算类指令,2-127,格式:IMUL目的操作数,源操作数REG,REG/MEM/IMM操作:(目的操作数)(源操作数)目的操作数,3)三操作数乘法指令格式:IMUL目的操作数,源操作数,立即数REG,REG/MEM,IMM操作:(源操作数)(立即数)目的操作数,2)双操作数乘法指令,2.4.5算术运算类指令,2-128,5.除法指令,格式:DIVIDIV源操作数REG/MEM操作:按源操作数类型:,字节:(AX)/(源),商存于AL中,余数存于AH,字:(DX:AX)/(源),商存于AX中,余数存于DX,双字:(EDX:EAX)/(源),商在EAX中,余数在EDX,2.4.5算术运算类指令,2-129,说明:除法指令的被除数是隐含的,且长度一定是除数的二倍(在AX/DX:AX/EDX:EAX中)。所以,使用除法指令常要扩展被除数长度。扩展时无符号数一般用:MOVZXAX,ALMOVDX,0MOVEDX,0有符号数一般用:CBW/CWD/CDQ,2.4.5算术运算类指令,2-130,MOVAX,a;ab在CX:BX中MOVAX,c;c在DX:AX中;ab+c在DX:AX中;(ab+c)/a,商存入S,IMULb,MOVCX,DX,MOVBX,AX,CWD,ADDAX,BX,ADCDX,CX,IDIVa,MOVS,AX,例2.12下列程序段完成S=(ab+c)/a的运算,其中变量a、b、c和S均为带符号的字数据,结果的商存入S,余数则不计,填空完成下列程序。,2.4.5算术运算类指令,2-131,6.BCD调整指令,格式:AAAAASAAMAADDAADAS,功能:,AAA/AAS:未组合BCD加法/减法调整指令,隐含操作数为AL。,AAM:未组合BCD乘法调整指令,隐含操作数AX、AH、AL。将AX中乘积调整为两个未组合BCD数存于AH和AL。,DAA/DAS:组合BCD加法/减法调整指令,隐含操作数为AL。,AAD:调整除法运算前AX中的被除数内容。操作:(AH)10+(AL)AX,2.4.5算术运算类指令,2-132,BCD调整指令说明:,DAA/DAS、AAA/AAS隐含的操作寄存器是AL,所以BCD码加法/减法只能用累加器AL为目的操作数的加法/减法指令,且加法/减法指令后要跟调整指令。,多字节、字和双字BCD加法/减法只能用带进位/借位的字节加法/减法指令实现。,ASCII码数的运算与非压缩BCD码数的运算基本相同,但要保持结果仍为ASCII码,则需转换。,AAM隐含的操作寄存器是AX,要跟在MUL指令之后,AAD指令的功能不是将除法后的结果调整为BCD码,而是在除法前将AX保存的两位非压缩BCD数调整为二进制数。该指令要放在DIV指令之前。,2.4.5算术运算类指令,2-133,例2.13,解:MOVAL,BYTEPTRXADDAL,BYTEPTRY;低位相加DAA;B

温馨提示

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

评论

0/150

提交评论