第2章微处理器与指令系统.ppt

上传人:sccc 文档编号:5330837 上传时间:2023-06-26 格式:PPT 页数:158 大小:3.55MB
返回 下载 相关 举报
第2章微处理器与指令系统.ppt_第1页
第1页 / 共158页
第2章微处理器与指令系统.ppt_第2页
第2页 / 共158页
第2章微处理器与指令系统.ppt_第3页
第3页 / 共158页
第2章微处理器与指令系统.ppt_第4页
第4页 / 共158页
第2章微处理器与指令系统.ppt_第5页
第5页 / 共158页
点击查看更多>>
资源描述

《第2章微处理器与指令系统.ppt》由会员分享,可在线阅读,更多相关《第2章微处理器与指令系统.ppt(158页珍藏版)》请在三一办公上搜索。

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

2、8微处理器,内部结构指令流水线存储器分段,8086是全16位微处理器,8088是准16位微处理器。二者除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。,1.内部结构,2.1.1 8086/8088微处理器,20位,AB,EU控制电路,总线控制电路,通用寄存器,累加器,基址寄存器,计数寄存器,数据寄存器,堆栈指针,基址指针,目的变址,源变址,指针寄存器,变址寄存器,地址加法器,运算暂存器,ALU,标志寄存器,指令指针,内部暂存器,指令队列,总线接口单元(BIU),执行单元(EU),外部总线,8086/8088,DB,8088:8位8086:16位,CS

3、,DS,SS,ES,IP,1 2 3 4 5 6,8位,8088,8086,AX AH ALBX BH BLCX CH CLDX DH DL,SPBPDISI,ALU DB,16位,8086 CPU内部指令执行流程段寄存器CS 程序指针寄存器IP 内容经过地址加法器形成20 位地址;由CPU内部地址总线AB,经过总线地址控制电路,向外部总线发读取指令的的控制信号,外部总线开始总线操作;读取指令送入到指令队列中,等待执行;EU单元从队列中取一条指令到EU控制电路,译码指令需要做的系列操作,包括寄存器的内容送累加器;操作结果经过内部数据总线,存放到寄存器或内部暂存器,同时置FR;根据DS寄存器的内

4、容,及指令寻址方式产生的偏移量,经过地址加法器,形成数据保存地址,并送到外部总线。CPU 发写总线操作命令,将暂存器的内容,通过总线,写到指定内存单元。,2.指令流水线,指令队列的存在使EU和BIU并行工作,取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,减少了CPU等待时间,提高了CPU的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。,BIU,EU,8086/8088的指令“流水”操作,取指令1,取指令2,译码1,取数据1,执行1,取指令3,译码2,存结果1,执行2,取指令4,译码3,取指令5,等待,3.存储器分段,8086物理地址(1M=220),将1MB的物理

5、存储空间分成若干个逻辑段,每段大小为64KB。,段的起始单元地址叫段基址,存放在段寄存器中。通过4个段寄存器,CPU每次可同时对4个段进行寻址。,分段方式不唯一,各段之间可以连续、分离、部分重叠或完全重叠,这主要取决于对各个段寄存器的预置内容。,1000H,2000H,3100H,3100H,代码段(64KB),堆栈段(64KB),数据段与附加数据段重叠(64KB),CS,10000H,20000H,31000H,SS,DS,ES,1FFFFH,2FFFFH,40FFFH,存储器分段结构示例,物理地址是1MB存储空间中的某一单元地址,用20位地址码表示,CPU访问存储器时,地址总线上送出的就是

6、物理地址。逻辑地址在编程时采用,由段基址和偏移地址组成,两者均为16位。,物理地址和逻辑地址,逻辑地址与20位物理地址的变换关系:物理地址=段基址16+偏移地址,逻辑地址与物理地址的变换,【例】若数据段寄存器DS2100H,试确定该存储区段物理地址的范围。一个逻辑段的最大容量为64KB;第一个存储单元的偏移地址为0;最后一个存储单元的偏移地址为FFFFH。该数据区段由低至高相应存储单元的偏移地址为:0000H FFFFH。存储区的首地址 DS16偏移地址 2100H160000H21000H存储区的末地址DS16偏移地址 2100H16FFFFH 30FFFH,2.2.3 Pentium的四种

7、工作方式,实地址工作模式最基本的工作方式。8086/8088的实地址模式保持兼容。微处Pentium理器的实地址模式具有更强的功能,增 加了寄存器,扩充了指令,可进行32位操作。实模式操作方式只允许微处理器寻址第一个1MB存储器空间;当微处Pentium理器工作于实地址模式时,存储器的管理方式与8086微处理器存储器的管理方式完全相同。,2.2 Pentium微处理器,2.保护虚拟方式 通常在程序运行过程中,应防止以下情况的发生:应用程序破坏系统程序。某一应用程序破坏了其他应用程序。错误地把数据当作程序运行。为了避免出现以上情形的发生,所采取的措施称作“保护”。,基本寄存器系统级寄存器调试和模

8、型专用寄存器浮点寄存器,Pentium的内部寄存器,按功能可分为4类:,2.2.2 Pentium内部寄存器,2.2 Pentium微处理器,31 16 15 7 0,通 用 寄 存 器,EAX AH AX AL,EBX BH BX BL,ECX CH CX CL,EDX DH DX DL,EDI DI,ESI SI,EBP BP,ESP SP,1.基本寄存器,EIP用于保存下一条待预取指令相对于代码基址的偏移量。它的低16位也可单独访问,称之为IP。,标志寄存器位定义,CF,EFLAGS,FLAGS,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 1

9、6 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,AC,VM,RF,0,NT,IOPL,OF,DF,IF,TF,SF,ZF,0,AF,0,P F,0,X 对准检查标志,X 虚拟86模式标志,X 恢复标志,X 嵌套标志,X 特权级标志,S 溢出标志,C 方向标志,X 中断允许标志,X 自陷标志,S 符号标志,S 零标志,S 辅助进位标志,S 奇偶标志,S 进位标志,注:S表示状态标志,X表示系统标志,C表示控制标志,X 虚拟中断标志,X ID标志,X 虚拟中断挂起,0 0 0 0 0 0 0 0 0 0,VIF,VIP,ID,段寄存器,Pentium有6个段寄存器:

10、,编程者可直接访问的,编程者不能访问的,段选择符,段描述符,实地址方式和虚拟8086方式下相同,段的长度固定为64KB,段选择器就是段寄存器,它保存的是逻辑段基址的高16位,将它的内容左移4位即可得到实际段基址,而不必使用描述符高速缓存器。,在保护虚地址方式下,段的长度可以在1字节到4G字节之间变化;为了描述每个段的基址、属性和边界,为每个段定义了一个描述符。,Pentium段的定义与8086有所不同:,这类数不带任何符号信息,只含有量值域,仅CPU支持。分为三类:,字节:字:双字:,任何逻辑地址上的8位相邻位串。,任何字节地址开始的2个相邻字节。低字节地址为该字地址。,任何字节地址开始的2个

11、相邻字,即4个相邻字节。最小字节地址为双字的地址。,1.无符号二进制数(序数),2.3.1 基本数据类型,2.3 Pentium微处理器指令系统,这类数均以补码表示,有8位数(字节)、16位数(字)、32位数(双字)、64位数(4字)四种。,CPU支持前3种,FPU支持后3种。,2.带符号的二进制定点整数(整数),关于数据类型的两点说明:,(1)各类型数据中,基本的数据类型仍是字节、字和双字 尽可能将字操作对准于偶地址,将双字操作对准于4的整数倍地址。对准的字和双字可一次传递完,未对准的字和双字需几次才能传递完。(2)对于字和双字数据,80X86是采用低端低地址方式来存储 字数据被存储在两个相

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

13、。,在内存储器中。这时指令的操作数部分包含着该操 作数所在的内存地址。这种指令寻址方式称为存储 器寻址。,1.寻址方式和有效地址概念,寻址方式,在Pentium系列MPU中,内存实际地址(PA):PA=段基地址+段内偏移地址(EA)为了适应处理各种数据结构的需要,段内偏移地址可由以下几部分组合而成:,基址寄存器内容 变址寄存器内容 比例因子(仅与32位方式相关)位移量,这四个基本部分称为偏移地址四元素,一般又将由这四种元素组合形成的偏移地址称为有效地址EA。,EA=基址+(变址比例因子)+位移量,有效地址EA,指令寻址字段规定了操作数的来源部件和如何计 算EA的方法。实地址与保护方式的PA 方

14、法不同.,无AX、CX、DX、SP、IP寄存器,保护方式下的寻址过程(地址转换过程)-虚拟存储,逻辑地址=段选择符:有效地址,偏移地址四元素可优化组合出9种存储器寻址方式,加上立即数寻址和寄存器寻址,Pentium共有11种寻址方式:,(1)立即数寻址(2)寄存器寻址(3)直接寻址(4)寄存器间接寻址(5)基址寻址,(6)变址寻址(7)比例变址寻址(8)基址加变址寻址(9)基址加比例变址寻址(10)带位移的基址加变址寻址(11)带位移的基址加比例变址寻址,2.11种寻址方式,EA=基址+(变址比例因子)+位移量,在这种寻址方式下,操作数作为立即数直接存在指令中,可为8位、16位或32位。,立即

15、数寻址,78563412顺序存放在指令后面,在这种方式下,操作数包含在指令规定的8位、16位或32位寄存器中。,这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。,(2)寄存器寻址(寄存器直接寻址),指令中的操作数部分直接给出操作数有效地址EA。与操作码一起放在存储器代码段中,可以是16位或32位整数。操作数一般在数据段DS中。,(3)直接寻址(存储器直接寻址),实际中对于直接寻址,如操作数在DS段中,则可直接写成:,MOV AX,3000H,如操作数在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中则必须用段寄存器名前缀(称为段超越前缀)予以指明。例如:,MOV AX,F

16、S:3000H,直接寻址主要用于单个操作数的相对寻址场合(如简单的标量操作数寻址和静态分配数组的起始地址寻址等)。,操作数放在存储器中,但其有效地址EA在寄存器中,即:EA=寄存器 寄存器的使用规定在16位寻址和32位寻址时不一样。16位:BX,BP,SI,DI 32位:EAX EBX,ECX,EDX ESI.EDI.EBP,ESP,(4)寄存器间接寻址,16位寻址时,偏移地址放在SI、DI、BP或BX中。这 时又有两种段默认情况:,若以SI、DI、BX间接寻址,则默认操作数在DS段中。例如:MOV AX,SI;默认DS为段基址若以BP间接寻址,则默认操作数在SS段中。例如:MOV AX,BP

17、;默认SS为段基址,如果操作数不在上述规定的默认段,而是在其他段,则必须在指令中相应的操作数前加上段超越前缀。例如:,MOV AX,ES:SIMOV AX,DS:BP,32位寻址时,8个32位通用寄存器均可作寄存器间接寻址 例如:,MOV EBX,EAX;默认DS为段基址,传送双字给EBXMOV DX,EBX;默认DS为段基址,传送字给DXMOV CH,EAX;默认DS为段基址,传送字节给CH,除ESP、EBP默认段寄存器为SS外,其余6个通用寄存器均默认段寄存器为DS。如操作数在默认段之外,指令中必须加段超越前缀。,寄存器间接寻址的应用场合与直接寻址的应用场合相似,当更灵活。,在这种方式下,

18、EA=基址寄存器+位移量。其中位移量一定要为常数,且跟随在操作码之后,与操作码一起存放在代码段中。,16位寻址情况下,BX和BP作为基址寄存器。BX以DS作为默认段寄存器,BP以SS作为默认段寄存器。位移量可为8位或16位;32位寻址情况下,8个32位通用寄存器均可作基址寄存器 其中ESP、EBP以SS为默认段寄存器,其余6个通用寄存器均以DS为默认段寄存器。位移量为8位或32位。,例如:MOV EAX,BX+24;也可写成MOV EAX,24BXMOV ECX,EBP+50;也可写成MOV ECX,50EBPMOV DX,EAX+1500H;也可写成MOV DX,1500HEAX,(5)基址

19、寻址,2-43,EA=变址寄存器+位移量 指令书写格式和寻址执行过程与基址寻址相同;区别仅在于将基址寄存器改成变址寄存器。,(6)变址寻址,16位寻址时,仅SI、DI可作变址寄存器,且 默认DS作为段基址寄存器。如:,MOV AX,COUNT SI,32位寻址时,除ESP外的任何通用寄存器均可作变址寄存器。默认EBP以SS作段基址寄存器,其余均以DS作段基址寄存器。,MOV EAX,5EBPMOV ECX,DATAEAX,基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址/变址表示数组元素的下标,可变。,MOV ECX,DATAESP 是什么寻址方式?答案:

20、基址寻址方式。默认段寄存器SS 变址寻址不能使用ESP,在这种方式下:,EA=变址寄存器比例因子+位移量,这种寻址方式只适于32位寻址一种情况。例如:,MOV EAX,TABLEESI*4;TABLE是位移量,4是比例因子,(7)比例变址寻址,比例变址寻址和基址/变址寻址的作用相似,也适用于对一维数组元素的检索。但当数组元素大小为2/4/8字节时,用它更方便、更高效。,在这种寻址方式下,,EA=基址寄存器+变址寄存器,例如:,MOV AX,BX+SI;或写成 MOV AX,BXSI MOV AX,BPSI,它有16位寻址和32位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认

21、规定与前面所述相同。基址寄存器与变址寄存器默认的段寄存器不相同时,一般规定由基址寄存器(比如:BP,BX)来决定默认哪一个段寄存器作段基址指针。,基址加变址寻址主要用于二维数组元素的检索和二重循环等。,(8)基址加变址寻址,在这种方式下,EA=基址寄存器+变址寄存器比例因子,它只有32位寻址一种情况。格式举例:,MOV ECX,EDX*8EAX;或MOV ECX,EDX*8+EAXMOV AX,EBX*4ESI;或MOV AX,EBX*4+ESI,这种方式主要用于数组元素大小为2/4/8字节时的二维数组检索操作等场合。,(9)基址加比例变址寻址,在这种方式下:,EA=变址寄存器+基址寄存器+位

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

23、CX+40,当二维数组的数组元素大小为2/4/8字节,且数组起始地址不为0时,适于用这种寻址方式进行数组检索操作。,(11)带位移的基址加比例变址寻址,3.存储器寻址时的段约定,访存操作类型 默认段寄存器 允许超越的段寄存器 偏移地址寄存器,堆栈操作 SS 无(E)SP,取指令代码 CS 无(E)IP,源串数据访问 DS CS、SS、ES、FS、GS(E)SI,目的串数据访问 ES 无(E)DI,通用数据访问 DS CS、SS、ES、FS、GS 偏移地址,SS,CS、DS、ES、FS、GS,偏移地址,以(E)BP、(E)SP间接寻址的指令,4.应用举例,例2.1 已知80486工作在实地址方式

24、下,其中一些寄存器的内容和一些存储单元的内容如图所示,试指出下列各条指令执行后,AX中的内容。,MOV AX,2010H,MOV AX,BX,MOV AX,1200H,MOV AX,BX,MOV AX,1100HBX,MOV AX,BXSI,MOV AX,1100HBX+SI,AX=2010,AX=0100H,AX=4C2AH,AX=3412,AX=4C2AH,AX=7856,AX=65B7H,数据传送是计算机中最基本、最常用、最重要的一类操作。如:,这类指令寻址方式最丰富,除POPF外,均不影响标志寄存器的标志位。,在实际程序中,它的使用频率最高。,各种初始化操作 取操作数 保存结果,2.3

25、.4.1数据传送类指令,2.3.4 通用整数指令及应用,1.传送指令MOV,指令操作:(源操作数)目的操作数,指令格式:MOV 目的操作数,源操作数,寻址规定:REG/MEM/SREG,REG REG/MEM,SREG REG/SREG,MEM REG/MEM,IMM,立即数,通用寄存器,(EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI),CS,存储器,段寄存器,(SS、DS、ES、FS、GS),MOV指令允许的传送关系,MOV指令使用说明:,源操作数和目的操作数的类型必须一致。目的操作数不能为立即数。CS和(E)IP均不能用作指令的目的寄存器。段寄存器间不能直接传送,也不能直

26、接将立即数送给段寄存器。源操作数为立即数,而目的操作数类型不确定时,要给目的操作数加类型说明。,源操作数和目的操作数不能同为存储器操作数。,目的操作数,源操作数 REG/MEM/SREG,REG REG/MEM,SREG REG/SREG,MEM REG/MEM,IMM,MOV DS,100,MOV 1000H,23H,错。源、目的操作数不能同为存储器寻址。,MOV 1000H,2000H,错。立即数不能直接赋给段寄存器。,错。目的操作数长度不确定。,MOV CS,AX,错。不能用传送指令改变代码段寄存器。,MOV AX,0100H+BX+BP,错。地址寄存器不能同为基址寄存器。,例 识别下列

27、指令的正确性,对错误的指令,说明错误的原因。,MOV AX,100MOV DS,AX,MOV WORD PTR 1000H,23H,MOV AX,2000HMOV 1000H,AX,2.交换指令,操作:(目的操作数)(源操作数),格式:XCHG 目的操作数,源操作数REG/MEM,REG REG,MEM,XCHG AX,CX 等价如下指令:MOV BX,AX MOV AX,CX MOV CX,BX,注意:(1)该指令不影响标志位;(2)不允许使用段寄存器。,MOVSX ECX,AL;(AL)=F8H;(ECX)F=FFFF FFF8 MOVZX ECX,AX;(AX)=FFF8H;(ECX)=

28、0000 FFF8H,3.扩展传送指令(非8086指令),格式:MOVSX 目的操作数,源操作数 MOVZX 目的操作数,源操作数 操作:MOVSX:带符号扩展指令 MOVZX:零扩展指令 特点:扩展后数的真值不变。,4.地址传送指令,格式:LEA 目的操作数,源操作数 REG16/REG32 MEM操作:REG16/REG32 EA(源操作数地址偏移),装入有效地址,注意:寄存器、立即数和段寄存器都不能作为源操作数。,说明:LEA指令处理变量的地址(EA)而不是变量的内容 LEA和MOV指令的比较 MOV BX,OFFSET VAL;将VAL的有效地址=BX MOV BX,VAL;将VAL的

29、值=BX LEA BX,VAL;将VAL的有效地址=BX,MOV指令用 OFFSET操作不能直接取数组中任意元素 的位移量,只能取数组的第一个元素的位移量,而LEA可以传送任意数组元素的位移量。如LEA DX,BETABXSI LEA的源操作数必须是存储器操作数 LEA不影响F标志,5.堆栈指令PUSH/POP,格式:PUSH源操作数REG16/MEM16REG32/MEM32操作:(E)SP)-2/4(E)SP(源操作数)(SS:(E)SP)注:286以上可以有立即数方式。,(1)压栈指令,先调整指针,然后存储数据;先压高字节后压低字节,格式:POP 目的操作数 MEM16/MEM32/RE

30、G16/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 EAX EAX=BX:C

31、X,解:,SP1,SP1-2,BH,BL,CH,CL,SP1-4,SS,【例】分析下列程序段的执行情况。MOV CX,3000HMOV SP,CX;设置堆栈的底 部,MOV AX,1234H;设置AX初始值,MOV BX,5678H;设置BX初值,PUSH AXPUSH BX;将AX,BX内容 压入堆栈POP AX POP BX;由堆栈弹出数据 送入AX,BX中,实现AX,BX寄存器内容交换,POP:先传数据,后调整指针;先弹低字节后弹高字节。,PUSH:先调整指针,然后存储数据;先压高字节后压低字节,说明:XLAT是一条隐含寻址的指令。隐含两个操作数:DS:(E)BX存放表基址,AL存放查表

32、参数。使用前要给隐含操作数赋初值。,6.查表指令,格式:XLAT 操作:(EBX)+(AL)AL(BX)+(AL)AL,例2.5 内存中自TABLE开始的16个单元连续存放着自然数0到15的平方值(构成一个平方表),任给一整数M在XX单元中(该数为0M15),查表求M的平方值,并将结果存入YY单元中。,解:LEA BX,TABLEMOV AL,XX XLAT MOV YY,AL,说明:I/O端口有两种寻址方式 直接寻址,寻址范围为0255;间接寻址,寻址范围为0216-1。,(1)输入指令 格式:IN 累加器,端口 AL/AX/EAX,IMM8 AL/AX/EAX,DX 操作:AL/AX/EA

33、X(I/O端口),7.I/O指令,(2)输出指令,格式:OUT 端口,累加器 IMM8,AL/AX/EAX DX,AL/AX/EAX操作:(AL/AX/EAX)I/O端口,例 设程序在数据段中定义的数组如下:NAMES DB TOM.DB 20 DB ROSE DB 30 DB KATE.DB 25 请指出下列指令是否正确,如正确,A累加器中的结果是多少?,8.传送指令应用举例,1.MOV BX,OFFSET NAMES MOV AL,BX+5,(AL)=NAMES+5=20,2.MOV AX,WORD PTR NAMES+1,(AX)=NAMES+1=MO=4D4FH,3.MOV BX,6

34、MOV SI,5 LEA DI,NAMESBXSI MOV AL,DI,(DI)=NAMES偏移地址+(BX)+(SI)=NAMES偏移地址+11(AL)=NAMES+11=K=4BH,它的操作结果一般会影响标志寄存器中的状态标志位,如ZF、CF、SF、OF、AF、PF等。,2.3.4.2 算术运算类指令,1.加法/减法指令,操作:ADD:(目的)+(源)目的 SUB:(目的)-(源)目的 ADC:(目的)+(源)+CF目的 SBB:(目的)-(源)-CF目的,列3.12 已知 AL=0C1H,BL=7FH.SUB AL,BL 人工计算:1100 0001(AL)-0111 1111(BL)=

35、0100 0010 42H AL=42 H,ZF=0,SF=0,CF=0,AF=1,PF=1,OF=1 负-正=正,或 C2=0,C1=1 对于无符号数,CF=0,无溢出;对于有符号数,OF=1,溢出。,机器计算过程:1100 0001+1000 0001;补码,BL 求反加1=1 0100 0010;42H 根据补码溢出判断标准,C2=1,C1=0,溢出;AL=42 H,ZF=0,SF=0,CF=0,AF=1,PF=1,OF=1 用补码加法实现减法时,CF,AF 需要取反。,解:用8086指令 MOV AX,Y SUB X,AX;低16位字数据相减 MOV AX,2Y SBB 2X,AX;高

36、16位字数据相减,用80386/486指令 MOV EAX,DWORD PTR Y SUB DWORD PTR X,EAX,两个32位双字数据X、Y定义如下:X DW 1234H,5678H;X=56781234 Y DW 3FEAH,A033H;Y=33A03FEA请编写计算X=XY的程序段(低位在前),例,特殊加减法指令,INC:(目的操作数)+1 目的操作数DEC:(目的操作数)+1 目的操作数 目的操作数:寄存器或存储器影响状态标志:OF,SF,ZF,AF,PF。不影响CF,INC SI INC WORD PTR SI INC BYTE PTR BX SIDEC ECX,加法/减法指令

37、使用说明:,ADD/SUB指令用于单个字节/字/双字数的加/减法运算;ADC/SBB指令则常用于多精度或多字节/多字/多双字数的加/减法运算。INC/DEC REG/MEM ADD/SUB REG/MEM,1 两者都执行加1/减1操作,但前者不影响进位,而后者影响。,指令的异同:,2.整数变反指令(求补),格式:NEG 目的操作数 REG/MEM操作:0-(目的操作数)目的操作数标志:OF,SF,ZF,ZF,PF,CF应用:常用于求负数的绝对值。,解:TEST AX,8000H;测试符号位 JZ NEXT NEG AX NEXT:HLT,例 求AX中存放的有符号数的绝对值。,3.比较指令,格式

38、:CMP 目的操作数,源操作数 REG,REG/MEM/IMMMEM,REG/IMM,CMP与SUB指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。,操作:(目的操作数)(源操作数),根据操作结果修改状态标志,但不改变目标操作数值。,【例】CMP AL,CL 指令执行前,AL68H,CL9AH。指令执行:AL68H,CL9AH,CF1,ZF0,SF1,AF1,OF1,PF0。作为无符号数比较,被减数小于减数,不够减,有借位,CF1。作为有符号数时,C2C1=10,结果已超出有符号数所能表示的范围,因此OF1,有溢出。,单操作数乘法指令,格式:MUL/IMUL 源操作数 RE

39、G/MEM,操作:MUL和IMUL分别为无符号数和有符号数乘法指令,两种指令除操作数类型不同外,操作完全相同:,字:(AX)(源操作数)DX:AX,双字:(EAX)(源操作数)EDX:EAX,4.乘法指令,单操作数乘法指令的被乘数是隐含的(在AL/AX/EAX中),而结果长度一定是被乘数/乘数的二倍(在 AX/DX:AX/EDX:EAX中)。源操作数不能为立即数。源操作数为存储器操作数,且类型不能确定时,要显式说明操作数类型。要根据是有符号数还是无符号数,分别选用IMUL或MUL指令指令执行影响CF和OF标志.若指令执行后,结果的高一半是有效数值位,则CF=OF=1,否则CF=OF=0。,乘法

40、指令使用说明:,例2.11,解:MUL BL指令完成AL和BL中的两个无符号数相乘:,AH含有效数字,OF=1、CF=1。,(AX)=0A8CH,12C,+96,若(AL)=96H,(BL)=12H,求分别执行MUL BL和IMUL BL指令后的结果及OF、CF状态。,AH含有效数字,OF=1、CF=1。,解:IMUL 执行有符号数乘法,此时AL=96H中的数是负数,真值为-6AH,即:,用补码表示:(AX)=F88CH,(AX)=-774H,D4,+6A,5.除法指令,格式:DIVIDIV 源操作数(除数)REG/MEM操作:按源操作数类型:状态标志不确定,字节:(AX)/(源),商存于AL

41、中,余数存于AH,字:(DX:AX)/(源),商存于AX中,余数存于DX,双字:(EDX:EAX)/(源),商在EAX中,余数在EDX,说明:除法指令的被除数是隐含的,且长度一定是除数的二倍(在AX,DX:AX,EDX:EAX中)。使用除法指令常要扩展被除数长度。扩展时无符号数一般用:MOVZX AX,AL MOV DX,0 MOV EDX,0 有符号数一般用:CBW/CWD/CDQ。CBW:等价指令 MOVSX AX,AL CWD:AX 带符号扩展 DX:AX 源操作数无立即数。,MOV AX,a;;ab在CX:BX中 MOV AX,c;c在DX:AX中;ab+c在DX:AX中;(ab+c)

42、/a,商存入S,IMUL b,MOV CX,DX,MOV BX,AX,CWD,ADD AX,BX,ADC DX,CX,IDIV a,MOV S,AX,例2.12 下列程序段完成S=(ab+c)/a的运算,其中变量a、b、c和S均为带符号的字数据,结果的商存入S,余数则不计,填空完成下列程序。,格式:AAAAASAAMAADDAADAS,功能:,AAA/AAS:未组合BCD加法/减法调整指令,隐含操作 数为AL。,DAA/DAS:组合BCD加法/减法调整指令,隐含操作数为AL。,6.BCD调整指令,例,解:MOV AL,BYTE PTR X ADD AL,BYTE PTR Y;低位相加 DAA;

43、BCD码调整 MOV BYTE PTR X,AL;保存低位结果 MOV AL,BYTE PTR X1;取字变量的高字节 ADC AL,BYTE PTR Y1;高位相加 DAA MOV BYTE PTR X1,AL;X=7412,两个4位压缩BCD码定义如下:X DW 3578H Y DW 3834H 请编写计算X+Y的程序段。,多字节BCD加法/减法只能用带进位/借位的字节加法/减法指令实现!,AAM:未组合BCD乘法调整指令,隐含操作数AX。将AX中乘积调整为两个未组合BCD数存于AH 和AL。,AAD:调整除法运算前AX中的被除数内容。操作:(AH)10+(AL)AX,【例】设AL,BL

44、是未压缩BCD码 MUL BL;AL*BL-AX AAM指令执行前,AL07H,BL09H。执行MUL后,AL3FH=63。执行AAM后,AH06H,AL03H。,程序段MOVAX,405HMOVBL,06HAADDIVBL 执行后AX的内容为。A.307H B.703H C.4231H D.806H,A,例,BCD调整指令说明:,DAA/DAS、AAA/AAS隐含的操作寄存器是AL,所以BCD码 加法/减法只能用累加器AL为目的操作数的加法/减法 指令,且加法/减法指令后要跟调整指令。,多字节、字和双字BCD加法/减法只能用带进位/借位的 字节加法/减法指令实现。,ASCII码数的运算与非压

45、缩BCD码数的运算基本相同,但 要保持结果仍为ASCII码,则需转换。,AAD指令的功能不是将除法后的结果调整为BCD码,而是 在除法前将AX保存的两位非压缩BCD数调整为二进制 数。该指令要放在DIV指令之前。,功能:分别按位进行逻辑“与”、“或”、“异或”、“测试”和“非”。,格式:AND OR XOR TEST,目标操作数,源操作数 REG,REG/MEM/IMM MEM,REG/IMM,NOT 目标操作数 REG/MEM,2.3.4.3 逻辑运算与移位指令,1.逻辑运算指令,AND AL,DATAOR AL,DATAXOR AL,DATANOT DATANEG DATAAND AL,0

46、FHOR AL,01HXOR AL,0FFHTEST AL,80H,设 AL=0C4H=1100 0100B(DATA)=5AH=0101 1010B,(AL)=0100 0000(AL)=1101 1110(AL)=1001 1110(DATA)=1010 0101(DATA)=1010 0110(AL)=0000 0100(AL)=1100 0101(AL)=0011 1011(AL)=原值CF=OF=0,ZF=0,SF=1,PF=0,使用说明:,编程时要根据操作合理选用指令,一般:对某些二进制位清零用逻辑与指令AND;对某些二进制位置位用逻辑或指令OR;对某些二进制位求反用逻辑异或指令X

47、OR,全部位求反用逻辑非指令NOT。,逻辑运算指令除NOT指令外,都影响标志寄存器的 状态标志位,且逻辑运算后进位标志CF一定为0,所以逻辑运算指令常用于清0和清进位。,AND指令与TEST指令的区别:相同:都执行按位“与”操作,对状态标志位的影响相同,不同:AND改变目标操作数的值,TEST并不改变目标操作数的值。所以TEST指令与CMP指令的用法类似,用于产生按位测试的条件码。,例 已知寄存器DX:AX的内容为32位带符号数,编写一段程序使DX:AX的内容成为原来数据的绝对值。,解:TEST DX,8000H;测试符号位,产生状态 JZ EXIT;符号位=0,结束 NEG DX;求绝对值

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

49、R:OF=右移动前的最高位;若移次数大于1时,OF标志无效。,逻辑移位,算术移位,ROL和ROR指令在执行时,没有把CF套在循环中,常称为小循环移位。RCL和RCR指令在执行时,连同CF一起循环移位,称为大循环移位。以上四条指令仅影响标志位CF和OF。对OF的影响是:新的符号位与原来的符号位不同(CFSF),则使OF1,注意:指令RCR溢出测试在循环以前进行;,循环移位指令,使用说明:,移位指令常用于二进制数的倍乘和倍除,即算术/逻辑移n位,相当于把二进制数乘以或除以2n。要注意算术右移(SAR)与逻辑右移(SHR)的区别:SAR在符号位和数值位依次右移的同时,用符号位充填符号位;SHR用0充

50、填符号位。有符号和无符号数倍乘用SHL/SAL均可;有符号数用SAR和无符号数用SHR。循环指令也常用于循环控制,如逻辑尺控制循环。,例 试编写用移位和加法指令完成计算:(EAX)9/4 的程序段。,解:(EAX)9/4=(EAX)8+(EAX)/4,MOV EBX,EAX;保存EAXSAL/SHL EAX,3;(EAX)8EAXADD EAX,EBX;(EAX)8+(EAX)EAXSAR/SHR EAX,2;(EAX)9/4EAX,串操作约定:,用DS:(E)SI寻址源串,允许段超越;用ES:(E)DI寻址目的串,但ES段不能超越;由DF标志位决定(E)SI,(E)DI 指针增减:DF=0,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号