微处理器及指令系统_第1页
微处理器及指令系统_第2页
微处理器及指令系统_第3页
微处理器及指令系统_第4页
微处理器及指令系统_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

第二章微处理器和指令系统参考书目:1、《计算机组成技术》李东,黄庆成等主编电子工业出版社2、《计算机组成原理》唐朔飞主编高等教育出版社12第二章微处理器和指令系统2.18086微处理器的内部结构2.2 寻址方式2.3处理器的指令系统2.4 流水线技术2.5

RISC3微处理器概述:

从外观上看处理器:矩形或正方形的块状物,通过众多引脚(也称管脚)与主板相连。

片内总线:处理器内部,分为片内控制总线和片内数据总线。片外总线:处理器与主存储器和输入/输出设备之间信号传输的线路,简称总线。2.18086微处理器的内部结构48086是全16位微处理器(内外数据总线都为16位)8088是准16位微处理器(内数据总线为16位,外数据总线为8位)8086/8088除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。

58086的引脚图14023933843753663573483393210311130122913281427152616251724182319222021地AD14AD13AD12AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLK地Vcc(5V)AD15A16/S3A17/S4A18/S5A19/S6BHE/S7MN/MXRDHOLD(RQ/GT0)HLDA(RQ/GT1)WR(LOCK)M/IO(S2)DT/R(S1)DEN(S0)ALE(QS0)INTA(QS1)TESTREADYRESETADi表示地址总线与数据总线复用同一个引脚Ai/Si表示地址总线与控制总线复用同一个引脚。这叫做总线分时复用。68088的引脚图14023933843753663573483393210311130122913281427152616251724182319222021地A14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLK地Vcc(5V)A15A16/S3A17/S4A18/S5A19/S6SS(HIGH)MN/MXRDHOLD(RQ/GT0)HLDA(RQ/GT1)WR(LOCK)M/IO(S2)DT/R(S1)DEN(S0)ALE(QS0)INTA(QS1)TESTREADYRESET8位的数据总线NMI非屏蔽中断请求信号输入INTR可屏蔽中断请求信号输入INTA中断响应信号输出地址锁存信号输出7电源引脚(Vcc),接地引脚(GND)按照传输信号类别的不同,这些引脚可以分为数据总线引脚、地址总线引脚和控制总线引脚数据总线引脚:若数据总线的宽度是8位,则数据总线引脚将被命名为D0,D1,…,D7;若数据总线的宽度是16位,则数据总线引脚将被命名为D0,D1,…,D15。8地址总线引脚:若处理器的访存地址宽度是10位,则地址总线引脚将被命名为A0,A1,…,A9;若处理器的访存地址宽度是20位,则地址总线引脚将被命名为A0,A1,…,A19控制总线引脚:时钟CLK、复位RESET、总线请求HRQ、总线允许HLDA、中断请求INTR、中断响应INTA、读RD、写WR等。

9在8086/8088的设计中,引入了两个重要的结构概念:1、指令流水线2、存储器分段管理这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。正是这两个概念的引入,使8086/8088比原来的8位MPU在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。108086/8088在结构上分为:总线接口部件(BusInterfaceUnit,BIU)执行部件(ExecutingUnit,EU)总线接口部件负责取指令,执行部件负责执行指令,从而构成了一个“两段的流水线”。取指令1执行指令1时间TEUBIU取指令2执行指令2取指令3执行指令31、指令流水线结构11654321通用寄存器组AXBXCXDX外部总线内部暂存器IPESSSDSCS运算寄存器ALU标志输入输出控制电路∑执行部分控制电路执行部件(EU)总线接口部件(BIU)内部总线地址加法器16位16位20位16位(1)执行部件EU

执行部件的功能就是负责从指令队列取指令并执行。从结构图可见,执行部件由下列几个部分组成:

(1)算术逻辑单元ALU

(2)标志寄存器FLAG;(3)数据暂存寄存器;

(4)通用寄存器组:包括4个16位位数据寄存器AX、BX、CX、DX;4个16位地址指针与变址寄存器SP,BP,SI,DI。

(5)EU控制电路

(2)总线接口部件(BIU)

总线接口部件根据执行部件的请求,负责与存储器、I/O端口传送数据。由下列各部分组成:(1)4个段地址寄存器;

CS——16位的代码段寄存器;

DS——16位的数据段寄存器;

ES——16位的扩展段寄存器;

SS——16位的堆栈段寄存器;(2)16位的指令指针寄存器IP;(3)20位的地址加法器;(4)6字节的指令队列缓冲器。(3)“流水线”结构

每当8086的指令队列中有1个或2个空字节,BIU就会自动把指令取到指令队列中。而同时EU从指令队列取出一条指令,并用几个时钟周期去分析、执行指令。当指令队列已满,而且EU对BIU又无总线访问请求时,BIU便进入空闲状态。在执行转移、调用和返回指令时,指令队列中的原有内容被自动清除,并要求BIU从新的地址重新开始取指令,新取的第一条指令将直接经指令队列送到EU去执行,随后取来的指令将填入指令队列缓冲器。

寄存器用来暂时存放参加运算的操作数和运算过程中的中间结果,使得在程序执行的过程中不必每时每刻都要到存储器中存取数据。8086CPU中可供编程使用的有14个16位寄存器,按其用途可分为3类:通用寄存器、段寄存器、指针和标志寄存器。8086/8088的寄存器组结构16DISIBPSPDLDHCLCHBLBHALAHFRIPESSSDSCS数据寄存器指针寄存器和变址寄存器段寄存器指令指针标志寄存器AXBXCXDX作为累加器用,在加法运算中参与运算,结果存于累加器中;所有的I/O指令都隐含地使用AX与外部设备传送信息。作为通用寄存器使用在采用基址寻址方式时,用作基址寄存器作为通用寄存器使用;常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。作为通用寄存器使用;在一些指令中,通常用它来存放数据,所以又称为数据寄存器;在做双字长运算时,将DX和AX组合在一起存放双字长数,用DX存放高位字。当前代码段的段地址,指令就是从这段取出当前代码段的偏移地址。又称为程序计数器,控制程序中指令执行的顺序基址指针寄存器,指示一组数据的起始地址源变址寄存器目的变址寄存器用于确定数据段中某一存储单元的地址指向数据段,程序变量存于此段指向附加段,这个段用来存放经过处理的中间数据堆栈指针寄存器,指示堆栈栈顶的偏移地址指向堆栈段,堆栈操作使用这段存储空间17

8086/8088的标志寄存器(FR):

(1)状态标志:状态标志表示前面操作执行后,算术逻辑单元所处的状态,这些状态常作为后继指令执行的条件。状态标志有6个:符号标志(SF)、零标志(ZF)、奇偶标志(PF)、进位标志(CF)、辅助进位标志(AF)和溢出标志(OF)。(2)控制标志:是人为设置的,每一个控制标志负责控制某一种特殊的功能。控制标志有3个:方向标志(DF)、中断标志(IF)和陷阱标志(TF)18状态标志(1)符号标志SF。与计算结果的最高位相同,表示计算结果的正/负。0表示正,1表示负。(2)零标志ZF。若计算结果为零,则ZF=1,否则=0。(3)奇偶标志PF。若计算结果的低8位中1的个数为偶数,则PF=1,否则=0。(4)进位标志CF。若执行的加法运算在最高位产生进位,或者执行的减法运算引起最高位产生借位,则CF=1,否则=0。此外,带进位的循环移位也可能会改变CF。可以用指令STC将CF置1,用指令CLC将CF清0,用指令CMC将CF取反。19状态标志(5)辅助进位标志AF。若执行加法运算时第3位向第4位进位(即低半字节向高半字节),或者执行减法运算时第3位从第4位借位,则AF=1,否则=0。(6)溢出标志OF。若计算过程产生溢出,则OF=1,否则=0。溢出是指字节运算的结果超出了–128~+127的范围,或者字运算的结果超出了–32768~+32767的范围。在进行加法运算时,每当次高位向最高位有进位而最高位没有向前进位,或者最高位向前进位而次高位没有向最高位进位,则ALU置OF为1。20控制标志(1)方向标志DF。这是控制串操作指令的标志。若DF=0,则串操作过程中地址将不断增值,否则不断减值。可用指令STD将DF置1,用指令CLD将DF清0。(2)中断标志IF。这是控制可屏蔽中断的标志。如果IF=0,则8086/8088对可屏蔽中断请求不能做出响应,否则可以响应可屏蔽中断请求。可用指令STI将IF置1,用指令CLI将IF清0。“将IF置1”称为“开中断”,“将IF清0”称为“关中断”。21控制标志(3)陷阱标志TF。这是控制8086/8088是否进入单步执行状态的标志。若TF=1,则8086/8088进入单步执行状态或跟踪方式执行指令状态,即每条指令执行完后,微处理器暂停(进入陷阱),显示处理器内部各寄存器的值。进入单步执行状态便于程序的调试。如果TF=0,则连续执行指令。

222、存储器分段管理结构存储器为什么要分段呢?16位微处理器,常规上管理216=64KB的存储空间这样的存储空间满足不了应用的要求。用什么方法来扩大呢?将正常管理的64KB存储空间定义为一个段让微处理器能够管理多个这样的段通过分段存储结构,8086/8088能够管理1MB的存储空间23存储器分段后如何来管理呢?每个段的起始地址称为:段基址或段地址每个段内的地址称为:段内偏移地址一个物理存储单元就可以通过“段地址:偏移地址”来唯一确定了如何管理“段地址”和“偏移地址”呢?设置多个段基址寄存器设置多个偏移地址寄存器都有哪些“段基址寄存器”和“偏移地址寄存器”呢?24依照用途的不同,可分为如下段代码段(CodeSegment,CS)数据段(Data

Segment,DS)堆栈段(StackSegment,SS)附加数据段(ExtendedData

Segment,ES)存储程序(指令)代码。其段基址存放于CS寄存器,段内偏移地址存放于IP寄存器存储程序定义的变量。段基址存放于DS寄存器,段内偏移地址存放于SI、DI或BX寄存器管理系统堆栈。段基址存放于SS寄存器,段内偏移地址存放于SP或BP寄存器存储经过处理的中间变量。段基址存放于ES寄存器,段内偏移地址存放于SI、DI或BX寄存器存储器分段管理结构25逻辑地址:由段基址和相对于该段的偏移地址共同描述的地址00000H----FFFFFH例如:52000H例如:5000H:2000H段基址偏移地址段基址寄存器管理程序设计中使用的,方便程序设计物理地址:20根地址线所表示的地址

260000段地址如何根据16位的段地址和16位的段内偏移地址来计算20位的物理地址呢?

19…43…0段地址左移四位偏移地址151413……210∑20位的物理地址27物理地址的计算方法段地址左移四位,再加上偏移地址,就得到20位的物理地址。5000H:2000H逻辑地址52000H物理地址计算寻址内存…………..00000HFFFFFH282.2寻址方式

所谓寻址方式(Addressing)指的是指令按照何种方式寻找或访问到所需的操作数或信息。寻址方式分为指令寻址和数据寻址。指令寻址是为了找到下一条指令;数据寻址是为了找到本条指令所需的操作数。

29顺序(PC)+1PC跳跃由转移指令指出LDA1000ADD1001DEC1200JMP7LDA2000SUB2001INCSTA2500LDA1100...0123456789PC+1指令地址寻址方式指令地址指令顺序寻址1顺序寻址2顺序寻址3跳跃寻址7顺序寻址82.2寻址方式

1.指令寻址

302.2寻址方式

(1)立即数寻址(2)直接寻址(3)间接寻址(4)寄存器寻址

1.指令寻址

2.数据寻址

(5)寄存器间接寻址(6)基址寻址(7)变址寻址(8)堆栈寻址31形式地址指令字中的地址有效地址操作数的真实地址约定

指令字长=存储字长=机器字长1.立即寻址指令执行阶段不访存

A的位数限制了立即数的范围形式地址A操作码寻址特征OP

#

A立即寻址特征立即数可正可负补码形式地址A就是操作数立即数寻址MOVAX,4567H;将立即数4567H送到AXMOVBL,78H;将立即数78H送到BL32332.直接寻址EA=A操作数主存寻址特征LDAAAACC

执行阶段访问一次存储器

A的位数决定了该指令操作数的寻址范围操作数的地址不易修改(必须修改A)有效地址由形式地址直接给出直接寻址MOVAX,DS:[3000H]34353.间接寻址EA=(A)有效地址由形式地址间接提供OPA寻址特征AEA主存EAA1EA

A1主存

EA10执行指令阶段2次访存可扩大寻址范围便于编制程序OPA寻址特征A一次间址多次间址操作数操作数多次访存364.寄存器寻址EA=Ri执行阶段不访存,只访问寄存器,执行速度快OPRi寻址特征寄存器个数有限,可缩短指令字长操作数………………R0RiRn寄存器有效地址即为寄存器编号MOVEAX,EDXINCCLMOVEAX,EDXINCCL37EA=(Ri

)5.寄存器间接寻址

有效地址在寄存器中,操作数在存储器中,执行阶段访存操作数主存OPRi寻址特征

便于编制循环程序地址………………R0RiRn寄存器有效地址在寄存器中寄存器间接寻址MOVAX,[BP]38396.基址寻址(1)采用专用寄存器作基址寄存器EA=(BR)+ABR为基址寄存器OPA操作数主存寻址特征ALUBR

可扩大寻址范围

便于程序搬家

BR内容由操作系统或管理程序确定

在程序的执行过程中BR内容不变,形式地址A可变40(2)

采用通用寄存器作基址寄存器操作数主存寻址特征ALUOPR0AR0

作基址寄存器由用户指定哪个通用寄存器作为基址寄存器通用寄存器R0Rn-1R1…基址寄存器的内容由操作系统确定在程序的执行过程中R0内容不变,形式地址A可变41MOVDX,[AX+15]427.变址寻址EA=(IX)+AOPA操作数主存寻址特征ALUIX可扩大寻址范围便于处理数组问题

IX的内容由用户给定IX为变址寄存器(专用)在程序的执行过程中IX内容可变,形式地址A不变通用寄存器也可以作为变址寄存器43MOVAX,[DI+MASK]448.堆栈寻址(1)堆栈的特点堆栈硬堆栈软堆栈多个寄存器指定的存储空间先进后出(一个入出口)栈顶地址

由SP

指出–11FFFH+12000H进栈(SP)–1SP出栈(SP)+1SP栈顶栈底2000HSP2000H……1FFFHSP1FFFH栈顶栈底进栈出栈1FFFH栈顶2000H栈顶45(2)堆栈寻址举例15200HACCSPX栈顶200H栈底主存151FFHACCSP15栈顶200H栈底主存X1FFHPUSHA前PUSHA后POPA前POPA后Y1FFHACCSPX栈顶200H栈底主存151FFH15200HACCSP栈顶200H栈底主存X1546例:假定8086工作在实模式下,(DS)=1000H,(SS)=2000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,变量TABLE的偏移地址为0100H。请指出下列指令的源操作数字段是什么寻址方式?它的有效地址(EA)和物理地址(PA)分别是多少?⑴MOVAX,[1234H]⑵MOVAX,TABLE⑶MOVAX,[BX+100H]⑷MOVAX,TABLE[BP][SI]2.3.1指令的操作码与操作数指令操作码(OperationCode)指令操作数(Operand)冯·诺依曼型计算机机器指令的逻辑格式规定了指令所具有的功能。课程中主要用汇编语言助记符表示。指令所要处理的数据。常以数据所在存储单元的地址形式给出。也称“指令地址码”。2.3处理器的指令系统

2.3.1指令的操作码与操作数一条指令中,操作数可能有一个、两个或三个,甚至更多。当然,操作数的个数也可以是零,即指令没有操作数,如停机指令。在这些操作数中,作为处理单元输入的叫源操作数(SourceOperand),用于存放处理结果的叫目的操作数(DestinationOperand)。2.3处理器的指令系统

2.3.1指令的操作码与操作数 “数据表示”:指令中所能表示的操作数数据类型,即能够被计算机硬件直接辨识的操作数数据类型。 常用的“数据表示”有定点数(含有符号数和无符号数)、浮点数(含单精度浮点数和双精度浮点数)、字符、逻辑数(又称布尔型数据),可以由硬件直接提供。2.3处理器的指令系统

2.3.1指令的操作码与操作数

“数据结构”:程序员在程序中所能够使用的数据类型及其之间的结构关系。比如:数组、字符串、结构体、队列、链表、树、图、堆栈等。在硬件的基础上由软件实现“数据表示”是数据结构的组成元素,是数据结构的子集。2.3处理器的指令系统

512.3处理器的指令系统

通用计算机系统的指令集可分为5类基本指令:(1)算术/逻辑/移位指令(简称算逻指令)(2)数据传送指令(简称数传指令)(3)控制转移指令(4)输入/输出指令(5)处理器控制及调试指令2.3.2指令的基本功能

52(1)算逻指令定点加法指令ADD定点减法指令SUB定点乘法指令MUL定点除法指令DIV加1指令INC减1指令DEC比较指令CMP浮点加法指令ADDF浮点减法指令SUBF浮点乘法指令MULF浮点除法指令DIVF十进制数算术运算指令使用这些指令时,要注意它们对处理器中状态标志位的影响算术指令2.3.2指令的基本功能

53(1)算逻指令“与”运算指令AND“或”运算指令OR“非”运算指令NOT“异或”运算指令XOR位测试位清除位求反

算术左移指令算术右移指令逻辑左移指令逻辑右移指令带进位循环左移指令不带进位循环左移指令带进位循环右移指令不带进位循环右移指令逻辑指令移位指令2.3.2指令的基本功能

54(2)数传指令根据数据的流向分:寄存器与寄存器之间的数据传送寄存器与主存储器单元之间的数据传送寄存器与堆栈之间的数据传送堆栈与主存储器单元之间的数据传送内存单元与内存单元之间的数据传送2.3.2指令的基本功能

55(2)数传指令根据传输的功能分:一般传送指令实现数据复制功能,即把源操作数的内容写入目的操作数。其汇编语言助记符通常为MOV。在有些计算机上,将主存储器单元的内容写入寄存器的数据传送指令,其汇编语言助记符为LOAD;将寄存器内容写入主存储器单元的数据传送指令,其汇编语言助记符为STORE。2.3.2指令的基本功能

56(2)数传指令根据传输的功能分:堆栈操作指令压入栈顶PUSH弹出栈顶POPPUSH的源操作数和POP指令的目的操作数,一般是寄存器号,但也可能是主存储器单元地址2.3.2指令的基本功能

57(2)数传指令上述两类数据指令的数据流动是单方向的。要实现两个数据的交换,需要编写三条指令并额外占用一个存储单元。因此大多数计算机都提供“数据交换指令”来简化双向数据流动的实现,如Intel80x86中的XCHG指令。这类指令的源操作数和目的操作数一般都是寄存器,至多允许源操作数是主存储器单元。数据交换指令的执行时间一般较长。2.3.2指令的基本功能

58(3)控制转移指令跳转指令JUMP分支指令子程序调用CALL/返回指令RET循环控制指令LOOP中断系统指令

2.3.2指令的基本功能

将指令操作数的内容写入PC之中,强制改变指令执行的顺序。也称无条件转移指令59(3)控制转移指令跳转指令JUMP分支指令根据特定条件(往往是上一条指令的执行结果),决定程序是顺序执行还是转移到一个新的位置执行,即有条件地改变指令执行的顺序。也称条件转移指令。条件转移指令可能依据的条件有:

为零、为正/负数、发生进位/借位、为奇数/偶数、发生溢出或以上条件的组合。

2.3.2指令的基本功能

60(3)控制转移指令分支指令条件转移指令又分为“绝对转移”和“相对转移”两种。对于“绝对转移”,当条件满足时,计算机将把该指令中所含操作数的内容直接写入PC中。对于“相对转移”,当条件满足时,计算机将把该指令中所含操作数的内容与PC中的内容相加后,把结果写入PC中。

2.3.2指令的基本功能

61常见的条件转移指令有:等于零转移BEQ不等于零转移BNEQ小于转移BLS大于转移BGT小于等于转移/不大于转移BLEQ大于等于转移/不小于转移BGEQ不带符号小于转移BLSU不带符号大于转移BGTU不带符号小于等于转移/不带符号不大于转移BLEQU不带符号大于等于转移/不带符号不小于转移BGEQU没有进位转移BCC有进位转移BCS没有溢出转移BVC有溢出转移BVS2.3.2指令的基本功能

62(3)控制转移指令子程序调用CALL/返回指令RET在程序中,有一些具有特定功能的程序段会被反复使用。为了提高程序的可读性、可重用性和可维护性,人们将这样的程序段独立出来,将其定义成一个子程序。这样,在需要执行特定功能时,主程序中不再需要编写一个程序段,而只需要编写一条调用子程序的指令即可。

2.3.2指令的基本功能

63(3)控制转移指令子程序调用CALL/返回指令RET调用子程序的指令格式:CALLSubprogram_Name。功能是,首先把当前程序的断点(也称主调程序的返回地址,即当前程序计数器PC中的值)保存到系统堆栈中,然后由子程序名Subprogram_Name求得子程序的入口地址,最后把子程序的入口地址写入PC,从而将程序控制转移至被调子程序。返回指令:RET指令的功能是把保存在堆栈中的程序断点弹回到PC之中。64子程序调用和返回CALLSUB1.........CALLSUB2…...CALLSUB2…RETURNRETURN......主程序地址200021002101子程序SUB1240025002501256025612700主存空间分配程序执行流程子程序SUB265(1)算逻指令(2)数传指令(3)控制转移指令(4)输入/输出指令包括:启动输入/输出设备、停止输入/输出设备、测试输入/输出设备及数据的输入或输出等指令。例如,Intel80x86中的输入指令为IN指令,输出指令为OUT指令。

2.3.2指令的基本功能

66(5)处理器控制及调试指令包括各种设置/清除标志位(如陷阱标志、中断允许标志、处理器工作状态标志位)指令、特权指令、进程同步指令、调试指令、停机指令(HALT)等。调试指令用于硬件或软件的调试。硬件调试指令包括钥匙位置、开关状态的读取指令,重要寄存器和主存储器单元内容的显示等。软件调试指令包括断点的设置及跟踪指令,自陷阱指令等。2.3.2指令的基本功能

672.3.3指令的格式

涉及指令的操作码长度、指令“地址制”及采用的寻址方式、指令长度等三方面的问题。

68指令操作码的长度有定长和不定长两种选择。定长的操作码:可以简化指令译码器的设计与实现;不定长操作码(也称扩展操作码):可使常用指令拥有较短的操作码而不常用指令拥有较长的操作码,从而压缩程序所占的存储空间。在一条指令中出现几个操作数地址,这是指令的“地址制”所要解决的问题。一般情况下,指令中地址的个数,可以取4,3,2,1,0个。2.3.3指令的格式

69扩展操作码技术操作码的位数随地址数的减少而增加OPA1A2A3000000011110…A1A1A1…A2A2A2…A3A3A3…A2A2A2…A3A3A3…111111111111…000000011110…111111111111…111111111111…111111111111…000000011111…111111111111…111111111111…A3A3A3…000000011110…4位操作码8位操作码12位操作码16位操作码15条三地址指令15条二地址指令15条一地址指令16条零地址指令70地址制(1)四地址(2)三地址OPA1A2A3A486666A1

第一操作数地址A2

第二操作数地址A3

结果的地址A4

下一条指令地址若PC代替A4(A1)OP(A2)A38888OPA1A2A3(A1)OP(A2)A34次访存4次访存寻址范围26=64寻址范围28=256若A3用A1或A2代替设指令字长为32位操作码固定为8位71(3)二地址OPA1A281212(A1)OP(A2)A1(A1)OP(A2)A2或4次访存若ACC代替A1(或A2)若结果存于ACC(4)一地址(5)零地址OPA1824无地址码(ACC)OP(A1)ACC2次访存寻址范围212=4K寻址范围224=16M3次访存72“地址制”设计或改进的目的是为了压缩指令长度,缩短指令的执行时间。在相同的指令长度内,减少地址个数可以扩大所能表示指令的条数或操作数的寻址范围。同一条指令中不同操作数所采用的寻址方式可以相同或不同。一条指令中的操作数可以都存放在寄存器里,也可以把一个操作数存放在寄存器里,而另一个操作数存放在主存里,还可以把所有的操作数都存放在主存里。存放在主存里的操作数可以按基址寻址、变址寻址或间接寻址。2.3.3指令的格式

73指令字长指令字长决定于操作码的长度指令字长=存储字长2.指令字长可变操作数地址的长度操作数地址的个数1.指令字长固定按字节的倍数变化74固定长度的指令便于指令的存取和译码,但会限制操作数个数的增加和复杂寻址方式的使用;变化长度的指令的特点正好相反例如,IBMSystem370指令采用定长的8位操作码,有单地址、两地址和三地址三种地址制,不同的操作数可以采用不同的寻址方式,指令字长有16位、32位和48位三种。Intel公司8086/8088微处理器的指令格式2.3.3指令的格式

752.3.4几类常用8086指令详解数据传送指令算术运算指令逻辑运算与移位指令控制转移指令76重点关注:指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的特殊要求772.3.4.1数据传送指令数据传送是计算机中最基本、最常用的一类操作。•使用频率最高•不影响标志位•寻址方式最丰富特点:78传送指令(MOV)交换指令(XCHG)I/O指令(IN/OUT)装入有效地址指令(LEA)装入段寄存器指令(LDS、LES)压栈/弹栈指令(PUSH/POP/)791.传送指令指令操作:(源操作数)→目的操作数

指令格式:MOV目的操作数,源操作数

寻址规定: REG/MEM/SREG,REGREG/MEM,SREG REG/SREG,MEMREG/MEM,IMM8/16位通用寄存器8/16位存储器段寄存器8/16位立即数80通用寄存器(AX、BX、CX、DX、BP、SP、SI、DI)立即数CS存储器段寄存器(SS、DS、ES)MOV指令允许的传送关系81使用说明:源操作数和目的操作数的类型必须一致。目的操作数不能为立即数。CS和IP均不能用作指令的目的寄存器。段寄存器间不能直接传送,也不能直接将立即数送给段寄存器。源操作数为立即数,而目的操作数类型不确定时,要给目的操作数加类型说明。源操作数和目的操作数不能同为存储器操作数。82⑴MOVDS,100

[例2.3]识别下列指令的正确性,对错误的指令,说明错误的原因。⑵MOV[1000H],23H错。源、目的操作数不能同为存储器寻址。⑶MOV[1000H],[2000H]错。立即数不能直接赋给段寄存器。错。目的操作数长度不确定。⑷MOVDATA,1133H⑸MOVCS,AX依赖于DATA的定义错。不能用传送指令改变代码段寄存器。⑹MOVAX,[0100H+BX+BP]错。地址寄存器不能同为基址寄存器。832.交换指令操作:(目的操作数)(源操作数)格式:XCHG目的操作数,源操作数

REG/MEM, REG REG,MEM说明:

(1)基本用法同MOV指令;(2)该指令不影响标志位;

(3)不允许使用段寄存器。84[例]FIRST,SECOND已定义为字节变量,写出将变量FIRST和SECOND中内容交换的指令序列。

解:⑴用交换指令

XCHG AL,FIRST XCHG SECOND,AL XCHG AL,FIRST

⑵用MOV指令

MOV AL,FIRST MOV BL,SECOND MOV FIRST,BL MOV SECOND,AL85⑴输入指令格式:IN累加器,端口 AL/AX,IMM8AL/AX,DX操作:(I/O端口)→AL/AX⒊I/O指令直接寻址:指令给出的立即数是I/O端口地址间接寻址:

DX寄存器给出的是I/O端口地址86⑵输出指令格式:OUT端口, 累加器

IMM8,AL/AXDX,AL/AX操作:(AL/AX/EAX)→I/O端口说明:I/O端口有两种寻址方式

使用立即数的直接寻址,寻址范围为0~255;

使用DX寄存器的间接寻址,寻址范围为0~216-1。87格式:LEAr16,mem;r16<--mem的有效地址EA把源操作数的地址偏移量->目的操作数寄存器例LEAAX,[BP][DI]说明LEA指令处理变量的地址(EA)而不是变量的内容

LEA和MOV指令的比较

MOVBX,OFFSETVAL;将VAL的有效地址=>BXMOVBX,VAL;将VAL的值=>BXLEABX,VAL;将VAL的有效地址=>BX4.地址-目标传送指令88MOV指令用OFFSET操作不能直接取数组中任意元素的位移量,只能取数组的第一个元素的位移量,而LEA可以传送任意数组元素的位移量。如LEADX,BETA[BX][SI]LEA的源操作数必须是存储器操作数LEA不影响F标志896.压栈/弹栈指令格式:PUSH 源操作数

REG16/MEM16/IMM16

操作:(SP)-2→SP (源操作数)→(SS:SP)90格式:POP目的操作数

MEM16/REG16

操作:([SS:[SP])→目的操作数 (SP)+2→SP弹栈指令91堆栈指令的操作数只能为字。PUSH和POP要成对出现,以保持堆栈平衡。堆栈指令也隐含了一个目的/源操作数——堆栈。压栈顺序是先压高字节后压低字节,弹栈则是先弹低字节后弹高字节。(先进后出)使用说明:注意:(1)指令执行后不影响标志位;(2)不能用立即寻址方式;(3)目标操作数不能是CS。92[例]用堆栈操作指令将BX和CX中的两个16位数分别压入堆栈然后再弹出。解:

PUSH BX

;先压BX

PUSH CX

;后压CX

POP CX POP BX932.3.4.2算术运算指令包括:加/减法指令(ADD/ADC/SUB/SBB)加1/减1指令(INC/DEC)求补指令(NEG)数据宽度变换指令(CBW/CWD)比较指令(CMP)乘/除法指令(MUL/IMUL/DIV/IDIV)BCD调整指令(AAA/AAS/AAM/AAD/DAA/DAS)94⒈加法/减法指令

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

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

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

SBB:(目的)-(源)-CF→目的目的操作数,源操作数REG,REG/MEM/IMMMEM,REG/IMM格式:ADDSUBADCSBB95使用说明:ADD/SUB指令用于单个字节/字的加/减法运算;ADC/SBB指令则常用于多精度或多字节/多字的加/减法运算。INC/DECREG/MEM指令与ADD/SUBREG/MEM,1的异同:两者都执行加1/减1操作,但前者不影响进位,而后者影响。96加法指令对条件标志位的影响:SF=1;

结果为负0;

否则ZF=1;

结果为00;

否则CF=1;

和的最高有效位有向高位的进位0;

否则OF=1;

2个操作数符号相同,而结果符号与之相反0;

否则表示无符号数相加的溢出表示带符号数相加的溢出97减法指令对条件标志位的影响:CF=1;

减法转换为加法运算时无进位0;

否则OF=1;

2个操作数符号相反,而结果符号与减数相同0;

否则表示无符号数相减的溢出表示带符号数相减的溢出CF=1;

被减数最高有效位有向高位的借位0;

否则98

[例]两个32位双字数据X、Y定义如下:

XDW 1234H,5678HYDW3FEAH,A033H请编写计算X=X-Y的程序段(低位在前)。解:

MOV AX,YSUB X,AX ;低16位字数据相减

MOV AX,2[Y] SBB 2[X],AX ;高16位字数据相减

992.整数变反指令(求补)格式:NEG目的操作数

REG/MEM操作:0-(OP1)→OP1应用:常用于求绝对值。解:TESTAX,8000HJZNEXTNEGAXNEXT:HLT[例]:求AX中存放的有符号数的绝对值。1003.比较指令操作:(OP1)-(OP2),根据操作结果修改状态标志,但不改变目标操作数值。说明:⑴CMP指令常用于比较两个数,然后根据指令产生的状态标志进行程序转移。 ⑵CMP与SUB指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。格式:CMP 目的操作数,源操作数

REG,REG/MEM/IMM MEM,REG/IMM1014.乘法指令

乘法指令分为有符号数和无符号数乘法指令(IMUL/MUL)。

•无符号数乘法指令和有符号数乘法指令都是单操作数格式。102◆单操作数乘法指令格式:MUL/IMUL

源操作数

REG/MEM操作:MUL和IMUL分别为有符号数和无符号数乘法指令,两种指令除操作数类型不同外,操作完全相同:字:(AX)×(源操作数)→DX:AX字节:(AL)×(源操作数)→AX源操作数103说明:●单操作数乘法指令的被乘数是隐含的(在AL/AX中),而结果长度一定是被乘数/乘数的二倍(在AX/DX:AX中)。●源操作数不能为立即数。●要根据是有符号数还是无符号数,分别选用IMUL或MUL指令●指令执行影响CF和OF标志,若指令执行后,结果的高一半是有效数值位,则CF=OF=1,否则CF=OF=0。104

[例]若(AL)=96H,(BL)=12H,求分别执行MULBL和IMULBL指令后的结果及OF、CF状态。

解:MULBL完成AL和BL中的两个无符号数相乘,即:(AX)=(AL)×(BL)=96H×12H=0A8CH

IMULBL完成AL和BL中的两个有符号数相乘,此时AL中的数是负数,真值为-6AH,即:-6AH×12H=-774H

用补码表示:(AX)=F88CH

AH含有效数字,∴OF=1、CF=1。AH含有效数字,∴OF=1、CF=1。1055.除法指令格式:DIV∕IDIV源操作数

REG/MEM操作:按源操作数类型:●字节:(AX)/(源),商存于AL中,余数存于AH。●字:(DX:AX)/(源),商存于AX中,余数存于DX。106除法指令的被除数是隐含的,且长度一定是除数的二倍(在AX/DX:AX中)。所以,使用除法指令常要扩展被除数长度。有符号数一般用:CBW/CWD源操作数不能为立即数对所有条件标志位均无定义说明:107

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

MOVAX,c④;c在DX:AX中⑤;a×b+c在DX:AX中⑥⑦;商存入S⑧IMULbMOVCX,DXMOVBX,AXCWDADDAX,BXMOVDX,CXIDIVaMOVS,AX[例]下列程序段完成S=(a×b+c)/a的运算,其中变量a、b、c和S均为带符号的字数据,结果的商存入S,余数则不计,请在下列空格中填入合适的指令。 1082.3.4.3逻辑运算和移位指令

1.逻辑运算指令逻辑运算指令包括AND、OR、XOR、NOT和TEST指令,所有指令都对其操作数按位进行逻辑运算。操作数可以是字节、字。109功能:分别按位进行逻辑“与”、“或”、“异或”、“测试”和“非”。◆格式:AND ORXORTEST

目标操作数,源操作数

REG,REG/MEM/IMMMEM,REG/IMM

NOT目标操作数

REG/MEM逻辑运算指令110使用说明:①逻辑运算指令除NOT指令外,都影响标志寄存器的状态标志位,且逻辑运算后进位标志CF一定为0,所以逻辑运算指令常用于清0和清进位位。②编程时要根据操作合理选用指令,一般:●对某些二进制位‘清零’用逻辑‘与’指令AND;

●对某些二进制位‘置位’用逻辑‘或’指令OR;

●对某些二进制位‘求反’用逻辑‘异或’指令XOR,全部位‘求反’用逻辑‘非’指令NOT。111

③AND指令与TEST指令的相同之处是都执行按位“与”操作,两者执行后对标志寄存器中状态标志位的影响相同,不同之处是前者改变目标操作数的值,而后者并不改变目标操作数的值。所以TEST指令与CMP指令的用法类似,用于产生按位测试的条件码。112[例]写出一条能完成下述操作的指令:

⑴将AX的高字节清零,低字节不变;

⑵将BX的低字节置成全‘1’,高字节不变;

⑶将CX的高字节变反,低字节不变。

1132.移位指令

移位指令包括:算术移位指令(SAL/SAR)逻辑移位指令(SHL/SHR)循环移位指令(ROR/ROL/RCR/RCL)114算术/逻辑左移指令(SAL/SHL)CF0算术右移指令(SAR)CF逻辑右移指令(SHR)CF0115循环左移指令(ROL)循环右移指令(ROR)CFCF带进位位循环左移指令(RCL)CF带进位位循环右移指令(RCR)CF116使用说明移位指令的源操作数采用立即数寻址时,8086指令只能为1。移位指令常用于二进制数的倍乘和倍除,即算术/逻辑移n位,相当于把二进制数乘以或除以2n。要注意算术右移(SAR)与逻辑右移(SHR)的区别:前者在符号位和数值位依次右移的同时,用符号位充填符号位,而后者用0充填符号位。所以,有符号和无符号数倍乘用SHL/SAL均可,但倍除时,有符号数用SAR和无符号数用SHR。移位指令也常用于循环控制,如逻辑尺控制循环。1172.3.4.4控制转移指令

控制转移指令包括:无条件转移指令(JMP)调用/返回指令(CALL/RET)条件转移指令(JCC)循环控制指令(LOOP)中断指令(INT)五类。控制转移指令的共同特点是可以改变CS:IP的内容,从而改变程序执行顺序。1182.3.5关于指令系统的说明正确使用指令系统,关键要弄清楚:▲指令的各种类型▲每条指令的功能及格式▲每条指令对操作数的要求▲指令执行后对标志寄存器的影响源/目的操作数及其寻址方式操作数长度显式还是隐式▲指令运用的多样性与优化1191.应把指令格式(句法)与寻址方式联系起来理解、掌握。

每条指令的显式操作数,无论是OP1、OP2,都无非是立即数、寄存器数或存储器数,其对应的寻址方式可能是前面所讲的寻址方式之一。1202.使用指令时,要特别注意弄清楚指令隐含的操作寄存器例如:乘、除法指令的单操作数格式下,只显式指出了源操作数的乘数或除数,但应注意目的操作数和源操作数的被乘数/被除数必须存放在A累加器或DX:AX中。1213.对带符号和无符号数,许多同种操作却要使用不同的指令。例如:指令名称对带符号数对无符号数乘法指令IMULMUL除法指令IDIVDIV移位指令*

SAL/SARSHL/SHR*算术/逻辑左移相同,但右移过程不同。例如:设AX=8520HSHRAX,1后,结果是AX=4290HSARAX,1后,结果是AX=C290H1224.要严格区分指令是对地址还是对地址中的内容(数据)进行操作例如:LEABX,TABLE;TABLE的偏移地址→BXMOVBX,TABLE*

;字变量TABLE中的内容→BXMOVBX,OFFSETTABLE;TABLE的偏移地址→BXXCHGAX,BX;BX中的内容与AX中的内容变换XCHGAX,[BX];BX所指示的地址(内存单元)中;的内容与AX中的内容变换*当将TABLE作为一个变量用数据定义伪指令定义过时,它是一个符号地址;当将它作为一个数用EQU或等号"="定义过时,它是一个立即数。1232.4.1如何提高机器速度1.提高访存速度2.提高I/O和主机之间的传送速度提高整机处理能力高速芯片Cache多体并行多总线DMAI/O处理机通道高速器件改进系统结构,开发系统的并行性中断3.提高运算器速度高速芯片改进算法快速进位链2.4流水线技术1242.4.2系统的并行性时间上互相重叠2.并行性的等级指令级(指令之间)过程级(程序、进程)两个或两个以上事件在同一时刻

发生两个或两个以上事件在同一时间段

发生并行1.并行的概念粗粒度软件实现细粒度硬件实现并发同时125取指令3执行指令32.4.3指令流水原理2.指令的二级流水1.指令的串行执行取指令

取指令部件

完成总有一个部件空闲指令预取若取指

和执行

阶段时间上完全重叠指令周期减半速度提高1倍…执行指令

执行指令部件

完成取指令1执行指令1取指令2执行指令2取指令3执行指令3取指令2执行指令2取指令1执行指令1126必须等上条

指令执行结束,才能确定下条

指令的地址造成时间损失3.影响指令流水效率加倍的因素(1)执行时间>取指时间

(2)条件转移指令

对指令流水的影响

解决办法

?取指令部件指令部件缓冲区执行指令部件猜测法1274.指令的六级流水六级流水14个时间单位串行执行6×9=

54

时间单位完成一条指令6个时间单位COFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFI指令1指令2指令3指令4指令5指令6指令7指令8指令91234567891011121314t取指译码地址取数执行写结果128指令1与指令4冲突指令2与指令5冲突指令1、指令3、指令6冲突……COFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFI指令1指令2指令3指令4指令5指令6指令7指令8指令91234567891011121314t2.4.4影响指令流水性能的因素1.访存冲突解决办法•指令存储器和数据存储器分开•指令预取技术(适用于访存周期短的情况)取指译码地址取数执行写结果1292.相关问题程序的相近指令之间出现某种关联使指令流水出现停顿影响流水线效率(1)控制相关WOEIFOCODIWOEIFODIFIFIDIFICOFIFOCODIFIWOEIFOCODIFIDIFOEIWOEIFOCOFIDICOWODIFICOFI指令1指令2指令3指令4指令5指令6指令7指令15指令161234567891

温馨提示

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

评论

0/150

提交评论