第2章微处理器与指令系统同名40课件

上传人:公**** 文档编号:569527754 上传时间:2024-07-30 格式:PPT 页数:158 大小:3.55MB
返回 下载 相关 举报
第2章微处理器与指令系统同名40课件_第1页
第1页 / 共158页
第2章微处理器与指令系统同名40课件_第2页
第2页 / 共158页
第2章微处理器与指令系统同名40课件_第3页
第3页 / 共158页
第2章微处理器与指令系统同名40课件_第4页
第4页 / 共158页
第2章微处理器与指令系统同名40课件_第5页
第5页 / 共158页
点击查看更多>>
资源描述

《第2章微处理器与指令系统同名40课件》由会员分享,可在线阅读,更多相关《第2章微处理器与指令系统同名40课件(158页珍藏版)》请在金锄头文库上搜索。

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

2、容。 在在8086/80888086/8088的设计中,引入了两个重要的结构概念:的设计中,引入了两个重要的结构概念: 指令流水线指令流水线 存储器分段存储器分段 这两个概念在以后升级的这两个概念在以后升级的IntelIntel系列微处理器中一直被沿用和发系列微处理器中一直被沿用和发展。正是这两个概念的引入,使展。正是这两个概念的引入,使8086/80888086/8088比原来的比原来的8 8位位MPUMPU在运行速在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。度、处理能力和对存储空间的访问等性能方面有很大提高。2-2.2.1 8086/80881 8086/8088微处理器微

3、处理器内部结构内部结构指令流水线指令流水线存储器分段存储器分段 8086 8086是全是全1616位微处理器,位微处理器,80888088是准是准1616位微处理器。二位微处理器。二者除了外数据总线位数及与此相关的部分逻辑稍有差别外,者除了外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。内部结构和基本性能相同,指令系统完全兼容。 2-1.1.内部结构内部结构2.2.1.1 8086/80881.1 8086/8088微处理器微处理器2020位位ABABEUEU控制电路控制电路总线总线控制电路控制电路通用寄存器通用寄存器累加器累加器基址寄存器基址寄存器计数

4、寄存器计数寄存器数据寄存器数据寄存器堆栈指针堆栈指针基址指针基址指针目的变址目的变址源变址源变址指针寄存器指针寄存器变址寄存器变址寄存器地址加法器地址加法器运算暂存器运算暂存器ALUALU标志寄存器标志寄存器指令指针指令指针内部暂存器内部暂存器指令队列指令队列总线接口单元总线接口单元( (BIU)BIU)执行单元执行单元( (EU)EU)外部总线外部总线8086/80888086/8088DBDB8088:88088:8位位8086:168086:16位位CSCSDSDSSSSSESESIPIP1 2 3 4 5 61 2 3 4 5 68 8位位8088808880868086AX AH A

5、LAX AH ALBX BH BLBX BH BLCX CH CLCX CH CLDX DH DLDX DH DL SPSPBPBPDIDISISIALU DBALU DB1616位位2- 8086 CPU 8086 CPU内部指令执行流程内部指令执行流程1.1.段寄存器段寄存器CS CS 程序指针寄存器程序指针寄存器IP IP 内容经过地址加法器形成内容经过地址加法器形成20 20 位地址;位地址;2.2.由由CPUCPU内部地址总线内部地址总线AB AB , 经过总线地址控制电路,经过总线地址控制电路, 向外部总线发读向外部总线发读取指令的的控制信号,取指令的的控制信号, 外部总线开始总线

6、操作;外部总线开始总线操作;3.3.读取指令送入到指令队列中,读取指令送入到指令队列中, 等待执行;等待执行;4.4.EUEU单元从队列中取一条指令到单元从队列中取一条指令到EUEU控制电路,译码指令需要做的系列操控制电路,译码指令需要做的系列操作,包括寄存器的内容送累加器;作,包括寄存器的内容送累加器;5.5.操作结果经过内部数据总线,操作结果经过内部数据总线, 存放到寄存器或内部暂存器,同时置存放到寄存器或内部暂存器,同时置FRFR;6.6.根据根据DSDS寄存器的内容,及指令寻址方式产生的偏移量,经过地址加法寄存器的内容,及指令寻址方式产生的偏移量,经过地址加法器,形成数据保存地址,并送

7、到外部总线。器,形成数据保存地址,并送到外部总线。CPU CPU 发写总线操作命令,发写总线操作命令,将暂存器的内容,将暂存器的内容, 通过总线,通过总线, 写到指定内存单元。写到指定内存单元。2-2.2.指令流水线指令流水线 指令队列的存在使指令队列的存在使EUEU和和BIUBIU并行工作并行工作, ,取指令和分析、取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,执行指令操作可重叠进行,形成了两级指令流水线结构,减少了减少了CPUCPU等待时间,提高了等待时间,提高了CPUCPU的利用率,加快了整机的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。运行速度,降低了对

8、存储器存取速度的要求。BIUBIUEUEU 8086/8088 8086/8088的指令的指令“流水流水”操作操作取指令取指令1 1取指令取指令2 2译码译码1 1取数据取数据1 1执行执行1 1取指令取指令3 3译码译码2 2存结果存结果1 1执行执行2 2取指令取指令4 4译码译码3 3取指令取指令5 5等待等待2-3.3.存储器分段存储器分段8086物理地址(1M=220)2- 将将1 1MBMB的物理存储空的物理存储空间分成若干个逻辑段间分成若干个逻辑段, ,每每段大小为段大小为6464KBKB。 64KB30000H( (段基址段基址) ) 段段的的起起始始单单元元地地址址叫叫段段基

9、基址址,存存放放在在段段寄寄存存器器中中。通通过过4 4个个段段寄寄存存器器,CPUCPU每每次次可可同同时时对对4 4个段进行寻址。个段进行寻址。内存内存 00000H00001H00002H00003HFFFFFH2-2- 分段方式不分段方式不唯一,各段之间唯一,各段之间可以连续、分离、可以连续、分离、部分重叠或完全部分重叠或完全重叠,这主要取重叠,这主要取决于对各个段寄决于对各个段寄存器的预置内容存器的预置内容。1000H2000H3100H3100H代码段代码段(64KB)堆栈段堆栈段(64KB)数据段与附加数据段与附加数据段重叠数据段重叠(64KB)CS10000H20000H310

10、00HSSDSES1FFFFH2FFFFH40FFFH 存储器分段结构示例存储器分段结构示例2-2- 物理地址物理地址物理地址物理地址是是是是1 1 1 1MBMBMBMB存储存储存储存储空间中的某一单元地址,空间中的某一单元地址,空间中的某一单元地址,空间中的某一单元地址,用用用用20202020位地址码表示位地址码表示位地址码表示位地址码表示, , , ,CPUCPUCPUCPU访问存储器时,地址总访问存储器时,地址总访问存储器时,地址总访问存储器时,地址总线上送出的就是物理地线上送出的就是物理地线上送出的就是物理地线上送出的就是物理地址。址。址。址。 逻辑地址逻辑地址逻辑地址逻辑地址在编

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

12、址15 0 15 015 0 15 0 左移四位左移四位19 019 0地址地址加法器加法器 逻辑逻辑地址与物理地址的变换地址与物理地址的变换2-【例】若数据段寄存器DS2100H,试确定该存储区段物理地址的范围。一个逻辑段的最大容量为64KB;第一个存储单元的偏移地址为0;最后一个存储单元的偏移地址为FFFFH。该数据区段由低至高相应存储单元的偏移地址为:0000HFFFFH。存储区的首地址DS16偏移地址2100H160000H21000H存储区的末地址DS16偏移地址2100H16FFFFH30FFFH2-2.2.2.3 Pentium2.3 Pentium的四种工作方式的四种工作方式1

13、.实地址工作模式实地址工作模式n最基本的工作方式。最基本的工作方式。n8086/8088的实地址模式保持兼容。的实地址模式保持兼容。n微处微处Pentium理器的实地址模式具有更强的功能,增理器的实地址模式具有更强的功能,增加了寄存器,扩充了指令,可进行加了寄存器,扩充了指令,可进行32位操作。位操作。实模式操作方式只允许微处理器寻址第一个实模式操作方式只允许微处理器寻址第一个1MB存储器存储器空间空间;当微处当微处Pentium理器工作于实地址模式时,存储器的管理器工作于实地址模式时,存储器的管理方式与理方式与8086微处理器存储器的管理方式完全相同。微处理器存储器的管理方式完全相同。 2.

14、2.2 Pentium2 Pentium微处理器微处理器2-2.保护虚拟方式保护虚拟方式 通常在程序运行过程中,应防止以下情况的发生:通常在程序运行过程中,应防止以下情况的发生: 应用程序破坏系统程序。应用程序破坏系统程序。 某一应用程序破坏了其他应用程序。某一应用程序破坏了其他应用程序。 错误地把数据当作程序运行。错误地把数据当作程序运行。 为了避免出现以上情形的发生,所采取的措施称作为了避免出现以上情形的发生,所采取的措施称作“保护保护”。2-CPUCPU复位复位RSMRSM复位复位或或RSMRSMVM=0VM=0VM=1VM=1复位复位复位复位或或PE=0PE=0使使CRCR0 0的的P

15、E=1PE=1系统管系统管理方式理方式保护保护方式方式虚拟虚拟80868086方式方式RSMRSMSMISMI实地址实地址方式方式SMISMISMISMI实地址实地址方式方式实地址方式实地址方式:工作原理工作原理与与80868086基本相同,主要基本相同,主要区别是借助操作数长度区别是借助操作数长度前缀能处理前缀能处理3232位数据,位数据,运行速度也更高,且可运行速度也更高,且可使用使用4 4个数据段。个数据段。保护保护方式方式保保护护方方式式:CPUCPU可可访访问问的的物物理理存存储储空空间间为为2 23232= = 4 4GBGB;程程序序可可用用的的虚虚拟拟地地址址空空间间为为2 2

16、4646=64=64TBTB。段段长长度度在在启启动动页页功功能能时时是是4 4GBGB,不不启启动动页页功功能能时时是是1 1MBMB。可可支支持持多多用用户户和和单单用用户户的的多多任任务务操操作作, ,并并对对各各任任务务提提供供了了多多方方面的保护机制。面的保护机制。虚拟虚拟80868086方式方式虚拟虚拟80868086方式:方式:既有保护功能又能既有保护功能又能执行执行80868086代码的工作方式,是保护代码的工作方式,是保护方式的一种子方式。方式的一种子方式。CPUCPU的工作原理的工作原理与保护虚地址方式下相同,但程序与保护虚地址方式下相同,但程序指定的逻辑地址解释与指定的逻

17、辑地址解释与80868086相同。相同。系统系统管理管理方式方式系统管理方式:系统管理方式:使设计使设计者实现高级管理功能,者实现高级管理功能,如对电源的管理以及为如对电源的管理以及为操作系统和正在运行的操作系统和正在运行的程序提供安全性。程序提供安全性。2-基本寄存器基本寄存器系统级寄存器系统级寄存器调试和调试和模型专用模型专用寄存器寄存器浮点寄存器浮点寄存器PentiumPentium的内部寄存器,按功能可分为的内部寄存器,按功能可分为4 4类:类:2.2.2.2 Pentium2.2 Pentium内部寄存器内部寄存器 2.2.2 Pentium2 Pentium微处理器微处理器2-标志

18、寄存器标志寄存器指令指针寄存器指令指针寄存器EFLAGSEFLAGSFLAGSFLAGSEIPEIPIPIP31 15 031 15 031 15 031 15 031 16 15 7 031 16 15 7 0通通 用用 寄寄 存存 器器EAX EAX AH AH AX AX ALALEBX EBX BH BH BX BX BLBLECX ECX CHCH CX CX CLCLEDX EDX DHDH DX DX DLDLEDI DIEDI DIESI SIESI SIEBP BPEBP BPESP SPESP SP1. 1. 基本寄存器基本寄存器选择器选择器CSCSSSSSDSDSESES

19、FSFSGSGS15 0 63 015 0 63 0描述符高速缓存器描述符高速缓存器段段 寄寄 存存 器器 EIP EIP用于保存下一条用于保存下一条待预取指令相对于代码基待预取指令相对于代码基址的偏移量。它的低址的偏移量。它的低1616位位也可单独访问,称之为也可单独访问,称之为IPIP。2- 标志寄存器位定义标志寄存器位定义C CF FEFLAGSEFLAGSFLAGSFLAGS31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 031 30 29 28 27 26 25 2

20、4 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0A AC CV VM MR RF F0 0N NT TIOPLIOPLO OF FD DF FI IF FT TF FS SF FZ ZF F0 0A AF F0 0P P F F0 0X X 对准检查标志对准检查标志X X 虚拟虚拟8686模式标志模式标志X X 恢复标志恢复标志X X 嵌套标志嵌套标志X X 特权级标志特权级标志S S 溢出标志溢出标志C C 方向标志方向标志X X 中断允许标志中断允许标志X X 自陷标志自陷标志S S 符号标志符号标志S S 零标

21、志零标志S S 辅助进位标志辅助进位标志S S 奇偶标志奇偶标志S S 进位标志进位标志注注: :S S表示状态标志表示状态标志, ,X X表示系统标志表示系统标志, ,C C表示控制标志表示控制标志X X 虚拟中断标志虚拟中断标志X IDX ID标志标志X X 虚拟中断挂起虚拟中断挂起0 0 0 0 0 0 0 0 0 0VIVIF FVIVIP PI ID D2-选择器选择器描述符高速缓存器描述符高速缓存器CSSSDSESFSGS15 0 63 015 0 63 0段段寄寄存存器器 段寄存器段寄存器PentiumPentium有有6 6个段寄存器:个段寄存器:CS-CS-指明当前的代码段指

22、明当前的代码段SS-SS-指明当前的堆栈段指明当前的堆栈段DSDSESESFS FS GSGS决定程序使用决定程序使用存储器区域块存储器区域块指明当前的指明当前的4 4个数据段个数据段编程者可直编程者可直接访问的接访问的编程者不能编程者不能访问的访问的段选择符段选择符段描述符段描述符2-1.1.实实地地址址方方式式和和虚虚拟拟80868086方方式式下下相相同同,段段的的长长度度固固定定为为6464KB,KB,段段选选择择器器就就是是段段寄寄存存器器, ,它它保保存存的的是是逻逻辑辑段段基基址址的的高高1616位位,将将它它的的内内容容左左移移4 4位位即即可可得得到到实际段基址,实际段基址,

23、而不必使用描述符高速缓存器。而不必使用描述符高速缓存器。2.2.在在保保护护虚虚地地址址方方式式下下,段段的的长长度度可可以以在在1 1字字节节到到4 4G G字字节节之之间间变变化化;为为了了描描述述每每个个段段的的基基址址、属属性性和边界,为每个段定义了一个和边界,为每个段定义了一个描述符描述符。PentiumPentium段的定义与段的定义与80868086有所不同:有所不同:2- 这类数不带任何符号信息,只含有量值域这类数不带任何符号信息,只含有量值域,仅,仅CPUCPU支支持。分为三类持。分为三类: : 字节:字节: 字:字: 双字:双字: 任何逻辑地址上的任何逻辑地址上的8 8位相

24、邻位串。位相邻位串。任何字节地址开始的任何字节地址开始的2 2个相邻字节。个相邻字节。低字节地址低字节地址为该字地址。为该字地址。任何字节地址开始的任何字节地址开始的2 2个相邻字,即个相邻字,即4 4个相邻字个相邻字节。节。最小字节地址为双字的地址最小字节地址为双字的地址。1.1.无符号二进制数无符号二进制数( (序序数数) )2.2.3.1 3.1 基本数据类型基本数据类型2.2.3 3 PentiumPentium微处理器指令系统微处理器指令系统2- 这类数均以补码表示这类数均以补码表示, ,有有8 8位数位数( (字节字节) )、1616位位数数( (字字) )、3232位数位数( (

25、双字双字) )、6464位数位数(4(4字字) )四种。四种。CPUCPU支持前支持前3 3种,种,FPUFPU支持后支持后3 3种。种。2.2.带符号的二进制定点整数带符号的二进制定点整数( (整数整数) )2-关于数据类型的两点说明:关于数据类型的两点说明:(1)(1)各类型数据中,基本的数据类型仍是字节、字和双字各类型数据中,基本的数据类型仍是字节、字和双字 尽尽可可能能将将字字操操作作对对准准于于偶偶地地址址,将将双双字字操操作作对对准准于于4 4的整数倍地址。的整数倍地址。 对对准准的的字字和和双双字字可可一一次次传传递递完完,未未对对准准的的字字和和双双字字需几次才能传递完。需几次

26、才能传递完。(2)(2)对对于于字字和和双双字字数数据据,8080X86X86是是采采用用低低端端低低地地址址方方式式来来存储存储 字字数数据据被被存存储储在在两两个个相相邻邻的的字字节节单单元元之之中中,低低位位字字节在低地址单元,高位字节在高地址单元;节在低地址单元,高位字节在高地址单元; 双双字字数数据据存存储储在在四四个个连连续续字字节节单单元元中中,最最低低位位字字节节在最低地址单元,最高字节在最高地址单元。在最低地址单元,最高字节在最高地址单元。 而而字字或或双双字字数数据据的的地地址址是是指指最最低低位位字字节节所所在在的的单单元元地地址。址。2-2.2.3.2 3.2 操作数寻

27、址方式操作数寻址方式1. 1. 寻址方式和有效地址概念寻址方式和有效地址概念2. 112. 11种寻址方式种寻址方式3. 3. 存储器寻址时的段约定存储器寻址时的段约定4. 4. 应用举例应用举例2- 寻址方式就是寻找指令中操作数地址的方式。寻址方式就是寻找指令中操作数地址的方式。操作数操作数所在地址有三种可能:所在地址有三种可能: n 直接包含在指令中直接包含在指令中,即指令的操作数部分就是操作,即指令的操作数部分就是操作 数本身。这种操作数叫立即数数本身。这种操作数叫立即数,对应的指令寻址方对应的指令寻址方 式称为式称为立即数寻址。立即数寻址。n包含在包含在CPU CPU 的某个内部寄存器

28、中的某个内部寄存器中。这时指令中的操。这时指令中的操 作数部分是作数部分是CPUCPU的一个寄存器的一个寄存器, ,这种指令寻址方式称这种指令寻址方式称 为为寄存器寻址寄存器寻址。n 在内存储器中在内存储器中。这时指令的操作数部分包含着该操。这时指令的操作数部分包含着该操 作数所在的内存地址。这种指令寻址方式称为作数所在的内存地址。这种指令寻址方式称为存储存储 器寻址器寻址。1.1.寻址方式和有效地址概念寻址方式和有效地址概念寻址方式寻址方式2- 在在PentiumPentium系列系列MPUMPU中,内存实际地址中,内存实际地址( (PA)PA): PA = PA = 段基地址段基地址 +

29、+ 段内偏移地址(段内偏移地址(EAEA ) 为了适应处理各种数据结构的需要,段内偏移地为了适应处理各种数据结构的需要,段内偏移地址可由以下几部分组合而成:址可由以下几部分组合而成:v 基址寄存器内容基址寄存器内容v 变址寄存器内容变址寄存器内容v 比例因子比例因子( (仅与仅与3232位方式相关)位方式相关)v 位移量位移量 这四个基本部分称为偏移地址四元素,一般又将这四个基本部分称为偏移地址四元素,一般又将由这四种元素组合形成的偏移地址称为由这四种元素组合形成的偏移地址称为有效地址有效地址EAEA。EA=EA=基址基址+(+(变址变址比例因子比例因子)+)+位移量位移量有效地址有效地址EA

30、EA2-有效地址元素有效地址元素1616位寻址位寻址3232位寻址位寻址基址寄存器基址寄存器 BX,BP BX,BP 任何任何3232位通用寄存器位通用寄存器变址寄存器变址寄存器 SI,DI SI,DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 无(或无(或1 1) 1 1,2 2,4 4,8 8位移量位移量 0 0,8 8,1616位位 0 0,8 8,3232位位n指令寻址字段规定了操作数的来源部件和如何计指令寻址字段规定了操作数的来源部件和如何计 算算EA的方法。的方法。n 实地址与保护方式的实地址与保护方式的PA 方法不同方法不同.无无AX、CX

31、、DX、SP、IP寄存器寄存器2- 保护方式下的寻址过程保护方式下的寻址过程( (地址转换过程地址转换过程) ) - 虚拟存储虚拟存储有效地址计算有效地址计算变址变址位移位移基址基址比例因子比例因子+ +3232位位有效地址有效地址31 031 0BE7BE7BE0BE0A31A31A3A332 32 位位32 32 位位1313位位描述符检索描述符检索段寄存器段寄存器选择符选择符 TITIRPLRPL15 3 2 1 015 3 2 1 0分段分段部件部件线性线性地址地址物理物理存储器存储器4G4G分页分页部件部件( (可选可选) )物理物理地址地址逻逻辑辑地地址址( (虚虚拟拟) )(CS

32、,DS,ES,SS, FS,GSCS,DS,ES,SS, FS,GS)不分页不分页逻辑地址逻辑地址 = = 段选择符段选择符 :有效地址:有效地址2- 偏移地址四元素可优化组合出偏移地址四元素可优化组合出9 9种存储器寻址方式种存储器寻址方式, ,加加上立即数寻址和寄存器寻址,上立即数寻址和寄存器寻址,PentiumPentium共有共有1111种寻址方式种寻址方式: :(1) (1) 立即数寻址立即数寻址(2) (2) 寄存器寻址寄存器寻址(3) (3) 直接寻址直接寻址(4) (4) 寄存器间接寻址寄存器间接寻址(5) (5) 基址寻址基址寻址(6) (6) 变址寻址变址寻址(7) (7)

33、 比例变址寻址比例变址寻址(8) (8) 基址加变址寻址基址加变址寻址(9) (9) 基址加比例变址寻址基址加比例变址寻址(10)(10)带位移的基址加变址寻址带位移的基址加变址寻址(11)(11)带位移的基址加比例变址寻址带位移的基址加比例变址寻址2. 112. 11种寻址方式种寻址方式EA=EA=基址基址+(+(变址变址比例因子比例因子)+)+位移量位移量2- 在这种寻址方式下在这种寻址方式下, ,操作数作为立即数操作数作为立即数直接存在指直接存在指令中令中, ,可为可为8 8位、位、1616位或位或3232位。位。例:例:MOV AXMOV AX,4567H4567HMOV BLMOV

34、BL,78H78HMOV ECXMOV ECX,12345678H12345678H立即数寻址立即数寻址2-78563412顺序存放在指令后面顺序存放在指令后面2- 在这种方式下在这种方式下, ,操作数包含在指令规定的操作数包含在指令规定的8 8位、位、1616位或位或3232位寄存器中。位寄存器中。例:例:MOV EAXMOV EAX,EDXEDXINC CLINC CLMOV DSMOV DS,AXAX 这种寻址方式指令编码短,无需从存储器取操作这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。数,故执行速度快。(2)(2)寄存器寻址寄存器寻址( (寄存器直接寻址寄存器直接寻址)

35、 )2- 指令中的操作数部分直接给出操作数有效地址指令中的操作数部分直接给出操作数有效地址EAEA。 与操作码一起放在存储器代码段中与操作码一起放在存储器代码段中,可以是,可以是1616位位或或3232位整数。位整数。 操作数一般在数据段操作数一般在数据段DSDS中。中。(3)(3)直接寻址直接寻址( (存储器直接寻址存储器直接寻址) )2-2- 实际中对于直接寻址实际中对于直接寻址, ,如操作数在如操作数在DSDS段中段中, ,则可则可直接写成直接写成: :MOV AX,3000HMOV AX,3000H 如操作数在如操作数在DSDS之外的其他段之外的其他段( (CS,SS,ES,FS,GS

36、)CS,SS,ES,FS,GS)中中, ,指令中则必须用段寄存器名前缀指令中则必须用段寄存器名前缀( (称为段超越前称为段超越前缀缀) )予以指明。例如:予以指明。例如:MOV AX,FS:3000HMOV AX,FS:3000H 直接寻址主要用于单个操作数的相对寻址场合直接寻址主要用于单个操作数的相对寻址场合( (如简单的标量操作数寻址和静态分配数组的起始地如简单的标量操作数寻址和静态分配数组的起始地址寻址等址寻址等) )。2- 操作数放在存储器中操作数放在存储器中, ,但其有效地址但其有效地址EAEA在寄存器中在寄存器中, ,即即: EA = EA = 寄存器寄存器 寄存器的使用规定在寄存

37、器的使用规定在1616位寻址和位寻址和3232位寻址时不一样。位寻址时不一样。 1616位:位: BX , BP BX , BP ,SI , DISI , DI 3232位:位: EAX EBX, ECX, EDXEAX EBX, ECX, EDX ESI. EDI. EBP, ESPESI. EDI. EBP, ESP(4)(4)寄存器间接寻址寄存器间接寻址8 8个通用寄存器个通用寄存器2- 16 16位寻址时,偏移地址放在位寻址时,偏移地址放在SISI、DIDI、BPBP或或BXBX中。这中。这 时又有两种段默认情况:时又有两种段默认情况:q若以若以SISI、DIDI、BXBX间接寻址间接

38、寻址, ,则默认操作数在则默认操作数在DSDS段中。段中。 例如:例如: MOV AX,SI ;MOV AX,SI ;默认默认DSDS为段基址为段基址q若以若以BPBP间接寻址间接寻址, ,则默认操作数在则默认操作数在SSSS段中。段中。 例如:例如: MOV AX,BP ;MOV AX,BP ;默认默认SSSS为段基址为段基址 如果操作数不在上述规定的默认段,而是在其他段,如果操作数不在上述规定的默认段,而是在其他段,则必须在指令中相应的操作数前加上段则必须在指令中相应的操作数前加上段超越前缀超越前缀。例如:。例如:MOV AX,ES:SIMOV AX,ES:SIMOV AX,DS:BPMO

39、V AX,DS:BP2-2- 3232位寻址时位寻址时,8,8个个3232位通用寄存器均可作寄存器间接寻址位通用寄存器均可作寄存器间接寻址 例如:例如:MOV EBX,EAX ;MOV EBX,EAX ;默认默认DSDS为段基址为段基址, ,传送双字给传送双字给EBXEBXMOV DX,EBX ;MOV DX,EBX ;默认默认DSDS为段基址为段基址, ,传送字给传送字给DXDXMOV CH,EAX ;MOV CH,EAX ;默认默认DSDS为段基址为段基址, ,传送字节给传送字节给CHCH 除除ESPESP、EBPEBP默认段寄存器为默认段寄存器为SSSS外,其余外,其余6 6个通用寄存个

40、通用寄存器均默认段寄存器为器均默认段寄存器为DSDS。 如操作数在默认段之外,指令中必须加段超越前缀。如操作数在默认段之外,指令中必须加段超越前缀。 寄存器间接寻址的应用场合与直接寻址的应用场合寄存器间接寻址的应用场合与直接寻址的应用场合相似,当更灵活。相似,当更灵活。2- 在这种方式下在这种方式下, , EA=EA=基址寄存器基址寄存器+位移量。位移量。 其中位移量一定要为常数其中位移量一定要为常数, ,且跟随在操作码之后且跟随在操作码之后, ,与与操作码一起存放在代码段中。操作码一起存放在代码段中。1616位寻址情况下位寻址情况下, ,BXBX和和BPBP作为基址寄存器。作为基址寄存器。

41、BX BX以以DSDS作为默认段寄存器作为默认段寄存器, , BP BP以以SSSS作为默认段寄存器。作为默认段寄存器。 位移量可为位移量可为8 8位或位或1616位;位;3232位寻址情况下,位寻址情况下,8 8个个3232位通用寄存器均可作基址寄存器位通用寄存器均可作基址寄存器 其中其中ESPESP、EBPEBP以以SSSS为默认段寄存器,为默认段寄存器, 其余其余6 6个通用寄存器均以个通用寄存器均以DSDS为默认段寄存器。为默认段寄存器。 位移量为位移量为8 8位或位或3232位。位。例如:例如: MOV EAX,BX+24 ;MOV EAX,BX+24 ;也可写成也可写成MOV EA

42、X,24BXMOV EAX,24BXMOV ECX,EBP+50 ;MOV ECX,EBP+50 ;也可写成也可写成MOV ECX,50EBPMOV ECX,50EBPMOV DX,EAX+1500H;MOV DX,EAX+1500H;也可写成也可写成MOV DX,1500HEAXMOV DX,1500HEAX(5)(5)基址寻址基址寻址与32位寄存器间接寻址方式相同2-2- EA=EA=变址寄存器变址寄存器+位移量位移量 指令书写格式和寻址执行过程与基址寻址相同;指令书写格式和寻址执行过程与基址寻址相同; 区别仅在于将基址寄存器改成变址寄存器。区别仅在于将基址寄存器改成变址寄存器。(6)(6

43、)变址寻址变址寻址 1616位寻址时,仅位寻址时,仅SISI、DIDI可作变址寄存器,且可作变址寄存器,且 默认默认DSDS作为段基址寄存器。如:作为段基址寄存器。如:MOV AX, MOV AX, COUNT COUNT SISI 3232位寻址时位寻址时, , 除除ESPESP外的任何通用寄存器均可作变址寄存器。外的任何通用寄存器均可作变址寄存器。 默认默认EBPEBP以以SSSS作段基址寄存器作段基址寄存器, , 其余均以其余均以DSDS作段基址寄存器。作段基址寄存器。 2-MOV EAX,5EBPMOV EAX,5EBPMOV ECX,MOV ECX,DATADATAEAXEAX 基址

44、、变址寻址适于对一维数组的数组元素进行检索基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址操作。位移量表示数组起始地址偏移量;基址/ /变址表示数变址表示数组元素的下标,可变。组元素的下标,可变。MOVECX,DATAESP 是什么寻址方式?是什么寻址方式? 答案:基址寻址方式。默认段寄存器答案:基址寻址方式。默认段寄存器SS 变址寻址不能使用变址寻址不能使用ESP2-在这种方式下:在这种方式下:EA=EA=变址寄存器变址寄存器比例因子比例因子+ +位移量位移量这种寻址方式这种寻址方式只适于只适于3232位位寻址一种情况。例如:寻址一种情况。例如:MOV

45、EAX,TABLEESI*4MOV EAX,TABLEESI*4 ;TABLE;TABLE是位移量是位移量,4,4是比例因子是比例因子(7)(7)比例变址寻址比例变址寻址2-2- 比例变址寻址和基址比例变址寻址和基址/ /变址寻址的作变址寻址的作用相似用相似, ,也适用于对一维数组元素的检索。也适用于对一维数组元素的检索。但当数组元素大小为但当数组元素大小为2/4/82/4/8字节时,用它字节时,用它更方便、更高效。更方便、更高效。2-在这种寻址方式下,在这种寻址方式下,EA=EA=基址寄存器基址寄存器+变址寄存器变址寄存器 例如:例如: MOV AX,BX+SI ; MOV AX,BX+SI

46、 ;或写成或写成 MOV AX,BXSIMOV AX,BXSI MOV AX,BPSI MOV AX,BPSI 它有它有1616位寻址和位寻址和3232位寻址两种情况,每种情况下基址、变址寄存位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认规定与前面所述相同。器的使用规定和段寄存器的默认规定与前面所述相同。 基址寄存器与变址寄存器默认的段寄存器不相同时,一般规定由基址寄存器与变址寄存器默认的段寄存器不相同时,一般规定由基址寄存器基址寄存器( (比如:比如:BP,BX)BP,BX)来决定默认哪一个段寄存器作段基址指针。来决定默认哪一个段寄存器作段基址指针。 基址加变址寻址主要

47、用于二维数组元素的检索和基址加变址寻址主要用于二维数组元素的检索和二重循环等。二重循环等。(8)(8)基址加变址寻址基址加变址寻址2-2-在这种方式下在这种方式下, ,EA= EA= 基址寄存器基址寄存器 + + 变址寄存器变址寄存器比例因子比例因子它只有它只有3232位寻址一种情况。位寻址一种情况。格式举例:格式举例:MOV ECX,EDX*8EAX ;MOV ECX,EDX*8EAX ;或或MOV ECX,EDX*8+EAXMOV ECX,EDX*8+EAXMOV AX,EBX*4ESI ;MOV AX,EBX*4ESI ;或或MOV AX,EBX*4+ESIMOV AX,EBX*4+ES

48、I 这种方式主要用于数组元素大小为这种方式主要用于数组元素大小为2/4/82/4/8字节时的字节时的二维数组检索操作等场合。二维数组检索操作等场合。(9)(9)基址加比例变址寻址基址加比例变址寻址2-在这种方式下:在这种方式下:EA=EA=变址寄存器变址寄存器+基址寄存器基址寄存器+位移量位移量 这种方式也分这种方式也分1616位寻址和位寻址和3232位寻址两种情况。变址、位寻址两种情况。变址、基址寄存器的使用约定和对段寄存器的默认约定与前面基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同。格式举例:所述相同。格式举例:MOV AX,BX+DI+MASK MOV AX,BX+DI+MA

49、SK 或或 MOVAX,MASKBXDIMOVAX,MASKBXDIADD EDX,ESIEBP+0FFFF000H ADD EDX,ESIEBP+0FFFF000H 或或ADD EDX,0FFFF000HESIEBPADD EDX,0FFFF000HESIEBP 这种寻址方式也是主要用于二维数组操作,位移这种寻址方式也是主要用于二维数组操作,位移量即为数组起始地址。量即为数组起始地址。(10)(10)带位移的基址加变址寻址带位移的基址加变址寻址2-2-这种方式将偏移地址四元素都用上了,即:这种方式将偏移地址四元素都用上了,即:EA=EA=变址寄存器变址寄存器比例因子比例因子+基址寄存器基址寄

50、存器+位移量位移量 它只有它只有3232位寻址一种情况。各种约定和默认情况位寻址一种情况。各种约定和默认情况同前所述。同前所述。格式举例:格式举例:INC EDI*8ECX+40 ;INC EDI*8ECX+40 ;或或INC EDI*8+ECX+40INC EDI*8+ECX+40 当二维数组的数组元素大小为当二维数组的数组元素大小为2/4/82/4/8字节,且数组字节,且数组起始地址不为起始地址不为0 0时,适于用这种寻址方式进行数组检索时,适于用这种寻址方式进行数组检索操作。操作。(11)(11)带位移的基址加比例变址寻址带位移的基址加比例变址寻址2-3.3.存储器寻址时的段约定存储器寻

51、址时的段约定访存操作类型访存操作类型 默认段寄存器默认段寄存器 允许超越的段寄存器允许超越的段寄存器 偏移地址寄存器偏移地址寄存器堆栈操作堆栈操作 SS SS 无无 (E)SP(E)SP取指令代码取指令代码 CSCS 无无 (E E)IPIP源串数据访问源串数据访问 DSDS CSCS、SSSS、ESES、FSFS、GS GS ( (E)SIE)SI目的串数据访问目的串数据访问 ES ES 无无 ( (E)DIE)DI通用数据访问通用数据访问 DS CSDS CS、SSSS、ESES、FSFS、GS GS 偏移地址偏移地址SSSSCSCS、DSDS、ESES、FSFS、GSGS偏移地址偏移地址

52、以以( (E)BPE)BP、(E)SP(E)SP间接寻址的指令间接寻址的指令2-4.4.应用举例应用举例CPUCPUBXBX 0100H 0100HSISI 0002H 0002HDS DS 3000H3000H30100H30100H 12H 12H30101H30101H 34H 34H30102H 30102H 56H 56H30103H30103H 78H 78H31200H31200H 2AH 2AH31201H31201H 4CH 4CH31202H31202H B7H B7H31203H 31203H 65H 65HM M 例例2.12.1 已知已知8048680486工作在实地

53、址方式下工作在实地址方式下, ,其中一些寄存其中一些寄存器的内容和一些存储单元的内容如图所示,试指出下列各器的内容和一些存储单元的内容如图所示,试指出下列各条指令执行后,条指令执行后,AXAX中的内容。中的内容。 MOV AXMOV AX,2010H2010H MOV AX MOV AX,BXBX MOV AX MOV AX,1200H1200H MOV AX MOV AX,BXBX MOV AX MOV AX,1100HBX1100HBX MOV AX MOV AX,BXSIBXSI MOV AX MOV AX,1100HBX+SI1100HBX+SIAX=2010AX=0100HAX=4C

54、2AHAX=3412AX=4C2AHAX=7856AX=65B7H2-q数据传送数据传送是计算机中最基本、最常用、最重是计算机中最基本、最常用、最重要的一类操作。如:要的一类操作。如:q这类指令寻址方式最丰富,除这类指令寻址方式最丰富,除POPFPOPF外,外,均不均不影响标志寄存器的标志位。影响标志寄存器的标志位。在实际程序中,它的使用频率最高。在实际程序中,它的使用频率最高。 各种初始化操作各种初始化操作 取操作数取操作数 保存结果保存结果2.2.3.4.13.4.1数据传送类指令数据传送类指令2.3.4 2.3.4 通用整数指令及应用通用整数指令及应用2-1. 1. 传送指令传送指令MO

55、VMOVn指令操作:指令操作:( (源操作数源操作数)目的操作数目的操作数 n指令格式:指令格式:MOV MOV 目的操作数,源操作数目的操作数,源操作数n寻址规定:寻址规定: REG/MEM/SREGREG/MEM/SREG, REG REG REG/MEM REG/MEM , SREG SREG REG/SREG REG/SREG , MEM MEM REG/MEM REG/MEM , IMM IMM2-立立即即数数通用寄存器通用寄存器(EAXEAX、EBXEBX、ECXECX、EDXEDX、 EBP EBP、ESPESP、ESIESI、EDI)EDI)CSCS存存储储器器段寄存器段寄存器

56、( (SSSS、DSDS、ESES、FSFS、GS)GS)MOVMOV指令允许的传送关系指令允许的传送关系2-q MOV MOV指令使用说明:指令使用说明:源操作数和目的操作数的源操作数和目的操作数的类型必须一致类型必须一致。目的操作数目的操作数不能为立即数不能为立即数。CSCS和和( (E)IPE)IP均不能用作指令的目的寄存器。均不能用作指令的目的寄存器。段寄存器间不能直接传送,也不能直接将立即数送段寄存器间不能直接传送,也不能直接将立即数送给段寄存器。给段寄存器。源操作数为立即数源操作数为立即数, ,而目的操作数类型不确定时而目的操作数类型不确定时, ,要要给目的操作数加类型说明。给目的

57、操作数加类型说明。源操作数和目的操作数源操作数和目的操作数不能同为存储器操作数不能同为存储器操作数。 目的操作数目的操作数, , 源操作数源操作数 REG/MEM/SREG REG/MEM/SREG,REGREG REG/MEM REG/MEM, SREG SREG REG/SREG REG/SREG, MEM MEM REG/MEM REG/MEM, IMM IMM2- MOV DSMOV DS,100100 MOV 1000HMOV 1000H,23H23H错。错。源、目的操作数不能同为存储器寻址。源、目的操作数不能同为存储器寻址。 MOV 1000HMOV 1000H,2000H2000

58、H错。立即数不能直接赋给段寄存器。错。立即数不能直接赋给段寄存器。错。目的操作数长度不确定。错。目的操作数长度不确定。 MOV CSMOV CS,AX AX 错。不能用传送指令改变代码段寄存器。错。不能用传送指令改变代码段寄存器。 MOV AXMOV AX,0100H+BX+BP0100H+BX+BP错。地址寄存器不能同为基址寄存器。错。地址寄存器不能同为基址寄存器。 例例 识别下列指令的正确性,对错误的指令,说识别下列指令的正确性,对错误的指令,说明错误的原因。明错误的原因。MOV AXMOV AX,100100MOV DSMOV DS,AXAXMOV MOV WORD PTRWORD PT

59、R 1000H 1000H,23H23HMOV AXMOV AX,2000H2000HMOV 1000HMOV 1000H,AXAX2-2. 2. 交换指令交换指令n操作:操作: ( (目的操作数目的操作数) ) ( (源操作数源操作数) )n格式:格式:XCHG XCHG 目的操作数,源操作数目的操作数,源操作数REG/MEMREG/MEM, REG REG REG REG, MEM MEMXCHGAX,CX等价如下指令等价如下指令: MOV BX , AX MOV AX , CX MOV CX , BX 注意:注意: (1 1)该指令不影响标志位;)该指令不影响标志位; (2 2)不允许使

60、用段寄存器。)不允许使用段寄存器。2- MOVSX ECX , AL MOVSX ECX , AL ; (AL)= F8H(AL)= F8H ; (ECX)F= FFFF FFF8 ; (ECX)F= FFFF FFF8 MOVZX ECX , AX ; (AX) = FFF8H MOVZX ECX , AX ; (AX) = FFF8H ; (ECX) = 0000 FFF8H ; (ECX) = 0000 FFF8H3. 3. 扩展传送指令(非扩展传送指令(非80868086指令)指令)n 格式:格式: MOVSX MOVSX 目的操作数,源操作数目的操作数,源操作数 MOVZX MOVZ

61、X 目的操作数,源操作数目的操作数,源操作数n 操作:操作: MOVMOVS SX X:带符号扩展指令带符号扩展指令 MOV MOVZ ZX X: 零扩展指令零扩展指令n 特点:扩展后数的真值不变。特点:扩展后数的真值不变。2-4. 4. 地址传送指令地址传送指令n格式:格式:LEA LEA 目的操作数,源操作数目的操作数,源操作数 REG16/REG32 MEMREG16/REG32 MEMn操作:操作: REG16/REG32 EA REG16/REG32 EA (源操作数地址偏移) 装入有效地址装入有效地址注意:注意: 寄存器、立即数和段寄存器都不能作为源操作数。寄存器、立即数和段寄存器

62、都不能作为源操作数。 2-2-说明说明:p LEA LEA指令处理变量的地址指令处理变量的地址( (E EA A) )而不是变量的内容而不是变量的内容p LEALEA和和MOVMOV指令的比较指令的比较 MOV BX, OFFSET VAL ;MOV BX, OFFSET VAL ;将将VALVAL的有效地址的有效地址=BX BX MOV BX, VAL ; MOV BX, VAL ;将将VALVAL的值的值=BXBX LEA BX, VAL ; LEA BX, VAL ;将将VALVAL的有效地址的有效地址=BXBXp MOV MOV指令用指令用 OFFSETOFFSET操作不能直接取数组中

63、任意元操作不能直接取数组中任意元素素 的位移量,只能取数组的第一个元素的位移的位移量,只能取数组的第一个元素的位移量,而量,而LEALEA可以传送任意数组元素的位移量。可以传送任意数组元素的位移量。 如LEA DX, BETABXSIp LEA LEA的源操作数必须是存储器操作数的源操作数必须是存储器操作数p LEA LEA不影响不影响F F标志标志2-5. 5. 堆栈指令堆栈指令PUSH/POPn格式:格式:PUSHPUSH源操作数源操作数REG16/MEM16REG16/MEM16REG32/MEM32REG32/MEM32n操作:操作: ( (E)SP)-2/4(E)SPE)SP)-2/

64、4(E)SP ( (源操作数源操作数)()(SS:(E)SPSS:(E)SP)注:注:286286以上可以有立即数方式。以上可以有立即数方式。(1) (1) 压栈指令压栈指令2-先调整指针,先调整指针, 然后存储数据;然后存储数据;先压高字节后压低字节先压高字节后压低字节2-n格式:格式:POP POP 目的操作数目的操作数 MEM16/MEM32/REG16/REG32MEM16/MEM32/REG16/REG32n操作操作:( ( SS:(E)SP)SS:(E)SP)目的操作数目的操作数 ( (E)SP)+ 2/4(E)SPE)SP)+ 2/4(E)SP(2) (2) 弹栈指令弹栈指令2-

65、先传数据,先传数据, 后调整指针后调整指针先弹低字节后弹高字节。先弹低字节后弹高字节。2-堆栈指令的操作数只能为堆栈指令的操作数只能为字或双字字或双字。80868086只有字操作指令只有字操作指令操操作作数数是是存存储储器器寻寻址址时时,操操作作数数长长度度不不确确定定时时, 要用要用PTRPTR运算符。运算符。PUSHPUSH和和POPPOP要成对出现要成对出现,以保持堆栈平衡,以保持堆栈平衡堆栈指令也隐含了一个堆栈指令也隐含了一个目的目的/ /源操作数源操作数堆栈堆栈。压压栈栈顺顺序序是是先先压压高高字字节节后后压压低低字字节节,弹弹栈栈则则是是先先弹低字节后弹高字节弹低字节后弹高字节。(

66、3)(3)堆栈指令使用说明堆栈指令使用说明: :2- 例例 用堆栈操作指令将用堆栈操作指令将BXBX和和CXCX中的两个中的两个1616位位数(其中数(其中BXBX是高是高1616位)组成位)组成3232位数传送到位数传送到EAXEAX寄寄存器中。存器中。 PUSH PUSH BXBX ;PUSH PUSH CXCX ; POP POP EAXEAX EAX = BX :CX EAX = BX :CX解:解:SP1SP1-2BHBLCHCLSP1-4SS2-【例】分析下列程序段的执行情况。MOVCX,3000HMOVSP,CX;设置堆栈的底部,MOVAX,1234H;设置AX初始值,MOVBX

67、,5678H;设置BX初值,PUSHAXPUSHBX;将AX,BX内容压入堆栈POPAXPOPBX;由堆栈弹出数据送入AX,BX中实现实现AX,BX寄存器内容交换寄存器内容交换POP : POP : 先传数据先传数据 , 后调整指针后调整指针 ; ; 先弹低字节后弹高字节。先弹低字节后弹高字节。PUSH: PUSH: 先调整指针,先调整指针, 然后存储数据;然后存储数据;先压高字节后压低字节先压高字节后压低字节2-n说说明明: : XLATXLAT是是一一条条隐隐含含寻寻址址的的指指令令。隐隐含含两两个个操操作作数数:DS:(E)BXDS:(E)BX存存放放表表基基址址,ALAL存存放放查查表

68、表参数参数。使用前要给隐含操作数赋初值。使用前要给隐含操作数赋初值。6. 6. 查表指令查表指令n 格式:格式: XLATXLATn 操作:操作: (EBX)+(AL)ALEBX)+(AL)AL (BX)+(AL)AL (BX)+(AL)AL2- 例例2.52.5 内内存存中中自自TABLETABLE开开始始的的1616个个单单元元连连续续存存放放着着自自然然数数0 0到到1515的的平平方方值值( (构构成成一一个个平平方方表表) ),任任给给一一整整数数M M在在XXXX单单元元中中( (该该数数为为00M15)M15),查查表表求求M M的的平平方方值值,并并将结果存入将结果存入YYYY

69、单元中。单元中。解解: :LEA BXLEA BX,TABLETABLEMOV ALMOV AL,XXXX XLATXLAT MOV YYMOV YY,ALAL TABLE 0 TABLE 0+1 1+2 4+3 9+15 225XX 52-说明:说明:I/OI/O端口有两种寻址方式端口有两种寻址方式 直接寻址直接寻址, ,寻址范围为寻址范围为0 0255255; ; 间接寻址间接寻址, ,寻址范围为寻址范围为0 02 21616-1-1。(1)(1) 输入指令输入指令 格式:格式:IN IN 累加器累加器, , 端口端口 AL/AX/EAX AL/AX/EAX,IMM8IMM8 AL/AX/

70、EAX AL/AX/EAX,DXDX 操作:操作: AL/AX/EAXAL/AX/EAX(I/O(I/O端口端口) )7. 7. I/OI/O指令指令2-(2) (2) 输出指令输出指令n格式:格式:OUT OUT 端口端口, , 累加器累加器 IMM8, AL/AX/EAXIMM8, AL/AX/EAX DX , AL/AX/EAX DX , AL/AX/EAXn操作:(操作:(AL/AX/EAXAL/AX/EAX)I/OI/O端口端口2-2-2- T+1 O+2 M+3 .+4 .+5 20+6 R+7 O+8 S+9 E+10 30+11 K+12 A+13 T+14 E+15 .+16

71、 25NAMESDS 例例 设程序在数据段中定义的设程序在数据段中定义的数组如下:数组如下: NAMES DB TOM. NAMES DB TOM. DB 20 DB 20 DB ROSE DB ROSE DB 30 DB 30 DB KATE. DB KATE. DB 25 DB 25 请指出下列指令是否正确请指出下列指令是否正确, ,如如正确,正确,A A累加器中的结果是多少?累加器中的结果是多少?8. 8. 传送指令应用举例传送指令应用举例2-1. 1. MOV BX, OFFSET NAMES MOV BX, OFFSET NAMES MOV AL,BX+5 MOV AL,BX+5(

72、(AL)=NAMES+5=20AL)=NAMES+5=202. MOV AX, WORD PTR NAMES+12. MOV AX, WORD PTR NAMES+1 ( (AX)=NAMES+1=AX)=NAMES+1=MOMO=4D4FH=4D4FH T+1 O+2 M+3 .+4 .+5 20+6 R+7 O+8 S+9 E+10 30+11 K+12 A+13 T+14 E+15 .+16 25NAMESDS3. 3. MOV BX, 6MOV BX, 6 MOV SI,5 MOV SI,5 LEA DI,NAMESBXSI LEA DI,NAMESBXSI MOV AL,DI MOV

73、 AL,DI ( (DI)=NAMESDI)=NAMES偏移地址偏移地址+(+(BX)+(SI)BX)+(SI) =NAMES =NAMES偏移地址偏移地址+11+11( (AL)=NAMES+11=AL)=NAMES+11=K K=4BH=4BH2- 它的操作结果一般会影响标志寄存器中的它的操作结果一般会影响标志寄存器中的状态标志位,如状态标志位,如ZFZF、CFCF、SFSF、OFOF、AFAF、PFPF等。等。2.2.3.4.2 3.4.2 算术运算类指令算术运算类指令2-1. 1. 加法加法/ /减法指令减法指令 n操作:操作: ADDADD:( (目的目的)+()+(源源) ) 目的

74、目的 SUB: (SUB: (目的目的)-()-(源源) ) 目的目的 ADCADC:( (目的目的)+()+(源源)+)+CFCF目的目的 SBB: (SBB: (目的目的)-()-(源源)-)-CFCF目的目的目的操作数,源操作数目的操作数,源操作数REGREG, REG/MEM/IMM REG/MEM/IMMMEMMEM, REG/IMM REG/IMMn 格式格式: : ADDADD SUB SUB ADCADC SBB SBB2-列列3.12 3.12 已知已知 AL = 0C1H , BL = 7FH. AL = 0C1H , BL = 7FH. SUB AL SUB AL , B

75、LBL 人工计算:人工计算: 1100 0001 (AL) 1100 0001 (AL) - 0111 1111 (BL) - 0111 1111 (BL) = 0100 0010 42H = 0100 0010 42H AL = 42 H ,ZF= 0 , SF=0, AL = 42 H ,ZF= 0 , SF=0, CF = 0CF = 0,AF = 1AF = 1 ,PF= 1 , ,PF= 1 , OF =1 OF =1 负负- -正正 = = 正正 , ,或或 C2=0 , C1=1C2=0 , C1=1 对于无符号数,对于无符号数, CF = 0 ,CF = 0 ,无溢出;无溢出;

76、 对于有符号数,对于有符号数, OF = 1 ,OF = 1 ,溢出。溢出。 机器计算过程:机器计算过程: 1100 00011100 0001 + 1000 0001 ; + 1000 0001 ;补码补码 ,BL BL 求反加求反加1 1 = = 1 1 0100 0010 0100 0010 ; 42H42H 根据补码溢出判断标准,根据补码溢出判断标准,C2=1,C1=0 ,C2=1,C1=0 ,溢出;溢出; AL = 42 H ,ZF= 0 , SF=0, AL = 42 H ,ZF= 0 , SF=0, CF = 0CF = 0,AF = 1AF = 1 ,PF= 1 , ,PF=

77、1 , OF=1OF=1 用补码加法实现减法时,用补码加法实现减法时, CF , AF CF , AF 需要取反。需要取反。2-X 34HX 34H+1 12H+1 12H+2 78H+2 78H+3 56H+3 56HY EAHY EAH+1 3FH+1 3FH+2 33H+2 33H+3 A0H+3 A0H解:解: 用用80868086指令指令 MOV AX MOV AX,Y Y SUB X SUB X,AX AX ;低低1616位字数据相减位字数据相减 MOV AXMOV AX,2Y2Y SBB 2X SBB 2X,AX AX ;高高1616位字数据相减位字数据相减 用用80386/48

78、680386/486指令指令 MOV EAXMOV EAX,DWORD PTRDWORD PTR Y Y SUB SUB DWORD PTRDWORD PTR X X,EAXEAX 两个两个3232位双字数据位双字数据X X、Y Y定义如下:定义如下: X DW 1234HX DW 1234H,5678H 5678H ;X = 56781234X = 56781234 Y DW 3FEAH Y DW 3FEAH,A033H ; Y = 33A03FEAA033H ; Y = 33A03FEA请编写计算请编写计算X=XX=XY Y的程序段(低位在前)的程序段(低位在前)例例2-特殊加减法指令特殊

79、加减法指令INC: (INC: (目的操作数目的操作数 ) +1 ) +1 目的操作数目的操作数DEC: (DEC: (目的操作数目的操作数 ) +1 ) +1 目的操作数目的操作数 目的操作数:寄存器或存储器目的操作数:寄存器或存储器影响状态标志:影响状态标志:OF ,SF,ZF,AF,PFOF ,SF,ZF,AF,PF。不影响不影响CFCFINC SI INC SI INC WORD PTR SI INC WORD PTR SI INC BYTE PTR BX SIINC BYTE PTR BX SIDEC ECXDEC ECX2-加法加法/ /减法指令使用说明:减法指令使用说明:ADD/

80、SUBADD/SUB指令用于指令用于单个字节单个字节/ /字字/ /双字数双字数的加的加/ /减减法运算;法运算;ADC/SBBADC/SBB指令则常用于指令则常用于多精度或多字节多精度或多字节/ /多字多字/ /多多双字数双字数的加的加/ /减法运算。减法运算。INC/DECINC/DEC REG/MEM REG/MEM ADD/SUB ADD/SUB REG/MEM,1 REG/MEM,1 两两者者都都执执行行加加1/1/减减1 1操操作作,但但前前者者不不影影响响进进位,而后者影响位,而后者影响。指令的异同:指令的异同:2-2. 2. 整数变反指令整数变反指令( (求补求补) )n格式:

81、格式: NEG NEG 目的操作数目的操作数 REG/MEMREG/MEMn操作:操作: 0-( 0-(目的操作数目的操作数) ) 目的操作数目的操作数n标志:标志: OFOF ,SF,ZF,ZF,PF, ,SF,ZF,ZF,PF,CFCFn应用:应用: 常用于求负数的绝对值。常用于求负数的绝对值。解解: : TEST AXTEST AX,8000H 8000H ;测试符号位测试符号位 JZ NEXT JZ NEXT NEG AX NEG AX NEXT NEXT:HLTHLT 例例 求求AXAX中存放的有符号数的绝对值。中存放的有符号数的绝对值。2-3. 3. 比较指令比较指令n格式格式:

82、CMP CMP 目的操作数,源操作数目的操作数,源操作数 REGREG, REG/MEM/IMM REG/MEM/IMMMEMMEM, REG/IMM REG/IMM CMP CMP与与SUBSUB指令都执行减法操作,但前者不因操作指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。结果改变目标操作数值,而后者改变。n操操作作:( (目目的的操操作作数数) )( (源源操操作作数数) ),根根据据操操作作结结果修改状态标志,但不改变目标操作数值。果修改状态标志,但不改变目标操作数值。2-【例】CMPAL,CL指令执行前,指令执行前,AL68H,CL9AH。指令执行:指令执行:A

83、L68H,CL9AH,CF1,ZF0,SF1,AF1,OF1,PF0。作为无符号数比较,被减数小于减数,不够减,有借位,作为无符号数比较,被减数小于减数,不够减,有借位,CF1。作为有符号数时,作为有符号数时,C2C1=10,结果已超出有符号数所能表示的范围,因,结果已超出有符号数所能表示的范围,因此此OF1,有溢出。,有溢出。2-2-单操作数乘法指令单操作数乘法指令q格式:格式:MUL/MUL/IMULIMUL 源操作数源操作数 REG/MEMREG/MEMq操操作作:MULMUL和和IMULIMUL分分别别为为无无符符号号数数和和有有符符号号数数乘乘法法指指令令,两两种种指指令令除除操操作

84、作数数类类型型不不同同外外,操操作作完全相同:完全相同:字字: (: (AX)(AX)(源操作数源操作数)DX:AXDX:AX双字双字:(:(EAX)(EAX)(源操作数源操作数)EDX:EAXEDX:EAX字节字节:(:(AL)(AL)(源操作数源操作数)AXAX源操作数源操作数4. 4. 乘法指令乘法指令2-单操作数乘法指令的被乘数是隐含的单操作数乘法指令的被乘数是隐含的( (在在AL / AL / AX / EAXAX / EAX中中) ),而结果长度一定是被乘数,而结果长度一定是被乘数/ /乘数乘数的二倍的二倍( (在在 AX / DX:AX / EDX:EAXAX / DX:AX /

85、 EDX:EAX中中) )。源操作数不能为立即数。源操作数不能为立即数。源操作数为存储器操作数,且类型不能确定时,源操作数为存储器操作数,且类型不能确定时,要显式说明操作数类型。要显式说明操作数类型。要根据是有符号数还是无符号数,分别选用要根据是有符号数还是无符号数,分别选用IMULIMUL或或MULMUL指令指令指令执行影响指令执行影响CFCF和和OFOF标志标志. .若指令执行后,结果若指令执行后,结果的高一半是有效数值位,则的高一半是有效数值位,则CF=OF=1CF=OF=1,否则否则CF=OF=0CF=OF=0。q乘法指令使用说明:乘法指令使用说明:2-例例2.112.11 解解: :

86、 MUL MUL BLBL指指令令完完成成ALAL和和BLBL中中的的两两个个无无符符号数相乘:号数相乘:AHAH含有效数字,含有效数字, OF=1OF=1、CF=1CF=1。( (AX)=0A8CHAX)=0A8CH (AL) 96H (AL) 96H(BL) 12H(BL) 12H12C12C+ 96+ 96 若若( (AL)=96HAL)=96H,(BL)=12H(BL)=12H,求分别执行求分别执行MUL BLMUL BL和和IMUL BLIMUL BL指令后的结果及指令后的结果及OFOF、CFCF状态。状态。2-AHAH含有效数字,含有效数字, OF=1OF=1、CF=1CF=1。解

87、解: : IMUL IMUL 执行执行有符号数乘法,此时有符号数乘法,此时AL=96HAL=96H中的数是负数,真值为中的数是负数,真值为-6-6AHAH,即:即:用补码表示:用补码表示: ( (AX)= F88CHAX)= F88CH( (AX)= -774HAX)= -774H (AL) 6AH (AL) 6AH(BL) 12H(BL) 12HD4D4+ 6A+ 6A2-5. 5. 除法指令除法指令n格式:格式:DIVDIVIDIV IDIV 源操作数(除数)源操作数(除数) REG/MEMREG/MEMn操作:操作:按源操作数类型按源操作数类型: :n状态标志不确定状态标志不确定字节字节

88、: : ( (AX)/(AX)/(源源) ),商存于,商存于ALAL中,余数存于中,余数存于AHAH字字: : ( (DX:AX)/(DX:AX)/(源源) ),商存于,商存于AXAX中中, ,余数存于余数存于DXDX双字双字: : ( (EDX:EAX)/(EDX:EAX)/(源源) ),商在,商在EAXEAX中中, ,余数在余数在EDXEDX2-n说明说明: : 除法指令的被除数是隐含的,且长度一定是除数的二倍除法指令的被除数是隐含的,且长度一定是除数的二倍( (在在AXAX,DX:AX DX:AX ,EDX:EAXEDX:EAX中中) )。使用除法指令常要扩展被除数长度使用除法指令常要扩

89、展被除数长度。 扩展时无符号数一般用:扩展时无符号数一般用: MOVZX AXMOVZX AX,ALAL MOV DX MOV DX,0 0 MOV EDX MOV EDX,0 0 有符号数一般用:有符号数一般用:CBW/CWD/CDQCBW/CWD/CDQ。 CBW : CBW : 等价指令等价指令 MOVSX AX , AL MOVSX AX , AL CWD CWD : AX AX 带符号扩展带符号扩展 DX:AX DX:AX 源操作数无立即数。源操作数无立即数。2- MOV AXMOV AX,a a ; ; ; abab在在CX:BXCX:BX中中 MOV AXMOV AX,c c ;

90、c ;c在在DX:AXDX:AX中中 ; ;ab+cab+c在在DX:AXDX:AX中中 ; ;(a(ab+c)/ab+c)/a, ,商存入商存入S S IMUL bIMUL bMOV CXMOV CX,DXDXMOV BXMOV BX,AXAXCWDCWDADD AXADD AX,BXBXADC DXADC DX,CXCXIDIV aIDIV aMOV SMOV S,AXAX 例例2.122.12 下列程序段完成下列程序段完成S=(ab+c)/aS=(ab+c)/a的运算,其中的运算,其中变量变量a a、b b、c c和和S S均为均为带符号带符号的字数据的字数据, ,结果的商存入结果的商存

91、入S S,余数则不计,填空完成下列程序。余数则不计,填空完成下列程序。2- 格式格式: : AAAAASAAMAADDAADASAAAAASAAMAADDAADAS 功能功能: :AAA/AAS:AAA/AAS: 未组合未组合BCDBCD加法加法/ /减减法调整指令,法调整指令, 隐含操作隐含操作 数为数为ALAL。DAA/DAS:DAA/DAS: 组合组合BCDBCD加法加法/ /减法减法调整指令调整指令, , 隐含操作数为隐含操作数为ALAL。6. 6. BCDBCD调整指令调整指令2-例例解:解: MOV ALMOV AL,BYTE PTR XBYTE PTR X ADD AL ADD

92、AL,BYTE PTR Y ; BYTE PTR Y ; 低位相加低位相加 DAA DAA ; BCD; BCD码调整码调整 MOV BYTE PTR XMOV BYTE PTR X,AL ; AL ; 保存低位结果保存低位结果 MOV MOV AL AL ,BYTE BYTE PTR PTR X1 X1 ; ; 取取字字变变量量的的高高字字节节 ADC AL ADC AL ,BYTE PTR Y1 ; BYTE PTR Y1 ; 高位相加高位相加 DAADAA MOV BYTE PTR X1 MOV BYTE PTR X1,AL AL ; X = 7412X = 7412两个两个4 4位压缩

93、位压缩BCDBCD码定义如下:码定义如下: X DW 3578HX DW 3578H Y DW 3834H Y DW 3834H 请编写计算请编写计算X+YX+Y的程序段。的程序段。 多字节多字节BCDBCD加法加法/ /减法只能用带进位减法只能用带进位/ /借位的字借位的字节加法节加法/ /减法指令实现!减法指令实现!2- AAM : AAM : 未组合未组合BCDBCD乘法乘法调整指令,调整指令, 隐含操作数隐含操作数AXAX。 将将AXAX中乘积调整为两个未组合中乘积调整为两个未组合BCDBCD数存于数存于AHAH 和和ALAL。AAD AAD : : 调整除法运算前调整除法运算前AXA

94、X中的被除数内容。中的被除数内容。 操作:操作:( (AH)AH)10+(AL)AX10+(AL)AX【例】设AL,BL是未压缩BCD码MULBL;AL*BL-AXAAM指令执行前,AL07H,BL09H。执行MUL后,AL3FH=63。执行AAM后,AH06H,AL03H。2- 程序段程序段MOVMOVAXAX,405H405HMOVMOVBLBL,06H06HAADAADDIVDIVBLBL 执行后执行后AXAX的内容为的内容为 。 A.A.307H 307H B.B.703H 703H C.C.4231H 4231H D.D.806H 806H A例例2- BCDBCD调整指令说明调整指

95、令说明: DAA/DASDAA/DAS、AAA/AASAAA/AAS隐含的操作寄存器是隐含的操作寄存器是ALAL,所以所以BCDBCD码码 加法加法/ /减法只能用累加器减法只能用累加器ALAL为目的操作数的加法为目的操作数的加法 / /减法减法 指令,且加法指令,且加法/ /减法指令后要跟调整指令。减法指令后要跟调整指令。 多字节、字和双字多字节、字和双字BCDBCD加法加法/ /减法只能用带进位减法只能用带进位/ /借位的借位的 字节字节加法加法/ /减法指令实现。减法指令实现。 ASCIIASCII码数的运算与非压缩码数的运算与非压缩BCDBCD码数的运算基本相同码数的运算基本相同, ,

96、但但 要保持结果仍为要保持结果仍为ASCIIASCII码,则需转换。码,则需转换。 AADAAD指令的功能不是将除法后的结果调整为指令的功能不是将除法后的结果调整为BCDBCD码码, ,而是而是 在除法前将在除法前将AXAX保存的两位非压缩保存的两位非压缩BCDBCD数调整为二进制数调整为二进制 数。该指令要放在数。该指令要放在DIVDIV指令之前。指令之前。2-2-n功功能能:分分别别按按位位进进行行逻逻辑辑“与与”、“或或”、“异或异或”、“测试测试”和和“非非”。格式:格式:ANDAND OR OR XOR XOR TEST TEST 目标操作数,源操作数目标操作数,源操作数 REGRE

97、G, REG/MEM/IMM REG/MEM/IMM MEM MEM, REG/IMM REG/IMM NOT NOT 目标操作数目标操作数 REG/MEMREG/MEM2.3.4.3 2.3.4.3 逻辑运算与移位指令逻辑运算与移位指令1. 1. 逻辑运算指令逻辑运算指令2-1.ANDAL,DATA2.ORAL,DATA3.XORAL,DATA4.NOTDATA5.NEGDATA6.ANDAL,0FH7.ORAL,01H8.XORAL,0FFH9.TESTAL,80H设设AL=0C4H=11000100B(DATA)=5AH=01011010B(AL)=01000000(AL)=110111

98、10(AL)=10011110(DATA)=10100101(DATA)=10100110(AL)=00000100(AL)=11000101(AL)=00111011(AL)=原值CF=OF=0,ZF=0,SF=1,PF=02-使用说明使用说明: : 编程时要根据操作合理选用指令,一般编程时要根据操作合理选用指令,一般: : 对某些二进制位对某些二进制位清零清零用逻辑用逻辑与与指令指令ANDAND; 对某些二进制位对某些二进制位置位置位用逻辑用逻辑或或指令指令OROR; 对对某某些些二二进进制制位位求求反反用用逻逻辑辑异异或或指指令令XORXOR, 全部位全部位求反求反用逻辑用逻辑非非指令指

99、令NOTNOT。 逻辑运算指令除逻辑运算指令除NOTNOT指令指令外,都影响标志寄存器的外,都影响标志寄存器的 状态标志位,且逻辑运算后进位标志状态标志位,且逻辑运算后进位标志CFCF一定为一定为0 0, 所以逻辑运算指令所以逻辑运算指令常用于清常用于清0 0和清进位和清进位。2- ANDAND指令与指令与TESTTEST指令的区别:指令的区别: 相同相同: : 都执行按位都执行按位“与与”操作,操作, 对状态标志位的影响相同对状态标志位的影响相同, , 不同不同: : ANDAND改变目标操作数的值改变目标操作数的值, , TESTTEST并不改变目标操作数的值。并不改变目标操作数的值。 所

100、所以以TESTTEST指指令令与与CMPCMP指指令令的的用用法法类类似似,用用于于产产生生按位测试的条件码。按位测试的条件码。2- 例例 已已知知寄寄存存器器DXDX:AXAX的的内内容容为为3232位位带带符符号号数数,编编写写一一段段程程序序使使DXDX:AXAX的的内内容容成成为为原原来来数数据据的的绝绝对值。对值。解解: : TEST DXTEST DX,8000H ;8000H ;测试符号位,产生状态测试符号位,产生状态 JZ EXIT ;JZ EXIT ;符号位符号位=0=0,结束,结束 NEG DX ;NEG DX ;求绝对值求绝对值 NEG AXNEG AX SBB DX S

101、BB DX,0 0EXIT:EXIT:HLTHLT2-2-2. 2. 移位指令移位指令 移位指令包括移位指令包括: :n算术移位指令算术移位指令( (SAL/SAR)SAL/SAR)n逻辑移位指令逻辑移位指令( (SHL/SHR)SHL/SHR)n循环移位指令循环移位指令( (ROR/ROL/RCR/RCL)ROR/ROL/RCR/RCL)n双精度移位指令双精度移位指令( (SHLD/SHRD)SHLD/SHRD)2-n 算术移位只对带符号数进行移,在移位过程中必须保持符号位不变。算术移位只对带符号数进行移,在移位过程中必须保持符号位不变。n 逻辑移位是对无符号数移位,移位时,逻辑移位是对无符

102、号数移位,移位时,总是用总是用0 0来填补已空出的数位。来填补已空出的数位。n 每左移一位,相当于将原数据乘以每左移一位,相当于将原数据乘以2 2; 每右移一位,相当于将原数据除以每右移一位,相当于将原数据除以2 2。n 根据移位操作的结果置标志寄存器中的状态标志(根据移位操作的结果置标志寄存器中的状态标志(AFAF位除外位除外)。)。n 若移位的次数是若移位的次数是1 1: SHL ,SAL SHL ,SAL 移位后的结果使最高位(符号位)发生变化移位后的结果使最高位(符号位)发生变化(C(CF FSFSF ),),则则 将溢出标志将溢出标志OFOF置置1;1; SAR SAR :OF =

103、0 ; SHR OF = 0 ; SHR :OF = OF = 右移动前的最高位;右移动前的最高位;n 若移次数大于若移次数大于1 1时,时,OFOF标志无效。标志无效。逻辑移位逻辑移位算术移位算术移位2-n ROL ROL和和RORROR指令在执行时,没有把指令在执行时,没有把CFCF套在循环中,常称为小循环移位。套在循环中,常称为小循环移位。n RCL RCL和和RCRRCR指令在执行时,连同指令在执行时,连同CFCF一起循环移位,称为大循环移位。一起循环移位,称为大循环移位。n 以上四条指令以上四条指令仅影响标志位仅影响标志位CFCF和和OFOF。n 对对OFOF的影响是的影响是: :

104、新的符号位与原来的符号位不同新的符号位与原来的符号位不同(CF(CFSF) SF) ,则使,则使OFOF1 1, 注意:指令RCR溢出测试在循环以前进行;循环移位指令循环移位指令2-使用说明:使用说明:n 移位指令常用于二进制数的倍乘和倍除移位指令常用于二进制数的倍乘和倍除, ,即算术即算术/ /逻辑逻辑移移n n位,相当于把二进制数乘以或除以位,相当于把二进制数乘以或除以2 2n n。n要注意算术右移要注意算术右移( (SAR)SAR)与逻辑右移与逻辑右移( (SHR)SHR)的区别:的区别: SARSAR在符号位和数值位依次右移的同时,用符号位在符号位和数值位依次右移的同时,用符号位充填符

105、号位;充填符号位; SHRSHR用用0 0充填符号位。充填符号位。 有符号和无符号数倍乘用有符号和无符号数倍乘用SHL/SALSHL/SAL均可均可; ; 有符号数用有符号数用SARSAR和无符号数用和无符号数用SHRSHR。n循环指令也常用于循环控制,如逻辑尺控制循环。循环指令也常用于循环控制,如逻辑尺控制循环。2- 例例 试编写用移位和加法指令完成计算试编写用移位和加法指令完成计算: : ( (EAX)9/4EAX)9/4 的程序段。的程序段。 解解: : ( (EAX)EAX)9/4=(EAX)9/4=(EAX)8+(EAX)/48+(EAX)/4MOV EBXMOV EBX,EAX ;

106、EAX ;保存保存EAXEAXSAL/SAL/SHLSHL EAX EAX,3 ;(EAX)8EAX3 ;(EAX)8EAXADDADD EAX EAX,EBX ;(EAX)8+(EAX)EAXEBX ;(EAX)8+(EAX)EAXSAR/SAR/SHRSHR EAX EAX,2 ;(EAX)9/4EAX2 ;(EAX)9/4EAX2-串操作约定串操作约定: :n 用用DS:(E)SIDS:(E)SI寻址源串寻址源串, ,允许段超越;允许段超越;n 用用ES:(E)DIES:(E)DI寻址目的串,但寻址目的串,但ESES段不能超越;段不能超越;n 由由DFDF标志位决定标志位决定( (E)S

107、IE)SI,(E)DI (E)DI 指针增减:指针增减:n DF=0, DF=0,递增;递增;DF=1,DF=1,递减递减;n 指令执行完成后,指令执行完成后, ( (E)SIE)SI,(E)DI (E)DI 指向下一个单元。指向下一个单元。n 由串长度(字节、字、双字)决定指针增减量大小;由串长度(字节、字、双字)决定指针增减量大小;n 带重复前缀时,用带重复前缀时,用( (E)CXE)CX作重复计数器作重复计数器。 2.2.3.3.4 3.3.4 串操作类指令串操作类指令2-1. 1. 串传送指令串传送指令 n格式:格式: MOVSMOVSB B/MOVS/MOVSW W/MOVS/MOV

108、SD D MOVS MOVS 目的串,源串目的串,源串 MEMMEM, MEM MEMn操操作作: : 将将DS:(E)SIDS:(E)SI所所指指的的源源串串中中的的一一个个字字节节、字字或或双双字字传传送送到到ES:(E)DIES:(E)DI指指的的目目的的串串中中, ,然然后后,按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)SI,(E)DIE)SI,(E)DI指针指针, ,即即: : ES:(E)DI(DS:(E)SI) ES:(E)DI(DS:(E)SI) ( (E)SI(E)SI)E)SI(E)SI)1/2/4 1/2/4 ;修改源指针修改源指针( (E)DI(E)D

109、I)E)DI(E)DI)1/2/4 1/2/4 ;修改目的指针修改目的指针2-n说明说明: :n应用:应用:用于数据块传送用于数据块传送 该指令允许加重复前缀该指令允许加重复前缀REPREP。即即: : REP REP MOVSB/MOVSW/MOVSD MOVSB/MOVSW/MOVSD 由由( (E)CXE)CX控制串传送指令控制串传送指令MOVSMOVS的执行次数。的执行次数。 相当于指令序列:相当于指令序列: AGAINAGAIN:MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSD LOOP AGAIN LOOP AGAIN2- 例例2.182.18 编写将数据段中自

110、编写将数据段中自AREA1AREA1开始的开始的100100个字数据搬到附加段中以个字数据搬到附加段中以AREA2AREA2开始的数据区中开始的数据区中的程序段。的程序段。解:解: 用用MOVMOV指令指令 LEA SILEA SI, AREA1 AREA1 LEA DI LEA DI, AREA2 AREA2 MOV CX MOV CX, 100 100 DONE: DONE: MOVMOV AX AX,SISI MOV MOV ES:DI ES:DI,AXAX ADD ADD SI SI,2 2 ADD ADD DI DI,2 2 LOOP LOOP DONE DONE2- 用基本串传送指

111、令用基本串传送指令 LEA SILEA SI, AREA1 AREA1 LEA DI LEA DI, AREA2 AREA2 MOV CX MOV CX, 100 100 CLD CLDDONE: MOVSWDONE: MOVSW LOOP DONE LOOP DONE 用重复串传送指令用重复串传送指令LEA SILEA SI, AREA1 AREA1LEA DILEA DI, AREA2 AREA2MOV CXMOV CX, 100 100CLDCLDREP MOVSWREP MOVSW2-n格式:格式: LODSB/LODSW/LODSDLODSB/LODSW/LODSD LODS LOD

112、S 源串源串 MEMMEMn说明说明: : 允许加重复前缀允许加重复前缀REPREP。n操作操作: : ( (DS:(E)SI)AL/AX/EAXDS:(E)SI)AL/AX/EAX 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)SIE)SI指针指针n应用:用于取数据块中元素值应用:用于取数据块中元素值2.2.串装入指令串装入指令2-3.3.串存储器指令串存储器指令 n格式:格式: STOSB/STOSW/STOSDSTOSB/STOSW/STOSD STOSSTOS 目的串目的串 MEMMEMn说明说明: : 允许加重复前缀允许加重复前缀REPREP。n操作操作: : AL/

113、AX/EAX(ES:(E)DI)AL/AX/EAX(ES:(E)DI) 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)DIE)DI指针指针n应应用用:用用于于数数据据块块初初始始化化。LODSLODS和和STOSSTOS结结合合常用于数据块传送。常用于数据块传送。2-4. 4. 串扫描指令串扫描指令 n格式:格式: SCASB/SCASW/SCASD SCASB/SCASW/SCASD SCASSCAS 目的串目的串 MEMMEMn说说明明: : 允允许许加加重重复复前前缀缀REPEREPE或或REPNEREPNE。扫扫描描次次数数由由( (E)CXE)CX指指定定。重复条件:

114、重复条件:REPE REPE :IF (E)CX)0 AND ZF=1 THEN IF (E)CX)0 AND ZF=1 THEN 重复串扫描重复串扫描REPNE:REPNE: IF (E)CX)0 AND ZF=0 THEN IF (E)CX)0 AND ZF=0 THEN 重复串扫描,即:重复串扫描,即: 只要串元素不等且未到达串尾,那么就重复执行。只要串元素不等且未到达串尾,那么就重复执行。n操操作作: : ( (AL/AX/EAX)-(ES:(E)DI),AL/AX/EAX)-(ES:(E)DI),影影响响标标志志, ,但但不不改改变变目目的的串内容串内容。按。按DFDF指示和操作数长

115、度修改指示和操作数长度修改( (E)DIE)DI指针。指针。n应用:用于在串数据中查找关键字。应用:用于在串数据中查找关键字。2- MOV SIMOV SI,2170H 2170H ;搬移搬移 MOV CXMOV CX,100H100HCLD CLD MOV DIMOV DI,1000H 1000H ;查找查找 MOV CXMOV CX,100H100H JNZ K1JNZ K1 MOV BYTE PTR DI MOV BYTE PTR DI,20H 20H ;ASCIIASCII码码2020H H为空为空K1K1:MOV DI,1000HREP MOVSBREPNE SCASBDEC DI

116、; 回调指针回调指针 例例 用串操作指令将用串操作指令将100100H H个数的字符从个数的字符从21702170H H处搬到处搬到10001000H H处,然后从中检索与处,然后从中检索与ALAL中字符相同的单元,并将此中字符相同的单元,并将此单元换成空格符,程序段如下,请把所缺指令填上。单元换成空格符,程序段如下,请把所缺指令填上。2-5. 5. 串比较指令串比较指令n格式:格式: CMPSB/CMPSW/CMPSDCMPSB/CMPSW/CMPSD CMPS CMPS 源串,目的串源串,目的串 MEMMEM, MEM MEMn说明说明: : 允许加重复前缀允许加重复前缀REPEREPE或

117、或REPNEREPNE。n操操作作: : (DS:(E)SI)-(ES:(E)DI),DS:(E)SI)-(ES:(E)DI),影影响响标标志志, ,但但不不改改变变源源串串和和目目的的串串内内容容。按按DFDF指指示示和和操操作作数数长长度度修修改改( (E)DIE)DI、(E)SI(E)SI指针指针n应用:常用于比较两个串数据是否匹配。应用:常用于比较两个串数据是否匹配。2-列:列:对内存中的某给定的数据块或字符串进对内存中的某给定的数据块或字符串进行搜索扫描,行搜索扫描,看其中有无关键字,看其中有无关键字,若有,若有,将搜将搜索次数和存放关键字的地址记录下来。索次数和存放关键字的地址记录

118、下来。分析:分析:主体指令主体指令SCAS。要搜索的关键字存放在要搜索的关键字存放在AL/AX/EAX中,中,被搜索实地址存放在被搜索实地址存放在ES:DI中;中;搜索数据长度存放在搜索数据长度存放在CX/ECX中;中;利用重复前缀利用重复前缀REPNE,在没有成功匹配前,在没有成功匹配前,继续搜索;继续搜索;标志位标志位ZF=1,表示成功搜索到需要的关键字;表示成功搜索到需要的关键字;2-INC2-2-包括以下包括以下5 5种指令:种指令:v无条件转移指令无条件转移指令( (JMP)JMP)v过程调用过程调用/ /返回指令返回指令( (CALL/RET)CALL/RET)v条件转移指令条件转

119、移指令( (JCC)JCC) v循环控制指令循环控制指令( (LOOP)LOOP)v中断指令中断指令( (INT)INT)无条件向目标地址转移无条件向目标地址转移, ,可分为段内、段间转移,可分为段内、段间转移,段内、段间转移又可分段内、段间转移又可分别分为直接和间接转移。别分为直接和间接转移。实现子程序调用实现子程序调用或返回,也可归或返回,也可归入无条件转移指入无条件转移指令中。令中。根据指令执行后标志根据指令执行后标志寄存器的状态进行转寄存器的状态进行转移移, ,通常和通常和CMPCMP或或TESTTEST指令组合使用。指令组合使用。控制循环程序的循环,控制循环程序的循环,实质上也是条件

120、转移指实质上也是条件转移指令,在令,在CX(ECX)CX(ECX)中预置中预置循环次数。循环次数。 产生一个由产生一个由8 8位位立即数指定中断号立即数指定中断号的软中断和处理溢的软中断和处理溢出中断。出中断。 这类指令的共同特点是可改变程序的正常执行顺序这类指令的共同特点是可改变程序的正常执行顺序, ,使之转移。而改变程序的执行顺序使之转移。而改变程序的执行顺序, ,本质上就是要改变本质上就是要改变CS:(E)IPCS:(E)IP的内容,这类指令对标志位无影响。的内容,这类指令对标志位无影响。2.3.3.5 2.3.3.5 控制转移类指令控制转移类指令2-n直接转移直接转移n间接转移间接转移

121、1. 1. JMP JMP 指令指令 按目标地址的寻址方式,转移可分为:按目标地址的寻址方式,转移可分为:2-1 1)直接转移)直接转移 指令中直接给出转移的目标地址(指令中直接给出转移的目标地址(目标标号目标标号)。)。 直接短直接短( (SHORT)SHORT)转移转移 段内段内( (NEAR)NEAR)直接转移直接转移 段间段间( (FAR)FAR)直接转移直接转移 相对转移相对转移: 转转移移的的目目标标地地址址为为当当时时的的( (E)IPE)IP地地址址加加上上一一8 8位位位位移移量量( (短短转转移移) )、1616位位位位移移量量(16(16位位寻寻址址) )或或3232位位

122、位移量位移量(32(32位寻址位寻址) ) ,即:,即: ( (E)IP) + DISP8/16/32 (E)IPE)IP) + DISP8/16/32 (E)IP相对转移相对转移2- 例例 指指令令JMP JMP NEAR NEAR PTR PTR PROGPROG在在程程序序代代码码段段中中的的偏偏移移地地址址为为20132013H H(这这是是该该指指令令第第一一字字节节的的偏偏移移地地址址) ),组组成成该该指指令令的的三三字字节节机机器器码码为为E9HE9H、12H12H、34H(34H(其其中中E9HE9H为操作码为操作码) )。该指令执行后,程序将转去何处。该指令执行后,程序将转

123、去何处? ? 解:该指令执行过程如下解:该指令执行过程如下: :54285428H H34123412H H位位移移量量程序转移到当前代码段中偏移地址为程序转移到当前代码段中偏移地址为54285428H H的单元执行的单元执行E9HE9H12H12H34H34H存储器存储器指指令令代代码码段段20132013H HIP 5428HIP 5428H+ IP 2016H+ IP 2016H20162016H H2-格式:格式:JMPFARPTR目标标号目标标号操作:操作:IP目标标号的偏移地址目标标号的偏移地址(OFFSET)CS目标标号所在段的段基址目标标号所在段的段基址(SEG)【例】下面程序

124、段可实现段间直接转移。C1SEGMENTJMPFARPTRADDR1C1ENDSC2SEGMENTADDR1:MOVCL,ALC2ENDS段间直接转移段间直接转移:2-段内间接转移段内间接转移格式:格式:JMPWORDPTROPR操作:操作:IP(EA)注意:OPR为寄存器时,不加WORDPTR【例例】JMPBX-寄存器段内间接转移寄存器段内间接转移设设CS1000H,IP3000H,BX0102H。该指令的执行首先以寄存器该指令的执行首先以寄存器BX的内容取代的内容取代IP的内容的内容,CPU将转移到物理地址将转移到物理地址CS16IP10102H单元执行后续指令。单元执行后续指令。【例例】

125、JMPWORDPTRSI-存储器段内间接转移存储器段内间接转移设设DS2000H,SI0100H,偏移量的字单元的物理地址偏移量的字单元的物理地址DS16SI20100H指令执行前,指令执行前,CS4000H,IP2500H,(20100H)22H,(20101H)30H。指令执行后,指令执行后,IP3022H,程序转移到,程序转移到43022H地址处继续执行地址处继续执行2 2) 间接转移间接转移2-段间间接转移段间间接转移格式:JMPDWORDPTROPR操作:IP(EA)CS(EA2)其中,OPR只能是存储器操作数。【例】JMPDWORDPTRALPHABPDI也可以写成JMPDWORD

126、PTRBP+DI+ALPHA物理地址SS16BPDIALPHA将低位字送IP,高位字送CS程序便无条件转移到新的CS确定的代码段,新的IP为偏移地址的地方继续执行下去。2-2. 8086/80882. 8086/8088的条件转移指令都为短转移,的条件转移指令都为短转移, 80386/8048680386/80486则推广到段内转移。则推广到段内转移。2- 例例 已知已知( (AX)=14C6HAX)=14C6H,(BX)=80DCH(BX)=80DCH, 执行以下程序后,程序转向哪里?执行以下程序后,程序转向哪里? 无符号数:无符号数: 14C6H 80DCH14C6H 80DCH14C6H

127、 80DCH CMPCMP AX AX,BXBX JL LP0 ; SF JL LP0 ; SFOFOF,有符号比较,有符号比较 JA LP0 ; CF=1 JA LP0 ; CF=1,ZF=0 ZF=0 JNO PROG1 JNO PROG1 JNC PROG2 JNC PROG2 JMP JMP PROG3PROG32-2. CALL2. CALL指令与指令与JMPJMP指令的不同之处是指令的不同之处是: : CALL CALL指令执行时,增加了保存断点地址进栈的操作。指令执行时,增加了保存断点地址进栈的操作。3. 3. 循环指令只能是短转移。循环指令只能是短转移。 LOOP循环提(多条指

128、令);REP单条指令。2-指令系统练习指令系统练习2-1.MOVDS,1002.MOV1000,23H3.MOV1000,20004.MOV1020H,DX5.MOVAX,100H+BX+BP6.MOVCS,AX7.PUSHAL8.PUSHWORDPTRSI9.INAL,80H10.OUTCX,AL11.INAL,380立即数不能穿端寄存器立即数不能穿端寄存器目标地址长度不确定目标地址长度不确定操作数不能同时为存储器操作数不能同时为存储器立即数不能作为目的操作数立即数不能作为目的操作数不能同时为基址寄存器不能同时为基址寄存器错错压栈指令没有字节操作压栈指令没有字节操作正确正确地址表达错,地址表

129、达错,80H地址寄存器必须是地址寄存器必须是DX超过超过255,应该用应该用DX列:分析下列指令列:分析下列指令2-12.MOVCL,3300H13.MOVAX,2100HBP14.MOVDS,ES15.MOVIP,2000H16.PUSHCS17.POPCS18.XCHG200,AL19.JMPBX20.SHRDX,2数据长度不一致正确段寄存器不能直接传数据IP不能作为目的寄存器CS不能做栈操作目的操作数不能立即数正确移动次数超过1时,必须使用寄存器CL2-指令正确错误判断的一般方法:n对双操作数,对双操作数,源、目操作数是否同时是存储器地址。字源、目操作数是否同时是存储器地址。字符串操作指

130、令除外,如:符串操作指令除外,如:MOVSMEM,MEM;n源、目操作数类型是否一致。特殊情况,源、目操作数类型是否一致。特殊情况,SARAX,CLMOVSXEBX,AL;n段跨越前缀可以修改操作数所在的段。特殊:堆栈、转段跨越前缀可以修改操作数所在的段。特殊:堆栈、转移及串操着指令的目的操作数。移及串操着指令的目的操作数。如:如:STOSES:MEM;n移位指令对移位指令对8086,立即数只能为立即数只能为1,286以上可以小于等以上可以小于等于于255;n代码段寄存器代码段寄存器CS不能作为指令的目的寄存器,段寄存器不能作为指令的目的寄存器,段寄存器间不能直接传送数据,更不能传送立即数;间

131、不能直接传送数据,更不能传送立即数;n使用存储器寻址时,使用存储器寻址时,看基址、变址寄存器是否正确。不看基址、变址寄存器是否正确。不能同时出现能同时出现2个基址或变址寄存器,如个基址或变址寄存器,如dispbpbxn堆栈操着只能是字及双字;没有字节操着;堆栈操着只能是字及双字;没有字节操着;n输入出指令直接寻址范围输入出指令直接寻址范围0255;大于大于255时,时,使用间接使用间接寻址,必须使用寻址,必须使用DX寄存器;寄存器;2-nXCHGAX,BX,XCHGAX,BX;n低地址放低字节;高地址放高字节;低地址放低字节;高地址放高字节;n有效地址是指存储器,有效地址是指存储器,非立即数和

132、寄存器直接寻址;非立即数和寄存器直接寻址;nANDAX,AX,ORAX,AX?n隐含操着的指令,隐含操着的指令,如如XLAT指令必须将指令必须将BX,AL设置初值,否则设置初值,否则结果错误;结果错误;n串传送指令执行后,串传送指令执行后,同时调整了数据指针;同时调整了数据指针;nLEABX,VARMOVBX,OFFSSETVARMOVBX,VARLEABX,VARSI;不能使用;不能使用OFFSETMOVBX,VARSI等效2-列:列: 将将ASCIIASCII码数转换为压缩码数转换为压缩BCDBCD码数。若在内存数据区码数。若在内存数据区 中(输入缓冲区),已有若干个有中(输入缓冲区),已

133、有若干个有ASCIIASCII码表示的十码表示的十进制数码(显然每个存储单元只存放一位十进制数)。进制数码(显然每个存储单元只存放一位十进制数)。要求把他们转换为相应的要求把他们转换为相应的BCDBCD码,且把相邻两个存储码,且把相邻两个存储单元的单元的十进制码的十进制码的BCDBCD合并在一个单元中,地址高的合并在一个单元中,地址高的放在高放在高4 4位,位,这样可以压缩一半存储单元。这样可以压缩一半存储单元。分析:分析: ASCII ASCII 到到BCD BCD 转换方法,转换方法, 高高4 4位设置位位设置位0 0 ;两位两位BCDBCD码组合在一个单元,码组合在一个单元, 只需要将高

134、地址的数只需要将高地址的数 据左移动据左移动4 4位,位, 再与地址再与地址4 4位相加;位相加; 如果被转换的如果被转换的ASCIIASCII码是奇数,码是奇数, 做特殊处理。即做特殊处理。即把把 地址最高或最低的一个数转换为非压缩地址最高或最低的一个数转换为非压缩BCDBCD码;码;然后处理剩余偶数个然后处理剩余偶数个ASCIIASCII码。码。2-MOVSI,OFFSETASCBUFMOVDI,OFFSETBCDBUFMOVCX,COUNTRORCX,1JNCNEXTROLCX,1MOVAL,SIINCSIANDAL,0FHMOVDI,ALINCDIDECCXSHRCX,1;SI作为AS

135、CII码数据区指针;DI作为BCD码数据区指针;;将ASCII个数送CX计数;;判断ASCII码个数偶奇数否;;是偶数则转入循环体;是奇数则将最低地址转换为非压缩BCD码ASCII个数减一;CX22-NEXT:MOVAL,SIINCSIANDAL,0FHMOVBL,ALMOVAL,SIINCSIPUSHCXMOVCL,4SALAL,CLPOPCXADDAL,BLMOVDI,ALINCDILOOPNEXTHLT;将SI指向的ASCII码送AL;SI指向下一个数据;低位ASCII转换为非压缩BCD;BL保存低位BCD码,高4位为0;取高位ASCII码;保存CX值;AL中的ASCII码左移动4位,;

136、低4位位0;恢复CX;装配连续2位ASCII为2位BCD;送结果到BCD码缓冲区;调整指针;CX0继续循环体2-列:若自列:若自BLOCK开始的内存缓冲区中,有开始的内存缓冲区中,有100个个16位位带符号数,带符号数,要求找出其中的最大值,要求找出其中的最大值,将它存放到将它存放到MAX单元中。单元中。分析:将第一个数据取入到分析:将第一个数据取入到AX,AX作为工作单元;作为工作单元;AX始终存放目前最大值;始终存放目前最大值;分别对余下的分别对余下的99个数据进行比较处理;个数据进行比较处理;对大于对大于AX寄存器的数据,寄存器的数据,立即存放到立即存放到AX;对于对于99次比较,次比较

137、,必然需要编一个循环程序;必然需要编一个循环程序;循环体完成数据的比较功能;循环体完成数据的比较功能;利用条件转移指令,利用条件转移指令,判断程序的流向;判断程序的流向;循环的关键是初值设定。循环的关键是初值设定。2-MOVBX,OFFSETBLOCK;将将BLOCK偏移地址送偏移地址送;BX作为缓冲区的指针作为缓冲区的指针MOVAX,BXINCBX;数据指针指向下一个字数据;数据指针指向下一个字数据;INCBXMOVCX,99;循环初值即比较次数;循环初值即比较次数AGAIN:CMPAX,BX;AX与与BX所指存储单元中的所指存储单元中的;两个;两个16位数比较位数比较JGNEXT;若;若A

138、X中的数大,中的数大,不需要处理不需要处理MOVAX,BX;否则;否则,大数送大数送AX,作为当前,作为当前;的最大数据。;的最大数据。NEXT:INCBX;数据指针加;数据指针加2INCBXDECCX;循环次数减一次循环次数减一次JNZAGAIN;CX0继续比较继续比较MOVMAX,AX;否则;否则AX为最好结果,为最好结果,并存放并存放;到;到MAX单元单元HLT2-列:分析下列程序段完成的是什么功能,列:分析下列程序段完成的是什么功能,并写出执行后结果。并写出执行后结果。(AL)=?(DL)=?MOVAL,87HMOVDL,ALANDAL,0FHORAL,30MOVCL,4SHRDL,CLORDL,30H屏蔽AL的高4位将个位”7“转换为ASCII吗DL变为非压缩BCD码8形成8的ASCII码功能:将“87”变为ASCII码数据.(AL)=37H(DL)38H2-2-2-2-2-2-2-2-2-2-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号