《二章微处理器和指令系统》由会员分享,可在线阅读,更多相关《二章微处理器和指令系统(183页珍藏版)》请在金锄头文库上搜索。
1、二章微处理器和指令系统Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望2.1 2.1 IntelIntel系列微处理器概述系列微处理器概述qIntel 8086/8088q Intel 80286q Intel 80386/80486qPentium (80586)(80586)22.1.1 2.1.1 Intel 8086/8088Intel 8086/8088 8088 8088 是准是准1616位微处理器位微处理器q8086/80888086/8088除了外数据总线位数及与此相
2、关的部分逻辑除了外数据总线位数及与此相关的部分逻辑稍有差别外稍有差别外, ,内部结构和基本性能相同内部结构和基本性能相同, ,指令系统完全兼容。指令系统完全兼容。 8086 8086 是全是全1616位微处理器位微处理器q在在8086/80888086/8088的设计中,引入了两个重要的结构概念:的设计中,引入了两个重要的结构概念: 指令流水线指令流水线 存储器分段存储器分段q数据总线和地址总线的低数据总线和地址总线的低1616位位/ /低低8 8位分时复用。位分时复用。 这两个概念在以后升级的这两个概念在以后升级的IntelIntel系列微处理器中一直被系列微处理器中一直被沿用和发展。正是这
3、两个概念的引入,使沿用和发展。正是这两个概念的引入,使8086/80888086/8088比原来比原来的的8 8位位MPUMPU在运行速度、处理能力和对存储空间的访问等性能在运行速度、处理能力和对存储空间的访问等性能方面有很大提高。方面有很大提高。32.1.1 2.1.1 Intel 8086/8088Intel 8086/80888086/8088 8086/8088 MPUMPU由两个独立的处理单元构成:由两个独立的处理单元构成:总线接口单元总线接口单元BIUBIU和执行单元和执行单元EUEU。总线总线控制电路控制电路2020位位ABAB通用寄存器通用寄存器累加器累加器基址寄存器基址寄存器
4、计数寄存器计数寄存器数据寄存器数据寄存器堆栈指针堆栈指针基址指针基址指针目的变址目的变址源变址源变址指针寄存器指针寄存器变址寄存器变址寄存器地址加法器地址加法器运算暂存器运算暂存器ALUALU标志寄存器标志寄存器 EUEU控制电路控制电路指令指针指令指针内部暂存器内部暂存器指令队列指令队列总线接口单元总线接口单元( (BIU)BIU)执行单元执行单元( (EU)EU)外部总线外部总线8086/80888086/8088DBDB8088:88088:8位位8086:168086:16位位CSCSDSDSSSSSESESIPIP1 2 3 4 5 61 2 3 4 5 68 8位位80888088
5、80868086AX AH ALAX AH ALBX BH BLBX BH BLCX CH CLCX CH CLDX DH DL DX DH DL SPSPBPBPDIDISISIALU DBALU DB1616位位42.1.1 2.1.1 Intel 8086/8088Intel 8086/8088 当当EUEU从指令队列中取出指令时,从指令队列中取出指令时,BIUBIU便从内存中取出后续便从内存中取出后续的代码放入队列中;当的代码放入队列中;当EUEU需要数据时,需要数据时,BIUBIU根据根据EUEU输出的地输出的地址,从指定的内存单元或外设中取出数据供址,从指定的内存单元或外设中取出数
6、据供EUEU使用;当运使用;当运算结束时,算结束时,BIUBIU将运算结果送给指定的内存单元或外设。将运算结果送给指定的内存单元或外设。 EU EU控制电路从指令队列取出指令代码,经译码发出相控制电路从指令队列取出指令代码,经译码发出相应的控制信号;数据在应的控制信号;数据在ALUALU中进行运算;运算结果的特征中进行运算;运算结果的特征保留在标志寄存器保留在标志寄存器( (FLAGS)FLAGS)中。中。 EU-EU-负责分析和执行指令负责分析和执行指令BIU-BIU-负责执行所有的负责执行所有的“外部总线外部总线”操作操作指令队列的存在使指令队列的存在使EUEU和和BIUBIU并行工作并行
7、工作 取指令和分析、执行指令操作可重叠进行,形成了两级指取指令和分析、执行指令操作可重叠进行,形成了两级指令流水线结构,减少了令流水线结构,减少了CPUCPU等待时间,提高了等待时间,提高了CPUCPU的利用率,的利用率,加快了整机运行速度,降低了对存储器存取速度的要求。加快了整机运行速度,降低了对存储器存取速度的要求。52.1.1 2.1.1 Intel 8086/8088Intel 8086/8088 4 4个段寄存器为个段寄存器为8086/80888086/8088采用存储器分段管理采用存储器分段管理提供了主要硬件支持。提供了主要硬件支持。 通过分段管理,把通过分段管理,把1 1MBMB
8、可寻址的物理存储空间可寻址的物理存储空间分成若干个逻辑段,每段大小为分成若干个逻辑段,每段大小为6464KBKB。 段的起始单元地址叫段基址,存放在段寄存器段的起始单元地址叫段基址,存放在段寄存器中。中。 通过通过4 4个段寄存器,个段寄存器,CPUCPU每次可同时对每次可同时对4 4个段进个段进行寻址。且分段方式不唯一,各段之间可以连续、行寻址。且分段方式不唯一,各段之间可以连续、分离、部分重叠或完全重叠,具体取决于对各个段分离、部分重叠或完全重叠,具体取决于对各个段寄存器的预置内容。寄存器的预置内容。62.1.1 2.1.1 Intel 8086/8088Intel 8086/8088采用
9、分段管理,存储器地址有物理地址和逻辑地址之分。采用分段管理,存储器地址有物理地址和逻辑地址之分。 物理地址是物理地址是1 1MBMB存储空间中的某一单元地址,用存储空间中的某一单元地址,用2020位地址码表示,位地址码表示,CPUCPU访问存储器时,地址总线上送访问存储器时,地址总线上送出的就是物理地址。出的就是物理地址。 逻辑地址在编程时采用,由段基址和偏移地址逻辑地址在编程时采用,由段基址和偏移地址组成,两者均为组成,两者均为1616位。位。 由由1616位逻辑地址变换为位逻辑地址变换为2020位物理位物理地址的关系如下:地址的关系如下: 物理地址物理地址= =段基址段基址16+16+偏移
10、地址偏移地址物理地址生成示意图物理地址生成示意图段基址段基址 偏移地址偏移地址地址地址加法器加法器逻辑地址逻辑地址15 0 15 0 15 0 15 0 左移四位左移四位段基址段基址 0000 00002020位物理地址位物理地址19 019 072.1.2 2.1.2 Intel 80286Intel 80286 (1) (1)内部有内部有4 4个独立的可并行操作单元:执行单元个独立的可并行操作单元:执行单元( (EU)EU)、总线单元总线单元( (BU)BU)、指令单元指令单元( (IU)IU)和地址单元和地址单元( (AU)AU),可实现可实现4 4级流水线作业;级流水线作业; (2)
11、(2)地址总线和数据总线完全分开;地址总线和数据总线完全分开; (3) (3)存储空间有实地址和保护虚拟地址两种工作方式。存储空间有实地址和保护虚拟地址两种工作方式。两者的实地址空间分别为两者的实地址空间分别为1 1MBMB和和1616MBMB; (4) (4)在保护方式下,在保护方式下,4 4个段寄存器装入的不再是段基个段寄存器装入的不再是段基址,而是指向段描述符表中某个段描述符的索引值,称址,而是指向段描述符表中某个段描述符的索引值,称为段选择符。为段选择符。 8028680286是增强型标准是增强型标准1616位微处理器。与位微处理器。与8086/80888086/8088相比,相比,它
12、结构上的改进和性能上的提高主要体现在它结构上的改进和性能上的提高主要体现在4 4方面:方面: 总之,总之,8028680286主要是增加了多用户、多任务系统所必需主要是增加了多用户、多任务系统所必需的任务转换、虚拟存储器管理和多种保护功能,不仅提高的任务转换、虚拟存储器管理和多种保护功能,不仅提高了运算速度,而且可支持多用户、多任务操作。但其优越了运算速度,而且可支持多用户、多任务操作。但其优越性必须在多任务操作系统的支持下才能充分发挥。性必须在多任务操作系统的支持下才能充分发挥。82.1.3 2.1.3 Intel 80386/80486Intel 80386/80486 1. 1.内部寄存
13、器数量明显增加,并可进行内部寄存器数量明显增加,并可进行6464位的数据运算,具有位的数据运算,具有全全3232位数据处理能力。位数据处理能力。 2. 2.片内存储管理部件可实现段页式存储管理,比片内存储管理部件可实现段页式存储管理,比8028680286可提供更可提供更大的虚拟存储空间和物理存储空间。大的虚拟存储空间和物理存储空间。 3. 3.比比8028680286新增了一种保护模式下的工作方式新增了一种保护模式下的工作方式, ,即虚拟即虚拟80868086方式。方式。 4.80486 4.80486的指令流水线增加到了的指令流水线增加到了6 6级。级。 5. 5.提供了提供了3232位外
14、部总线接口,最大数据传输速率显著提高。位外部总线接口,最大数据传输速率显著提高。 6. 6.运算速度大大加快。运算速度大大加快。 80386/80486 80386/80486是针对多用户和多任务的应用而推是针对多用户和多任务的应用而推出的出的3232位微处理器。与位微处理器。与8028680286相比,相比,80386/8048680386/80486在在结构和性能上的主要特点如下:结构和性能上的主要特点如下:92.1.4 2.1.4 PentiumPentium微处理器微处理器(8058680586) 1. 1.采用超标量体系结构,内含两条指令流水线。采用超标量体系结构,内含两条指令流水线
15、。 2. 2.内置的浮点运算部件采用超流水线技术。内置的浮点运算部件采用超流水线技术。 3. 3.增加了分支指令预测。增加了分支指令预测。 4. 4.内置了指令和数据两个独立的超高速缓存器,避免了预取指令和内置了指令和数据两个独立的超高速缓存器,避免了预取指令和数据可能发生的冲突。数据可能发生的冲突。 5. 5.采用采用6464位外部数据总线。位外部数据总线。 6. 6.引入了大型机中采用的内部错误检测、功能冗余检验和错误报告引入了大型机中采用的内部错误检测、功能冗余检验和错误报告等自诊断功能。等自诊断功能。 7. 7.进行了更多的可测性设计。进行了更多的可测性设计。 8. 8.提供了独特的性
16、能监察功能,以利于软、硬件产品的优化和升级。提供了独特的性能监察功能,以利于软、硬件产品的优化和升级。 9. 9.提供了灵活的存储器页面管理。提供了灵活的存储器页面管理。PentiumPentium是一种高性能的是一种高性能的6464位微处理器。其对位微处理器。其对8048680486作了下列重大改进:作了下列重大改进:102.2 2.2 Intel 80486Intel 80486微处理器体系结构微处理器体系结构q8048680486的体系结构特点的体系结构特点q 80486 80486的内部结构与内部寄存器的内部结构与内部寄存器q 80486 80486的三种工作方式及转换的三种工作方式及
17、转换q 80486 80486的外部引脚信号的外部引脚信号112.2.1 804862.2.1 80486的体系结构特点的体系结构特点 1.1.采用单倍的时钟频率,即采用单倍的时钟频率,即CPUCPU的的CLKCLK端输入的外部时钟频端输入的外部时钟频 率就是其内部的工作时钟频率。率就是其内部的工作时钟频率。 2. 2.内部包含有内部包含有8 8K K字节的指令字节的指令/ /数据合用型高速缓存。数据合用型高速缓存。 3. 3.内部包含了相当于增强型内部包含了相当于增强型8038780387功能的浮点协处理器功能的浮点协处理器( (FPU)FPU)。 4. 4.对使用频率较高的基本指令,改为硬
18、件逻辑直接控制,并在指对使用频率较高的基本指令,改为硬件逻辑直接控制,并在指 令执行单元采用了令执行单元采用了RISCRISC技术和流水线技术。技术和流水线技术。 5. 5.采用突发式总线传输方式。采用突发式总线传输方式。 6. 6.内部数据总线宽度有内部数据总线宽度有3232位、位、6464位和位和128128位多种,分别用于不同位多种,分别用于不同 单元之间的数据通路。单元之间的数据通路。 7. 7.对某些内部寄存器中部分位的内容进行了变动和增加。对某些内部寄存器中部分位的内容进行了变动和增加。 8. 8.面向多处理器结构,增加了总线监视功能和支持多机操作的指令。面向多处理器结构,增加了总
19、线监视功能和支持多机操作的指令。8048680486的特点主要表现在:的特点主要表现在:122.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器内内部部结结构构构构成成总线接口单元总线接口单元指令预取单元指令预取单元指令译码单元指令译码单元指令执行单元指令执行单元段管理单元段管理单元页管理单元页管理单元高速缓存单元高速缓存单元浮点运算单元浮点运算单元8038680386所具有所具有8048680486新增新增131.1.内部结构内部结构总线接口单元总线接口单元 主要用于管理访问外主要用于管理访问外部存储器和部存储器和I/OI/O端口必须的端口必须的地址、数据
20、和控制总线,完地址、数据和控制总线,完成预取指令、读成预取指令、读/ /写数据等写数据等总线操作。总线操作。指令预取单元指令预取单元 指令预取单元平均可指令预取单元平均可预取预取1010条指令。内含一个条指令。内含一个3232字节的指令预取队列,字节的指令预取队列,当指令预取队列不满且总当指令预取队列不满且总线空闲时,指令预取单元线空闲时,指令预取单元通过总线接口单元从存储通过总线接口单元从存储器读取指令放到队列中。器读取指令放到队列中。指令译码单元指令译码单元 从指令预取队列中读取指令,从指令预取队列中读取指令,进行预译码后将其送入已译码的指进行预译码后将其送入已译码的指令队列等待执行。如果
21、预译码时发令队列等待执行。如果预译码时发现是转移调用指令,可提前通知总现是转移调用指令,可提前通知总线接口部件去新的目标地址取指令,线接口部件去新的目标地址取指令,以刷新指令预取队列。以刷新指令预取队列。指令执行单元指令执行单元 包括算术逻辑单元包括算术逻辑单元ALUALU、8 8个个3232位的通用寄位的通用寄存器、桶形移位寄存器和控制单元等。作用是存器、桶形移位寄存器和控制单元等。作用是完成各种算术完成各种算术/ /逻辑运算和变址地址生成。控制逻辑运算和变址地址生成。控制单元中大多数指令采用微程序控制结构执行,单元中大多数指令采用微程序控制结构执行,常用基本指令采用硬件逻辑控制执行。常用基
22、本指令采用硬件逻辑控制执行。段管理单元段管理单元用于进行存储器分段管理,用于进行存储器分段管理,将逻辑地址变换为将逻辑地址变换为3232位线性位线性地址。地址。页管理单元页管理单元 用于进行存储器用于进行存储器分页管理,将线性分页管理,将线性地址变换为地址变换为3232位物位物理地址。理地址。高速缓存单元高速缓存单元 用于加速指令用于加速指令/ /数据的访问过程。数据的访问过程。浮点运算单元浮点运算单元 相当于一个增强型浮点协相当于一个增强型浮点协处理器处理器8038780387,专门作浮点运算,专门作浮点运算,可与可与ALUALU的整数运算并行进行。的整数运算并行进行。14q基本寄存器基本寄
23、存器q系统级寄存器系统级寄存器q调试和测试寄存器调试和测试寄存器q浮点寄存器浮点寄存器2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器2.2.内部寄存器内部寄存器 8048680486的内部寄存器除的内部寄存器除FPUFPU部分外,与部分外,与8038680386完全相同,按功能可分为完全相同,按功能可分为4 4类:类:152.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器1)1)基本寄存器基本寄存器EAX EAX AH AH AX AX ALALEBX EBX BH BH BX BX BLBLECX ECX CHC
24、H CX CX CLCLEDX EDX DHDH DX DX DLDLEDI DIEDI DIESI SIESI SIEBP BPEBP BPESP SPESP SP通通用用寄寄存存器器31 15 7 031 15 7 0标志寄存器标志寄存器指令指针寄存器指令指针寄存器EFLAGSEFLAGSFLAGSFLAGSEIPEIPIPIP31 15 031 15 031 15 031 15 0选择器选择器描述符高速缓存器描述符高速缓存器段段寄寄存存器器CSCSSSSSDSDSESESFSFSGSGS15 0 63 015 0 63 016通用寄存器通用寄存器为了与为了与8086/80888086/8
25、088兼容,它们的低兼容,它们的低1616位位 可以单独访问,并以同可以单独访问,并以同8086/80888086/8088中相中相 同的名称命名:同的名称命名:AXAX、BXBX、CXCX、DXDX、SISI、 DI DI、BPBP、SPSP。2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器8 8个个3232位通用寄存器位通用寄存器: : EAX EAX、EBXEBX、ECXECX、EDXEDX、 ESI ESI、EDIEDI、EBPEBP、ESPESP其中其中AXAX、BXBX、CXCX、DX DX 还可进一步分成还可进一步分成 两个两个8 8位寄存
26、器单独访问。位寄存器单独访问。17指令指针寄存器(指令指针寄存器(EIPEIP) EIPEIP用于保存下一条待预取指令相对于用于保存下一条待预取指令相对于代码段基址的偏移量。代码段基址的偏移量。 2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器 80486 80486工作在工作在3232位操作方式时,采用位操作方式时,采用3232位的位的EIPEIP;工作在工作在1616位操作方式时,采用位操作方式时,采用1616位位的的IPIP。它的低它的低1616位也可单独访问,称之为位也可单独访问,称之为IPIP。182.2.2 804862.2.2 80486的
27、内部结构与内部寄存器的内部结构与内部寄存器标志寄存器(标志寄存器(EFLAGSEFLAGS)3232位的位的EFLAGSEFLAGS包含三种标志:包含三种标志: 状态标志状态标志( (S)S)-报告算术报告算术/ /逻辑运算指逻辑运算指令执行后的状态令执行后的状态; ; 控制标志控制标志( (C)C)-仅含一个标志仅含一个标志DF,DF,用于用于控制串操作指令的地址改变方向控制串操作指令的地址改变方向; ; 系统标志系统标志( (X)X)-用于控制用于控制I/OI/O、屏蔽中屏蔽中断、调试、任务转换和控制保护方式与虚断、调试、任务转换和控制保护方式与虚拟拟80868086方式间的转换。方式间的
28、转换。192.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器EFLAGSEFLAGSC CF FFLAGSFLAGS31 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 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A
29、 AC CV VM MR RF F0 0 N NT TIOPLIOPLO OF FD DF FI IF FT TF FS SF FZ ZF F0 0A AF FO OP 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零标志零标志S S辅助进位标志辅助进位标志S S奇偶标志奇偶标志S S进位标志进位标志注注: :S S表示状态标志表示状态标志, ,X X表示系统标志表
30、示系统标志, ,C C表示控制标志表示控制标志标标志志寄寄存存器器202.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器段寄存器段寄存器8048680486有有6 6个段寄存器:个段寄存器:CS-CS-指明当前的代码段指明当前的代码段SS-SS-指明当前的堆栈段指明当前的堆栈段DSDSESESFS FS GSGS决定程序使用决定程序使用存储器区域块存储器区域块指明当前的指明当前的4 4个数据段个数据段8048680486段的定义与段的定义与80868086有所不同:有所不同: 保护方式下,段的长度可以在保护方式下,段的长度可以在1 1字节到字节到4 4G
31、G字节之间变化;字节之间变化; 实地址方式下,段的长度固定为实地址方式下,段的长度固定为6464KBKB。212.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器选择器选择器描述符高速缓存器描述符高速缓存器CSCSSSSSDSDSESESFSFSGSGS15 0 63 015 0 63 0段寄存器的结构段寄存器的结构 段选择器是编程者可直接访问的,而描述符高速段选择器是编程者可直接访问的,而描述符高速缓存器则是编程者不能访问的。缓存器则是编程者不能访问的。 段寄存器由段寄存器由1616位的段选择器和位的段选择器和6464位的描述符高位的描述符高速缓存器组成。
32、速缓存器组成。222.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器关于对段寄存器的说明:关于对段寄存器的说明:1.1.实地址方式和虚拟实地址方式和虚拟80868086方式下,段选择器就是段方式下,段选择器就是段寄存器寄存器, ,它保存的是逻辑段基址的高它保存的是逻辑段基址的高1616位,将它的位,将它的内容左移内容左移4 4位即可得到实际段基址,而不必使用描位即可得到实际段基址,而不必使用描述符高速缓存器。述符高速缓存器。2.2.在保护虚地址方式下,为了描述每个段的基址、在保护虚地址方式下,为了描述每个段的基址、属性和边界,为每个段定义了一个描述符。操作
33、属性和边界,为每个段定义了一个描述符。操作系统使用的各任务公用的段描述符放在一起构成系统使用的各任务公用的段描述符放在一起构成全局描述符表全局描述符表GDTGDT;某个任务专用的段描述符放在某个任务专用的段描述符放在一起构成局部描述符表一起构成局部描述符表LDTLDT。23段描述符格式为:段描述符格式为:段基地址段基地址15150 0位位段边界段边界15150 0位位段基段基地址地址31312424位位段边界段边界19191616位位属性属性属属 性性段基地段基地址址23231616位位2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器24 为了说明一个段
34、的描述符在哪个表中,表的序号为了说明一个段的描述符在哪个表中,表的序号是多少以及特权的高低,为每个段定义了一个是多少以及特权的高低,为每个段定义了一个1616位的位的选择符,存于段选择器中,其格式为:选择符,存于段选择器中,其格式为:2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器描述符索引描述符索引段描述符段描述符i iLDTGDT01INDEXTIRPLb15b3b2b1b0表指示符表指示符描述符描述符i i(08911)段描述符段描述符0 0描述符描述符0 000 00 特权级特权级0 001 01 特权级特权级1 110 10 特权级特权级2 2
35、11 11 特权级特权级3 3请求特权级请求特权级25 将一个选择符装入一个段选择器时,处理器将将一个选择符装入一个段选择器时,处理器将自动从自动从GDTGDT或或LDTLDT中找到其对应的描述符装入相应中找到其对应的描述符装入相应描述符高速缓存器中。描述符高速缓存器中。2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器描述符描述符6464基址基址物理存储器物理存储器LDTDSDS数据段数据段0040H界限界限15 3 2描述符高速缓存器描述符高速缓存器DSDS选择符选择符63 063 0属性属性装入装入DSDS段描述符段描述符TI=1指示LDT1313位
36、索引指向位索引指向LDTLDT的第的第6464个段描述符个段描述符131 0以后,每当访问存储器时,与所用段相关的段描述符高速缓以后,每当访问存储器时,与所用段相关的段描述符高速缓冲器就自动参与该次存储器访问操作。转换关系冲器就自动参与该次存储器访问操作。转换关系: 线性地址线性地址 = = 段描述符高速缓存器中段基址段描述符高速缓存器中段基址 + + 偏移地址偏移地址 262)2)系统级寄存器系统级寄存器2.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器 包括包括4 4个控制寄存器和个控制寄存器和4 4个系统地址寄存器。个系统地址寄存器。 只能由特权级只
37、能由特权级0 0的程序访问。的程序访问。 数字运算错数字运算错页目录基址寄存器页目录基址寄存器保留保留P PC CD DP PE ET T页页FaultFault线性地址线性地址保保 留留31 30 29 18 17 16 12 4 3 2 1 031 30 29 18 17 16 12 4 3 2 1 0页管理页管理 使能使能CacheCache不使能不使能不通写不通写对准标志对准标志写保护写保护保护保护允许允许监视监视FPUFPU仿真仿真FPUFPU任务转换任务转换FPUFPU类型类型CR3CR3CR2CR2CR1CR1CR0CR0PGPGCDCDNWNW保留保留 AMAMWPWP保留保留
38、NENEETET TSTSEMEMMPMP PEPE控制寄存器:控制寄存器:272.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器 系统地址寄存器系统地址寄存器(只在保护方式下使用,(只在保护方式下使用,所以又叫保护方式寄存器)所以又叫保护方式寄存器):3232位基地址位基地址1616位界限位界限GDTRGDTRIDTRIDTR1616位选择符位选择符3232位基地址位基地址1616位界限位界限1616位其他属性位其他属性LDTRLDTRTRTR 其中其中GDTRGDTR和和LDTRLDTR分别用来存放分别用来存放GDTGDT和和LDTLDT的的3232位
39、线性基地位线性基地址等内容;址等内容;IDTRIDTR用来存放中断描述符表的基址和界限;用来存放中断描述符表的基址和界限;TRTR用用来存放任务状态段来存放任务状态段( (TSS)TSS)的基址、界限和其他属性。的基址、界限和其他属性。282.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与内部寄存器3)3)调试和测试寄存器调试和测试寄存器8 8个个3232位可编程调试寄存器位可编程调试寄存器;5;5个个3232位测试寄存器。位测试寄存器。31 0 31 0 线性断点地址线性断点地址0 0线性断点地址线性断点地址1 1线性断点地址线性断点地址2 2线性断点地址线性断点
40、地址3 3IntelIntel公司留用公司留用IntelIntel公司留用公司留用断点状态断点状态断点控制断点控制( (a)a)调试寄存器调试寄存器DR0DR0DR1DR1DR2DR2DR3DR3DR4DR4DR5DR5DR6DR6DR7DR7超高速缓存测试控制超高速缓存测试控制超高速缓存测试数据超高速缓存测试数据超高速缓存测试状态超高速缓存测试状态TLBTLB测试控制测试控制TLBTLB测试状态测试状态31 031 0( (b)b)测试寄存器测试寄存器TR3TR3TR4TR4TR5TR5TR6TR6TR7TR7292.2.2 804862.2.2 80486的内部结构与内部寄存器的内部结构与
41、内部寄存器4)4)浮点寄存器浮点寄存器8048680486的的FPUFPU中含有中含有1313个浮点寄存器:个浮点寄存器:q8 8个个8080位浮点数据寄存器位浮点数据寄存器R0R0R7-R7-用作固定寄用作固定寄 存器组或硬件堆栈;存器组或硬件堆栈;q1 1个个1616位标志字寄存器位标志字寄存器-用来标记每个数据寄存用来标记每个数据寄存 器的内容;器的内容;q1 1个个1616位控制寄存器位控制寄存器-用于提供用于提供FPUFPU的若干处理选的若干处理选 择项;择项;q1 1个个1616位状态寄存器位状态寄存器-用于反映用于反映FPUFPU的总状态;的总状态;q2 2个个4848位的指令、
42、数据指针寄存器位的指令、数据指针寄存器-可为用户编可为用户编 写错误处理程序提供指令、数据指针。写错误处理程序提供指令、数据指针。302.2.3 804862.2.3 80486的三种工作方式及转换的三种工作方式及转换. .IRETDIRETD指令指令. .任务转换任务转换 复位或修改复位或修改CR0CR0CPUCPU复位复位实地址实地址保护、虚拟地址保护、虚拟地址. .LMSWLMSW指令指令. .修改修改CR0CR0的的PEPE位位复位复位中断中断实地址实地址方式方式 保护保护虚地址方式虚地址方式 虚拟虚拟80868086方式方式实地址方式:工作原理与实地址方式:工作原理与80868086
43、基本相同,主要区别基本相同,主要区别是借助操作数长度前缀能是借助操作数长度前缀能处理处理3232位数据,运行速度位数据,运行速度也更高,且可使用也更高,且可使用4 4个数个数据段。据段。实地址实地址方式方式 保护保护虚地址方式虚地址方式保护虚地址方式:保护虚地址方式:CPUCPU可访问的物理存可访问的物理存储空间为储空间为2 23232=4=4GBGB;程序可用的虚拟程序可用的虚拟 地址空间可达地址空间可达2 24646=64=64TBTB。段长度在启动段长度在启动页功能时是页功能时是4 4GBGB,不启动页功能时是不启动页功能时是1 1MBMB。可支持多用户和单用户的多任务操作,可支持多用户
44、和单用户的多任务操作,并对各任务提供了多方面的保护机制。并对各任务提供了多方面的保护机制。 虚拟虚拟80868086方式方式 虚拟虚拟80868086方式:既有保护功能又方式:既有保护功能又能执行能执行80868086代码的工作方式,是代码的工作方式,是保护方式的一种子方式。保护方式的一种子方式。CPUCPU的的工作原理与保护虚地址方式下相工作原理与保护虚地址方式下相同,但程序指定的逻辑地址解释同,但程序指定的逻辑地址解释与与80868086相同。相同。312.2.4 804862.2.4 80486的外部引脚信号的外部引脚信号(80486 (80486 CPUCPU总线总线) )D31D31
45、D0D0ADSADS数据总线数据总线总线控制总线控制RDYRDY中断中断/ /复位信号复位信号INTRINTRRESETRESET高速缓存使无效高速缓存使无效AHOLDAHOLDNMINMIEADSEADS高速缓存控制高速缓存控制KENKENFLUSHFLUSH页面高速页面高速缓存控制缓存控制PWTPWTPCDPCD数值错报告数值错报告第第2020位地址屏蔽位地址屏蔽系统时钟系统时钟3232位地址总线位地址总线总线周期定义总线周期定义总线仲裁总线仲裁成组控制成组控制总线宽度控制总线宽度控制奇偶校验奇偶校验A31A31A2A2BE3BE3BE2BE2BE1BE1BE0BE0PCHKPCHKDP0
46、DP0DP1DP1DP2DP2DP3DP3BS16BS16BS8BS8BLASTBLASTBRDYBRDYBREQBREQBOFFBOFFHLDAHLDAHOLDHOLDPLOCKPLOCKLOCKLOCKW/RW/RD/CD/CM/IOM/IO8048680486微处理微处理器器FERRFERRIGNNEIGNNEA20MA20MCLKCLKM/IO D/C W/R启动的总线周期启动的总线周期L L L 中断响应周期中断响应周期L H L I/OI/O读周期读周期L H H I/OI/O写周期写周期H L L 微代码读周期微代码读周期H L H IntelIntel公司保留公司保留H H L
47、 存储器读周期存储器读周期H H H 存储器写周期存储器写周期L L H停机停机/ /暂停暂停 总线周期定义总线周期定义322.3 804862.3 80486的数据类型与寻址方式的数据类型与寻址方式q数据类型数据类型q寻址方式寻址方式q操作数宽度和地址宽度的确定操作数宽度和地址宽度的确定332.3.1 2.3.1 数据类型数据类型 8048680486在其内部定点处理单元在其内部定点处理单元CPUCPU和浮点处和浮点处理单元理单元FPUFPU的支持下,共可处理的支持下,共可处理7 7类数据:类数据:1. 1. 无符号二进制数无符号二进制数2. 2. 带符号的二进制定点整数带符号的二进制定点整
48、数3. 3. 浮点数浮点数4. 4. BCDBCD码数码数5. 5. 串数据串数据6. 6. ASCIIASCII码数据块码数据块7. 7. 指针数据类指针数据类342.3.1 2.3.1 数据类型数据类型1.1.无符号二进制数无符号二进制数( (序数序数) )这类数有这类数有3 3种种, ,受受CPUCPU支持支持: :q字节字节: :任何逻辑地址上的任何逻辑地址上的8 8位相邻位串。位相邻位串。q字字: :任何字节地址开始的任何字节地址开始的2 2个相邻字节。低字节个相邻字节。低字节 地址为该字地址。地址为该字地址。q双字双字: :任何字节地址开始的任何字节地址开始的2 2个相邻字个相邻字
49、, ,即即4 4个个 相邻字节。最小字节地址为双字的地址。相邻字节。最小字节地址为双字的地址。352.2.带符号的二进制定点整数带符号的二进制定点整数( (整数整数) )2.3.1 2.3.1 数据类型数据类型 这类数均以补码表示这类数均以补码表示, ,有有8 8位数位数( (字节字节) )、1616位数位数( (字字) )、3232位数位数( (双字双字) )、6464位数位数(4(4字字) )四种。四种。CPUCPU支持前支持前3 3种,种,FPUFPU支持后支持后3 3种。种。362.3.1 2.3.1 数据类型数据类型3.3.浮点数浮点数( (实数实数) ) 这类数由这类数由FPUFP
50、U支持支持, ,有单精度、双精度和扩有单精度、双精度和扩展精度三种形式:展精度三种形式:单精度数单精度数31 30 23 22 031 30 23 22 0符号位符号位阶阶 码码有有 效效 数数1.1.双精度数双精度数符号位符号位阶阶 码码有有 效效 数数1.1.63 62 52 51 063 62 52 51 0扩展精度数扩展精度数符号位符号位阶阶 码码1.1.有有 效效 数数79 78 64 63 079 78 64 63 0372.3.1 2.3.1 数据类型数据类型关于浮点数格式的两点说明:关于浮点数格式的两点说明: (1)(1)3 3种浮点数的有效数字段都做了规格化处理,种浮点数的有
51、效数字段都做了规格化处理,其整数位总是其整数位总是1 1。但需注意,只有扩展精度格式的整数。但需注意,只有扩展精度格式的整数位位1 1真的存在,其余两种格式下整数位真的存在,其余两种格式下整数位1 1是隐含的,并是隐含的,并不真的被存放起来。不真的被存放起来。 (2) (2)格式中的阶码是以偏置形式存放的格式中的阶码是以偏置形式存放的( (即其阶码要即其阶码要加上一个常数偏置值才是格式阶码加上一个常数偏置值才是格式阶码) ),且,且偏置后的格式偏置后的格式阶码恒为正数阶码恒为正数。这样有利于简化浮点数大小的比较过。这样有利于简化浮点数大小的比较过程:对两个相同格式的实数进行比较时,就像对两个程
52、:对两个相同格式的实数进行比较时,就像对两个无符号二进制整数进行比较一样方便,当从高位到低无符号二进制整数进行比较一样方便,当从高位到低位比较两个实数阶码时,若某位的阶码有大小之分,位比较两个实数阶码时,若某位的阶码有大小之分,就不用再比较下去了。就不用再比较下去了。382.3.1 2.3.1 数据类型数据类型 由于三种浮点数格式的阶码位数不同,其数值范由于三种浮点数格式的阶码位数不同,其数值范围也不同。为了保证统一偏置后的阶码恒为正数,其围也不同。为了保证统一偏置后的阶码恒为正数,其偏置值必然也为不同正值。偏置值必然也为不同正值。最大阶码值最大阶码值 +127 +1023 +16383 +1
53、27 +1023 +16383参参 数数格格 式式单精度单精度双精度双精度扩展精度扩展精度格式总宽度(位)格式总宽度(位) 32 64 80 32 64 80符号位位数符号位位数 1 1 1 1 1 1有效数位数有效数位数( (精度位数精度位数) 23+1() 23+1(隐)隐) 52+1( 52+1(隐)隐) 64 64阶码宽度(位)阶码宽度(位) 8 11 15 8 11 15最小阶码值最小阶码值 -126 -1022 -16382 -126 -1022 -16382阶码偏置值阶码偏置值 +127 +1023 +16383 +127 +1023 +16383 在作了上述偏置处理后,进行浮点
54、数运算时,一个数的在作了上述偏置处理后,进行浮点数运算时,一个数的真阶码需要将其格式阶码减去偏置值来获得。真阶码需要将其格式阶码减去偏置值来获得。394.4.BCDBCD码数码数 BCDBCD码数有压缩码数有压缩BCDBCD码数和非压缩码数和非压缩BCDBCD码码数两种。数两种。 CPU CPU两种数都支持;两种数都支持;FPUFPU只支持压缩只支持压缩BCDBCD码数,且最大长度为码数,且最大长度为8080位,最多可处理位,最多可处理2020位位BCDBCD码数。码数。2.3.1 2.3.1 数据类型数据类型402.3.1 2.3.1 数据类型数据类型5.5.串数据串数据 包括位串、字节串、
55、字串和双字串,仅包括位串、字节串、字串和双字串,仅CPUCPU支持。支持。 位串是从任何字节的任何位开始的相邻位位串是从任何字节的任何位开始的相邻位的序列,最长可达的序列,最长可达2 23232-1-1位位。 字节字节/ /字字/ /双字串是字节双字串是字节/ /字字/ /双字的相邻序双字的相邻序列,最长可达列,最长可达2 23232-1-1字节字节。412.3.1 2.3.1 数据类型数据类型6.6.ASCIIASCII码数据类码数据类包括包括ASCIIASCII码字符串和码字符串和ASCIIASCII码数码数(0(0F)F)两种。两种。7.7.指针数据类指针数据类包括近指针和远指针两种包括
56、近指针和远指针两种: : 近指针即近指针即3232位指针位指针, ,是一个是一个3232位的段内偏位的段内偏移量移量, ,段内寻址用。段内寻址用。 远指针即远指针即4848位指针,由位指针,由1616位选择符和位选择符和3232位位偏移量组成,用于跨段访问。偏移量组成,用于跨段访问。42关于数据类型的两点说明:关于数据类型的两点说明:2.3.1 2.3.1 数据类型数据类型(1)(1)字和双字数据操作的对准和不对准字和双字数据操作的对准和不对准(2)(2) 一般应尽可能将字操作对准于偶地址,将双字操作对准于一般应尽可能将字操作对准于偶地址,将双字操作对准于4 4的的(3)(3) 整数倍地址。但
57、也允许不对准。整数倍地址。但也允许不对准。(4)(4) 对准和不对准获得的数据传递速度不一样:对准的字和双字可对准和不对准获得的数据传递速度不一样:对准的字和双字可(5)(5) 一次传递完,而未对准时需几次才能传递完。一次传递完,而未对准时需几次才能传递完。(2) (2) 采用低端低地址方式存储字和双字数据采用低端低地址方式存储字和双字数据 字数据被存储在两个相邻的字节单元之中,低字节在低地址单字数据被存储在两个相邻的字节单元之中,低字节在低地址单 元,高字节在高地址单元;元,高字节在高地址单元; 双字数据存储在四个连续字节单元中,最低字节在最低地址单双字数据存储在四个连续字节单元中,最低字节
58、在最低地址单 元,最高字节在最高地址单元。元,最高字节在最高地址单元。 字或双字数据的地址是指最低字节所在的单元地址。字或双字数据的地址是指最低字节所在的单元地址。432.3.2 2.3.2 寻址方式寻址方式 1.1.寻址方式和有效地址概念寻址方式和有效地址概念 寻址方式:寻找指令中操作数地址的方式。寻址方式:寻找指令中操作数地址的方式。 直接包含在指令中直接包含在指令中,即指令的操作数部分就是操作,即指令的操作数部分就是操作数本身。这种操作数叫立即数数本身。这种操作数叫立即数, ,对应的指令寻址方式称对应的指令寻址方式称为为立即数寻址。立即数寻址。包含在包含在CPUCPU的某个内部寄存器中的
59、某个内部寄存器中。这时指令中的操作数。这时指令中的操作数部分是部分是CPUCPU的一个寄存器,这种指令寻址方式称为的一个寄存器,这种指令寻址方式称为寄存器寄存器寻址。寻址。在存储器中在存储器中。这时指令的操作数部分包含着该操作数。这时指令的操作数部分包含着该操作数所在的存储器地址。这种指令寻址方式称为所在的存储器地址。这种指令寻址方式称为存储器寻址存储器寻址。操作数所在地址有三种可能:操作数所在地址有三种可能:442.3.2 2.3.2 寻址方式寻址方式 在在80868086系列系列MPUMPU中,内存实际地址中,内存实际地址( (PA)PA)由段基地由段基地址和段内偏移地址两部分组成。址和段
60、内偏移地址两部分组成。EA=EA=基址基址+(+(变址变址比例因子比例因子)+)+位移量位移量其中段内偏移地址又叫有效地址(其中段内偏移地址又叫有效地址(EAEA)。)。v 基址寄存器内容基址寄存器内容v 变址寄存器内容变址寄存器内容v 比例因子比例因子v 位移量位移量有效地址四元素:有效地址四元素:45有效地址元素有效地址元素1616位寻址位寻址3232位寻址位寻址基址寄存器基址寄存器 BX,BP BX,BP 任何任何3232位通用寄存器位通用寄存器变址寄存器变址寄存器 SI,DI SI,DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 无(或无(或1
61、1) 1 1,2 2,4 4,8 8位移量位移量 0 0,8 8,1616位位 0 0,8 8,3232位位1616位和位和3232位寻址时的四元素定义位寻址时的四元素定义2.3.2 2.3.2 寻址方式寻址方式46物理物理地址地址物理物理存储器存储器寻址过程寻址过程( (地址转换过程地址转换过程) )有效地址计算有效地址计算变址变址位移位移基址基址比例因子比例因子+ +3232位位有效地址有效地址分段分段部件部件BE3BE3BE0BE031 031 0A31A31A2A23232位位分页分页部件部件( (可选可选) )3232位位线性线性地址地址1313位位描述符索引描述符索引段寄存器段寄存
62、器CS,DS,ES,SS,CS,DS,ES,SS,FS,GSFS,GS( () )选择符选择符 TITIRPLRPL15 3 2 1 015 3 2 1 0逻辑逻辑( (虚拟虚拟) )地址地址2.3.2 2.3.2 寻址方式寻址方式472.3.2 2.3.2 寻址方式寻址方式2. 112. 11种寻址方式种寻址方式 偏移地址四元素可优化组合出偏移地址四元素可优化组合出9 9种存储器寻址方种存储器寻址方式式, ,加上立即数寻址和寄存器寻址加上立即数寻址和寄存器寻址,80486,80486共有共有1111种寻种寻址方式址方式: :(1) (1) 立即数寻址立即数寻址 (2) (2) 寄存器寻址寄存
63、器寻址(3) (3) 直接寻址直接寻址 (4) (4) 寄存器间接寻址寄存器间接寻址(5) (5) 基址寻址基址寻址 (6) (6) 变址寻址变址寻址(7) (7) 比例变址寻址比例变址寻址 (8) (8) 基址加变址寻址基址加变址寻址 (9) (9) 基址加比例变址寻址基址加比例变址寻址 (10) (10) 带位移的基址加变址寻址带位移的基址加变址寻址 (11) (11) 带位移的基址加比例变址寻址带位移的基址加比例变址寻址48(1)(1)立即数寻址立即数寻址2.3.2 2.3.2 寻址方式寻址方式 在这种寻址方式下在这种寻址方式下, ,操作数作为立即数直接存在指操作数作为立即数直接存在指令
64、中令中, ,可为可为8 8位、位、1616位或位或3232位。位。例:例:MOV AXMOV AX,4567H4567HMOV BLMOV BL,78H78HMOV ECXMOV ECX,12345678H12345678H 以第以第3 3条指令为例,条指令为例,动画演示动画演示立即数寻址过程。立即数寻址过程。注意注意: (1 1)源和目的操作数字长应一致;)源和目的操作数字长应一致; (2 2)立即数只能作为源操作数。)立即数只能作为源操作数。492.3.2 2.3.2 寻址方式寻址方式(2)(2)寄存器寻址寄存器寻址( (寄存器直接寻址寄存器直接寻址) ) 在这种方式下在这种方式下, ,操
65、作数包含在指令规定的操作数包含在指令规定的8 8位、位、1616位或位或3232位寄存器中。位寄存器中。例:例:MOV EAXMOV EAX,EDXEDXINC CLINC CLMOV DSMOV DS,AXAX 这种寻址方式指令编码短,无需从存储器取操作这种寻址方式指令编码短,无需从存储器取操作数,故执行速度快。数,故执行速度快。注意:注意: (1)字节寄存器只有)字节寄存器只有8个;个; (2)源和目的操作数的字长应一致;)源和目的操作数的字长应一致; (3)CS不能用不能用MOV改变。改变。502.3.2 2.3.2 寻址方式寻址方式(3)(3)直接寻址直接寻址( (存储器直接寻址存储器
66、直接寻址) ) 在这种方式下,指令中的操作数部分直接给出操在这种方式下,指令中的操作数部分直接给出操作数有效地址作数有效地址EAEA,它和操作码一起放在存储器代码段它和操作码一起放在存储器代码段中,可以是中,可以是1616位或位或3232位整数。但操作数一般在数据段位整数。但操作数一般在数据段DSDS中。中。例:例: MOV AXMOV AX,DS:3000HDS:3000H设设DS=5000HDS=5000H,执行过程见执行过程见动画演示动画演示512.3.2 2.3.2 寻址方式寻址方式 实际中对于直接寻址实际中对于直接寻址, ,如操作数在如操作数在DSDS段中段中, ,则可直接写成则可直
67、接写成: :MOV AX,3000HMOV AX,3000H 如操作数在如操作数在DSDS之外的其他段之外的其他段( (CS,SS,ES,FS,GS)CS,SS,ES,FS,GS)中中, ,指令中则必须用段寄存器名前缀指令中则必须用段寄存器名前缀( (称为称为段超越前段超越前缀缀) )予以指明。例如:予以指明。例如:MOV AX,FS:3000HMOV AX,FS:3000H 直接寻址主要用于单个操作数的相对寻址场合直接寻址主要用于单个操作数的相对寻址场合( (如简单的标量操作数寻址和静态分配数组的起始如简单的标量操作数寻址和静态分配数组的起始地址寻址等地址寻址等) )。522.3.2 2.3
68、.2 寻址方式寻址方式(4)(4)寄存器间接寻址寄存器间接寻址 在这种方式下在这种方式下, ,操作数在存储器中操作数在存储器中, ,但但存储器有效地址存储器有效地址EAEA放在寄存器中放在寄存器中, ,即即 EA=EA=寄存器寄存器 。 寄存器的使用规定在寄存器的使用规定在1616位寻址和位寻址和3232位寻位寻址时不一样。址时不一样。532.3.2 2.3.2 寻址方式寻址方式1616位寻址时,偏移地址放在位寻址时,偏移地址放在SISI、DIDI、BPBP或或BXBX中。中。 这时又有两种段默认情况:这时又有两种段默认情况:q若以若以SISI、DIDI、BXBX间接寻址间接寻址, ,则默认操
69、作数在则默认操作数在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:BPMOV AX,DS:B
70、P542.3.2 2.3.2 寻址方式寻址方式3232为寻址时为寻址时,8,8个个3232位通用寄存器均可用作寄存位通用寄存器均可用作寄存 器间接寻址。器间接寻址。 除除ESPESP、EBPEBP默认段寄存器为默认段寄存器为SSSS外,其余外,其余6 6个通用个通用寄存器均默认段寄存器为寄存器均默认段寄存器为DSDS。如操作数在默认段之如操作数在默认段之外,指令中必须加段超越前缀。外,指令中必须加段超越前缀。 寄存器间接寻址的应用场合与直接寻址的应用场寄存器间接寻址的应用场合与直接寻址的应用场合相似,但更灵活。合相似,但更灵活。MOV EBX,EAX ;MOV EBX,EAX ;默认默认DSD
71、S为段基址为段基址, ,传送双字给传送双字给EBXEBXMOV DX,EBX ;MOV DX,EBX ;默认默认DSDS为段基址为段基址, ,传送字给传送字给DXDXMOV CH,EAX ;MOV CH,EAX ;默认默认DSDS为段基址为段基址, ,传送字节给传送字节给CHCH例如:例如:552.3.2 2.3.2 寻址方式寻址方式(5)(5)基址寻址基址寻址 在这种方式下在这种方式下, ,EA=EA=基址寄存器基址寄存器+位移量位移量。其中位。其中位移量一定要为常数移量一定要为常数, ,且跟随在操作码之后且跟随在操作码之后, ,与操作码一与操作码一起存放在代码段中。起存放在代码段中。161
72、6位寻址情况下位寻址情况下, ,BXBX和和BPBP作为基址寄存器。作为基址寄存器。在缺省在缺省段超越前缀时段超越前缀时, ,BXBX以以DSDS作为默认段寄存器作为默认段寄存器, ,BPBP以以SSSS作为作为默认段寄存器。位移量可为默认段寄存器。位移量可为8 8位或位或1616位;位;3232位寻址情况下,位寻址情况下,8 8个个3232位通用寄存器均可作基址位通用寄存器均可作基址寄存器寄存器,其中,其中ESPESP、EBPEBP以以SSSS为默认段寄存器,其余为默认段寄存器,其余6 6个通用寄存器均以个通用寄存器均以DSDS为默认段寄存器。位移量为为默认段寄存器。位移量为8 8位位或或3
73、232位。位。例如:例如:MOV EAX,BX+24 ;MOV EAX,BX+24 ;也可写成也可写成MOV EAX,24BXMOV EAX,24BXMOV ECX,EBP+50 ;MOV ECX,EBP+50 ;也可写成也可写成MOV ECX,50EBPMOV ECX,50EBPMOV DX,EAX+1500;MOV DX,EAX+1500;也可写成也可写成MOV DX,1500EAXMOV DX,1500EAX562.3.2 2.3.2 寻址方式寻址方式(6)(6)变址寻址变址寻址 在这种方式下在这种方式下, ,EA=EA=变址寄存器变址寄存器+位移位移量量。指令书写格式和寻址执行过程与基
74、址。指令书写格式和寻址执行过程与基址寻址相同寻址相同, ,区别仅在于将基址寄存器改成区别仅在于将基址寄存器改成变址寄存器。变址寄存器。572.3.2 2.3.2 寻址方式寻址方式1616位寻址时,仅位寻址时,仅SISI、DIDI可作变址寄存器可作变址寄存器,且默,且默认认DSDS作为段基址寄存器。如:作为段基址寄存器。如:MOV AX,COUNTSIMOV AX,COUNTSI3232位寻址时位寻址时, ,除除ESPESP外的任何通用寄存器均可作外的任何通用寄存器均可作变址寄存器变址寄存器, ,且默认且默认EBPEBP以以SSSS作段基址寄存器作段基址寄存器, ,其余其余均以均以DSDS作段基
75、址寄存器。作段基址寄存器。 如如: :MOV EAX,5EBPMOV EAX,5EBPMOV ECX,DATAEAXMOV ECX,DATAEAX 基址、变址寻址适于对一维数组的数组元素进行基址、变址寻址适于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量;基址检索操作。位移量表示数组起始地址偏移量;基址/ /变址表示数组元素的下标,可变。变址表示数组元素的下标,可变。582.3.2 2.3.2 寻址方式寻址方式(7)(7)比例变址寻址比例变址寻址在这种方式下:在这种方式下:EA=EA=变址寄存器变址寄存器比例因子比例因子+ +位移量位移量这种寻址方式只适于这种寻址方式只适于32
76、32位寻址一种情况。例如:位寻址一种情况。例如:MOV EAX,TABLEESI*4MOV EAX,TABLEESI*4 ;TABLE;TABLE是位移量是位移量,4,4是比例因子是比例因子 比例变址寻址和基址比例变址寻址和基址/ /变址寻址的作用相似变址寻址的作用相似, ,也适用也适用于对一维数组元素的检索。但当数组元素大小为于对一维数组元素的检索。但当数组元素大小为2/4/82/4/8字字节时,用它更方便、更高效。节时,用它更方便、更高效。比例变址寻址方式的执行过程如比例变址寻址方式的执行过程如动画演示动画演示。592.3.2 2.3.2 寻址方式寻址方式(8)(8)基址加变址寻址基址加变
77、址寻址在这种寻址方式下,在这种寻址方式下,EA=EA=基址寄存器基址寄存器+变址寄存器变址寄存器 例如:例如:MOV AX,BX+SI ;MOV AX,BX+SI ;或写成或写成MOV AX,BXSI MOV AX,BXSI 它有它有1616位寻址和位寻址和3232位寻址两种情况,每种情况下基址、位寻址两种情况,每种情况下基址、变址寄存器的使用规定和段寄存器的默认规定与前面所述变址寄存器的使用规定和段寄存器的默认规定与前面所述相同,但一种寻址方式中既有基址寄存器又有变址寄存器,相同,但一种寻址方式中既有基址寄存器又有变址寄存器,而两个寄存器默认的段寄存器又不相同时,而两个寄存器默认的段寄存器又
78、不相同时,一般规定由基一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针。址寄存器来决定默认哪一个段寄存器作段基址指针。例如:例如: MOV EAX,EBPECX MOV EAX,EBPECX ; ;由由EBPEBP决定默认决定默认SSSS为段基址寄存器为段基址寄存器基址加变址寻址主要用于二维数组元素的检索基址加变址寻址主要用于二维数组元素的检索和二重循环等。和二重循环等。602.3.2 2.3.2 寻址方式寻址方式(9)(9)基址加比例变址寻址基址加比例变址寻址在这种方式下在这种方式下, ,EA=EA=变址寄存器变址寄存器比例因子比例因子+基址寄存器基址寄存器 它只有它只有3232位寻
79、址一种情况。位寻址一种情况。格式举例:格式举例: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+ESI 这种方式主要用于数组元素大小为这种方式主要用于数组元素大小为2/4/82/4/8字节时字节时的二维数组检索操作等场合。的二维数组检索操作等场合。612.3.2 2.3.2 寻址方式寻址方式(10)(10)带位移的基址加变址寻址带位移的基址加变址寻址在这种方式下:在这种方
80、式下:EA=EA=变址寄存器变址寄存器+基址寄存器基址寄存器+位移量位移量 这种方式也分这种方式也分1616位寻址和位寻址和3232位寻址两种情况。变址、位寻址两种情况。变址、基址寄存器的使用约定和对段寄存器的默认约定与前基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同。面所述相同。 以第(以第(1 1)条指令为例,执行过程如)条指令为例,执行过程如动画演示动画演示。 这种寻址方式也是主要用于二维数组操作,位移这种寻址方式也是主要用于二维数组操作,位移量即为数组起始地址。量即为数组起始地址。 (1 1) MOV AX,BX+DI+MASK MOV AX,BX+DI+MASK 或或MOV
81、AX,MASKBXDIMOVAX,MASKBXDI (2 2) ADD EDX,ESIEBP+0FFFF000H ADD EDX,ESIEBP+0FFFF000H或或 ADD EDX,0FFFF000HESIEBP ADD EDX,0FFFF000HESIEBP格式举例:格式举例:622.3.2 2.3.2 寻址方式寻址方式(11)(11)带位移的基址加变址比例寻址带位移的基址加变址比例寻址这种方式将偏移地址四元素都用上了,即:这种方式将偏移地址四元素都用上了,即:EA=EA=变址寄存器变址寄存器比例因子比例因子+基址寄存器基址寄存器+位移量位移量它只有它只有3232位寻址一种情况。各种约定和
82、默认情况同前所述。位寻址一种情况。各种约定和默认情况同前所述。格式举例:格式举例:INC EDI*8ECX+40 ;INC EDI*8ECX+40 ;或或INC EDI*8+ECX+40INC EDI*8+ECX+40 当二维数组的数组元素大小为当二维数组的数组元素大小为2/4/82/4/8字节,且数组字节,且数组起始地址不为起始地址不为0 0时,适于用这种寻址方式进行数组检索时,适于用这种寻址方式进行数组检索操作。操作。632.3.2 2.3.2 寻址方式寻址方式3.3.存储器寻址时的段约定存储器寻址时的段约定访存操作类型访存操作类型 默认段寄存器默认段寄存器 允许超越的段寄存器允许超越的段
83、寄存器 偏移地址寄存器偏移地址寄存器堆栈操作堆栈操作 SS SS 无无 (E)SP(E)SP取指令代码取指令代码 CS CS 无无 (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 偏移地址偏移地址以以( (E)BPE)BP、(E)SP(E)SP间接寻址的指令间接寻址的指令 SSSSCSCS、DSDS、ESES、FSFS、GSGS偏移地址偏移地址642.3.2
84、 2.3.2 寻址方式寻址方式4.4.应用举例应用举例CPUCPUBXBX 0100H 0100HSISI 0002H 0002HDS DS 3000H3000H图图 2.1 2.130100H30100H 12H 12H30101H30101H 34H 34H30102H 30102H 56H 56H30103H30103H 78H 78H31200H31200H 2AH 2AH31201H31201H 4CH 4CH31202H31202H B7H B7H31203H 31203H 65H 65HM M 例例2.12.1 已知已知8048680486工作在实地址方式下,其中一些寄工作在实地
85、址方式下,其中一些寄存器的内容和一些存储单元的内容如图存器的内容和一些存储单元的内容如图2.12.1所示,试指所示,试指出下列各条指令执行后,出下列各条指令执行后,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+SI LEA AX LEA AX,SISI652.3.2 2.3
86、.2 寻址方式寻址方式 例例2.22.2 假定假定8048680486工作在实模式下,工作在实模式下,( (DS)=1000HDS)=1000H,(SS)=2000H(SS)=2000H,(SI)=007FH(SI)=007FH,(BX)=0040H(BX)=0040H,(BP)=0016H(BP)=0016H,变量变量TABLETABLE的偏移地址为的偏移地址为01000100H H。请指出下列指令的源操请指出下列指令的源操作数字段是什么寻址方式作数字段是什么寻址方式? ?它的有效地址它的有效地址( (EA)EA)和物理地和物理地址址( (PA)PA)分别是多少分别是多少? ? MOV AX
87、MOV AX,1234H1234H MOV AX MOV AX,TABLETABLE MOV AX MOV AX,BX+100H BX+100H MOV AX MOV AX,TABLEBPSITABLEBPSI662.3.3 2.3.3 操作数宽度和地址宽度的确定操作数宽度和地址宽度的确定 操作数宽度和地址宽度与工作方式直接相关,还与指操作数宽度和地址宽度与工作方式直接相关,还与指令中是否加这两种宽度的超越前缀有关。令中是否加这两种宽度的超越前缀有关。在实地址或虚拟在实地址或虚拟80868086方式下,操作数和地址的默认宽度都为方式下,操作数和地址的默认宽度都为1616位;位;q当指令中无宽度
88、超越前缀时当指令中无宽度超越前缀时:在保护虚拟地址方式下,宽度则取决于可执行段的描述符中的在保护虚拟地址方式下,宽度则取决于可执行段的描述符中的D D位:位:D D位为位为0 0,表示默认宽度是,表示默认宽度是1616位位D D位为位为1 1,表示默认宽度是,表示默认宽度是3232位位q8048680486可使用宽度超越前缀来强行指定执行可使用宽度超越前缀来强行指定执行1616位或位或3232位操作位操作: 操作数宽度前缀使处理器在默认的操作数宽度前缀使处理器在默认的1616位方式下寻址位方式下寻址3232位数据,位数据,或者在默认的或者在默认的3232位方式下寻址位方式下寻址1616位数据。
89、位数据。 地址宽度前缀使处理器在默认的地址宽度前缀使处理器在默认的1616位方式下进行位方式下进行3232位寻址,或位寻址,或者在默认的者在默认的3232位方式下进行位方式下进行1616位寻址。位寻址。672.3.3 2.3.3 操作数宽度和地址宽度的确定操作数宽度和地址宽度的确定注意:注意: (1) (1)在实地址方式下,使用地址宽度前在实地址方式下,使用地址宽度前缀不能使偏移量超过缀不能使偏移量超过FFFFH,FFFFH,否则将会导致否则将会导致一个一般保护异常一个一般保护异常. . (2)80486/803862)80486/80386的操作数宽度除了的操作数宽度除了1616位位( (字
90、字) )和和3232位位( (双字双字) )两种外,还有一种两种外,还有一种8 8位位( (字节字节) )宽度。首先由指令操作码中的宽度。首先由指令操作码中的W W域决定是域决定是8 8位字节操作数位字节操作数( (W=0)W=0)还是还是1616位字位字和和3232位双字操作数位双字操作数( (W=1)W=1);在在W=1W=1时,再由时,再由段描述符中的段描述符中的D D位值来确定是位值来确定是1616位操作模位操作模式还是式还是3232位操作模式。位操作模式。682.4 804862.4 80486的汇编级指令系统的汇编级指令系统q8048680486指令系统概述指令系统概述q80486
91、80486指令格式指令格式q8048680486的指令简介的指令简介q几类常用几类常用指令指令详解详解692.4.1 804862.4.1 80486指令系统概述指令系统概述 8048680486的指令系统是在的指令系统是在80808686指令系统的基础上逐步发展指令系统的基础上逐步发展而来的,在代码级具有向上兼容性。它提供了而来的,在代码级具有向上兼容性。它提供了3232位寻址方位寻址方式和式和3232位操作方式,并且包含全部浮点运算指令。位操作方式,并且包含全部浮点运算指令。 8048680486指令的操作数指令的操作数可以是可以是0 03 3个,根据寻址方式不同,个,根据寻址方式不同,可
92、直接包含在指令中,也可存于寄存器或存储器中。可直接包含在指令中,也可存于寄存器或存储器中。 每条每条指令的长度指令的长度因指令而异,最短因指令而异,最短1 1字节,最长字节,最长1616字节,字节,平均平均3.23.2字节。字节。 指令的指令的操作数宽度操作数宽度可以是可以是8 8位、位、1616位、位、3232位,寻址宽度位,寻址宽度可以是可以是1616位或位或3232位。位。702.4.2 804862.4.2 80486指令格式指令格式 8048680486和其他和其他8080X86X86系列系列CPUCPU一样,采用变字节的指令格式。一样,采用变字节的指令格式。指令由指令由1 1161
93、6字节组成,一般格式如下字节组成,一般格式如下( (由由6 6个字段组成个字段组成) ):0,1,2,40,1,2,4字节字节前缀前缀PrefixPrefix0,1,2,40,1,2,4字节字节字段字段1 1字段字段2 2操作码操作码OP codeOP code字段字段3 3mod r/mmod r/m字段字段4 4s-i-bs-i-b字段字段5 5displdispl字段字段6 6datadata用于修改指令用于修改指令操作的某些属性操作的某些属性常用前缀有常用前缀有5 5类:类:段超越前缀段超越前缀操作数宽度前缀操作数宽度前缀地址宽度前缀地址宽度前缀重复前缀重复前缀总线锁定前缀总线锁定前缀
94、规定指令规定指令的操作性质的操作性质,包括操作数,包括操作数类型、操作数类型、操作数传送方向、寄传送方向、寄存器编码或存器编码或符号扩展等符号扩展等1 1字节字节1 1字节字节寄存器寄存器/ /存储器寻址存储器寻址方式说明符字段方式说明符字段主寻址字节主寻址字节, ,规规定操作数的寻定操作数的寻址方式址方式, ,包括操作包括操作数的存放位置数的存放位置和存储器中操作和存储器中操作数数EAEA的计算方的计算方法等法等比例比例- -变址变址- -基址字节,为基址字节,为第二寻址字节第二寻址字节位移量字段位移量字段, ,属属存储器地址的存储器地址的一部分。位一部分。位移量足够小移量足够小时时, ,通
95、常采用通常采用带符号的带符号的8 8位位整数整数, ,CPUCPU自动自动将它扩展将它扩展到到1616位或位或3232位位立即数字段立即数字段8 8位立即数与位立即数与16/3216/32位操作数位操作数一起使用时一起使用时, ,CPUCPU自动将其扩展至自动将其扩展至符号相同的符号相同的16/3216/32位数。同理也可将位数。同理也可将1616位立即数扩展至位立即数扩展至3232位位1 14 4字节字节1 12 2字节字节 6 6个字段中,只有操作码字段是必要的,其他字段均可个字段中,只有操作码字段是必要的,其他字段均可有可无,具体取决于涉及的特定操作和操作的位置与类型。有可无,具体取决于
96、涉及的特定操作和操作的位置与类型。712.4.3 804862.4.3 80486的指令简介的指令简介8048680486指令系统指令系统整数指令整数指令-最常用部分最常用部分浮点数指令浮点数指令操作系统型指令操作系统型指令722.4.3 804862.4.3 80486的指令简介的指令简介其中整数指令按功能又可分为:其中整数指令按功能又可分为:1.1.数据传送指令数据传送指令2.2.算术运算指令算术运算指令3 3. .逻辑运算与移位指令逻辑运算与移位指令4.4.串操作指令串操作指令5.5.位操作指令位操作指令6.6.控制转移指令控制转移指令7.7.标志操作指令标志操作指令8.8.按条件设置字
97、节指令按条件设置字节指令9.9.处理器控制指令处理器控制指令10.10.高级语言指令高级语言指令732.4.3 804862.4.3 80486的指令简介的指令简介1.1.数据传送指令数据传送指令 这是计算机中最基本、最常用、最重要的一类操作。这是计算机中最基本、最常用、最重要的一类操作。 在实际程序中,它的使用频率最高,用于实现存储器在实际程序中,它的使用频率最高,用于实现存储器与寄存器、寄存器与寄存器、累加器与与寄存器、寄存器与寄存器、累加器与I/OI/O端口之间字节、端口之间字节、字或双字的传送,也可将立即数传送到存储器或寄存器。字或双字的传送,也可将立即数传送到存储器或寄存器。 这类指
98、令寻址方式最丰富,除这类指令寻址方式最丰富,除POPFPOPF外,均不影响标志外,均不影响标志寄存器的标志位。寄存器的标志位。74数据传送指令主要包括:数据传送指令主要包括:q通用数据传送指令通用数据传送指令,如数值传送类指令,如数值传送类指令( (MOV)MOV)、装入有装入有效地址指令效地址指令( (LEA)LEA)、段装入指令、交换类指令段装入指令、交换类指令( (XCHGXCHG和和BSWAP)BSWAP)、查表转换指令查表转换指令( (XLAT)XLAT)等。等。q堆栈指令堆栈指令,如,如PUSHPUSH类类/ /POPPOP类指令等。类指令等。q数据类型变换指令数据类型变换指令,如
99、数据宽度变换指令,带符号数,如数据宽度变换指令,带符号数符号位扩展符号位扩展/ /无符号数位扩展指令等。无符号数位扩展指令等。qI/OI/O指令指令,如,如ININ类类/ /OUTOUT类指令等。类指令等。2.4.3 804862.4.3 80486的指令简介的指令简介752.4.3 804862.4.3 80486的指令简介的指令简介2.2.算术运算指令算术运算指令 这类指令支持加、减、乘、除四种基本算术这类指令支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的无运算,其操作对象可以是字节、字、双字的无符号和有符号的二进制整数;也可以是无符号符号和有符号的二进制整数;也可以
100、是无符号的压缩的压缩/ /非压缩非压缩BCDBCD码数;还支持符号扩展指令码数;还支持符号扩展指令和十进制调整指令。和十进制调整指令。 它的操作结果一般会影响标志寄存器中的它的操作结果一般会影响标志寄存器中的状态标志位,如状态标志位,如ZFZF、CFCF、SFSF、OFOF、AFAF、PFPF等。等。762.4.3 804862.4.3 80486的指令简介的指令简介算术运算指令有:算术运算指令有:q双操作数指令,如加、减、比较等。双操作数指令,如加、减、比较等。q单操作数指令,如增单操作数指令,如增/ /减、整数变反、乘除法指令等。减、整数变反、乘除法指令等。q无操作数指令,如十进制运算调整
101、和符号位扩展等。无操作数指令,如十进制运算调整和符号位扩展等。q三操作数指令,如有符号整数乘法指令三操作数指令,如有符号整数乘法指令IMULIMUL等。等。772.4.3 804862.4.3 80486的指令简介的指令简介3.3.逻辑运算与移位指令逻辑运算与移位指令 这类指令包括与、或、非、异或、测试这类指令包括与、或、非、异或、测试( (TEST)TEST)和左移、右移、循环左和左移、右移、循环左/ /右移指令。右移指令。 重点要弄清各种移位操作的功能,以及重点要弄清各种移位操作的功能,以及 与与 操作和操作和TESTTEST操作的区别。操作的区别。这类指令除这类指令除NOTNOT外,都会
102、影响某些标志位。外,都会影响某些标志位。782.4.3 804862.4.3 80486的指令简介的指令简介4.4.串操作指令串操作指令 串操作是指对存储器中的一个或多个长度为字节、串操作是指对存储器中的一个或多个长度为字节、字或双字的字符串进行操作,包括串传送、串装入、字或双字的字符串进行操作,包括串传送、串装入、串存储、串比较、串扫描、串输入、串输出等。串存储、串比较、串扫描、串输入、串输出等。 串操作指令都是约定以串操作指令都是约定以DS:(E)SIDS:(E)SI来寻址源串来寻址源串, ,以以ES:(E)DIES:(E)DI来寻址目的串来寻址目的串, ,故指令中不必显式指明操作数故指令
103、中不必显式指明操作数。其中源串的段寄存器其中源串的段寄存器DSDS可通过加段超越前缀而改变,可通过加段超越前缀而改变,但目的串的段寄存器但目的串的段寄存器ESES不能超越。源、目的两个指针不能超越。源、目的两个指针( (E)SIE)SI和和( (E)DIE)DI在每次操作后都将根据方向标志在每次操作后都将根据方向标志DFDF的值的值自动增量自动增量( (DF=0DF=0时时) )或减量或减量( (DF=1DF=1时时) ),以指向串中的下,以指向串中的下一项一项。增量。增量/ /减量的大小由操作串的长度决定:字节串减量的大小由操作串的长度决定:字节串只加只加/ /减减1 1,字串加,字串加/
104、/减减2 2,而双字串加,而双字串加/ /减减4 4。792.4.3 804862.4.3 80486的指令简介的指令简介 通常在串操作指令前通常在串操作指令前加重复前缀加重复前缀来传送一组来传送一组串数据,但必须串数据,但必须用用( (E)CXE)CX来作重复次数计数器来作重复次数计数器,每传送一次,每传送一次,( (E)CXE)CX值减值减1 1,直至减为,直至减为0 0。 除了串比较指令除了串比较指令( (CMPS)CMPS)和串扫描指令和串扫描指令( (SCAS)SCAS)外,外,其余串操作指令均不影响标志位。其余串操作指令均不影响标志位。805.5.位操作指令位操作指令2.4.3 8
105、04862.4.3 80486的指令简介的指令简介为为80386/8048680386/80486所特有。包括以下两类:所特有。包括以下两类:v位测试指令位测试指令-对指定的位串数据的指定位进行测试对指定的位串数据的指定位进行测试 操作后送入操作后送入CFCF,然后将该位按操作规然后将该位按操作规 定变为新值定变为新值( (置置1,1,置置0 0或变反或变反) )。v位扫描指令位扫描指令-由左至右或由右至左检索字或双字中由左至右或由右至左检索字或双字中 的第一个的第一个“1”“1”位,记下其下标存至位,记下其下标存至给给 定的寄存器中。定的寄存器中。812.4.3 804862.4.3 804
106、86的指令简介的指令简介6.6.控制转移指令控制转移指令包括以下包括以下5 5种指令:种指令:v无条件转移指令无条件转移指令( (JMP)JMP)v过程调用过程调用/ /返回指令返回指令( (CALL/RET)CALL/RET)v条件转移指令条件转移指令( (JCC)JCC) v循环控制指令循环控制指令( (LOOP)LOOP)v中断指令中断指令( (INT)INT) 无条件向目标地址转无条件向目标地址转移移, ,可分为段内、段间转移,可分为段内、段间转移,段内、段间转移又可分别段内、段间转移又可分别分为直接和间接转移。分为直接和间接转移。无条件转移指令无条件转移指令( (JMP)JMP)实现
107、子程序调用,也可实现子程序调用,也可归入无条件转移指令中。归入无条件转移指令中。过程调用过程调用/ /返回指令返回指令( (CALL/RET)CALL/RET) 根据指令执行后标志寄根据指令执行后标志寄存器的状态进行转移,通常存器的状态进行转移,通常和和CMPCMP或或TESTTEST指令组合使用。指令组合使用。条件转移指令条件转移指令( (JCC)JCC) 控制循环程序的循环,控制循环程序的循环,实质上也是条件转移指实质上也是条件转移指令,在令,在CX(ECX)CX(ECX)中预置循中预置循环次数。环次数。循环控制指令循环控制指令( (LOOP)LOOP)产生一个由产生一个由8 8位立即数指
108、定位立即数指定中断号的软中断和处理溢中断号的软中断和处理溢出中断。出中断。中断指令中断指令( (INT)INT) 这类指令的共同特点是可改变程序的正常执行顺序,使这类指令的共同特点是可改变程序的正常执行顺序,使之转移。而改变程序的执行顺序之转移。而改变程序的执行顺序, ,本质上就是要改变本质上就是要改变CS:(E)IPCS:(E)IP的内容。这类指令对标志位无影响。的内容。这类指令对标志位无影响。822.4.3 804862.4.3 80486的指令简介的指令简介7.7.标志操作指令标志操作指令 标志寄存器中的标志位一般是由算术标志寄存器中的标志位一般是由算术/ /逻辑运算的结逻辑运算的结果影
109、响的,但也可通过标志操作指令直接对它或它的某果影响的,但也可通过标志操作指令直接对它或它的某些位进行操作,通过改变其状态来控制程序的运行。些位进行操作,通过改变其状态来控制程序的运行。主要包括:主要包括:v标志寄存器读标志寄存器读/ /写指令写指令( (LAHF/SAHF)LAHF/SAHF)v标志寄存器入栈标志寄存器入栈/ /出栈指令出栈指令( (PUSHF / POPFPUSHF / POPF 和和PUSHFDPUSHFD / POPFD)/ POPFD)v单个标志位操作指令单个标志位操作指令832.4.3 804862.4.3 80486的指令简介的指令简介8.8.按条件设置字节指令按条
110、件设置字节指令SETSET 与条件转移指令相似,只是满足条件时,与条件转移指令相似,只是满足条件时,不是转移,而是将特定的字节不是转移,而是将特定的字节( (目的操作数目的操作数) )置置“1”“1”。置。置“1”“1”的条件则直接包含在指的条件则直接包含在指令助记符之中。令助记符之中。849.9.处理器控制指令处理器控制指令这类指令可分为以下四类:这类指令可分为以下四类:v标志操作指令标志操作指令v操作系统型指令操作系统型指令-又分系统寄存器装入与存储又分系统寄存器装入与存储 指令和保护属性检查指令两类。通常只由系统指令和保护属性检查指令两类。通常只由系统 程序员使用,一般用户很少用到。程序
111、员使用,一般用户很少用到。v空操作指令空操作指令-NOP. NOP. 使使CPUCPU不作任何操作,仅影不作任何操作,仅影 响响( (E)IPE)IP寄存器,对标志位无影响。寄存器,对标志位无影响。v外同步类指令外同步类指令-实现实现CPUCPU与外部时间的同步,与外部时间的同步, 包括包括HTLHTL、ESCESC、WAITWAIT、LOCKLOCK。2.4.3 804862.4.3 80486的指令简介的指令简介8510.10.高级语言指令高级语言指令主要包括:主要包括:v数组边界检查指令数组边界检查指令BOUNDBOUNDv进入过程指令进入过程指令ENTERENTERv退出过程指令退出过
112、程指令LEAVELEAVE 可为实现像可为实现像C C和和PASCALPASCAL这样的结构化语言提这样的结构化语言提供机器语言支持。供机器语言支持。2.4.3 804862.4.3 80486的指令简介的指令简介862.4.4 2.4.4 几类常用指令详解几类常用指令详解o数据传送指令数据传送指令o算术运算指令算术运算指令o逻辑运算与移位指令逻辑运算与移位指令o串操作指令串操作指令o控制转移指令控制转移指令87重点关注:重点关注:o指令的汇编格式指令的汇编格式o指令的基本功能指令的基本功能o指令支持的寻址方式指令支持的寻址方式o指令的执行对标志位的影响指令的执行对标志位的影响o指令的特殊要求
113、指令的特殊要求88数据传送指令数据传送指令o数数据据传传送送是是计计算算机机中中最最基基本本、最最常常用用的一类操作。的一类操作。使用频率最使用频率最高高不影响标志位不影响标志位寻址方式最丰富寻址方式最丰富 特点:特点:89o传送指令(传送指令(MOVMOV)o交换指令(交换指令(XCHGXCHG)oI/OI/O指令(指令(IN/OUTIN/OUT)o装入有效地址指令(装入有效地址指令(LEALEA)o装装入入段段寄寄存存器器指指令令(LDSLDS、LESLES、LFSLFS、LGSLGS、LSSLSS)o查表转换指令(查表转换指令(XLATXLAT)o压压栈栈/ /弹弹栈栈指指令令 ( (P
114、USH/PUSHA/PUSHAD/POP/POPA/POPAD)PUSH/PUSHA/PUSHAD/POP/POPA/POPAD))o扩展传送指令(扩展传送指令(MOVSX/MOVZXMOVSX/MOVZX)o字节交换指令(字节交换指令(BSWAPBSWAP)901. 1. 传送指令传送指令o指令操作:指令操作:( (源操作数源操作数)目的操作数目的操作数 n指令格式:指令格式:MOV MOV 目的操作数,源操作数目的操作数,源操作数n寻址规定:寻址规定: REG/MEM/SREGREG/MEM/SREG,REGREG REG/MEM REG/MEM, SREG SREG REG/SREG R
115、EG/SREG, MEM MEM REG/MEM REG/MEM, IMM IMM8/16/32位通用寄位通用寄存器存器REGREG MEMMEM8/16/32位存储器位存储器SREGSREG段寄存器段寄存器IMMIMM8/16/32位立即数位立即数912.4.3 804862.4.3 80486的指令简介的指令简介通用寄存器通用寄存器(EAXEAX、EBXEBX、ECXECX、EDXEDX、 EBP EBP、ESPESP、ESIESI、EDI)EDI)立立即即数数CSCS存存储储器器段寄存器段寄存器( (SSSS、DSDS、ESES、FSFS、GS)GS)MOVMOV指令允许的传送关系指令允
116、许的传送关系92使用说明:使用说明:o源操作数和目的操作数的源操作数和目的操作数的类型必须一致类型必须一致。o目的操作数目的操作数不能为立即数不能为立即数。oCSCS和和( (E)IPE)IP均不能用作指令的目的寄存器。均不能用作指令的目的寄存器。o段寄存器间不能直接传送,也不能直接将立即数送段寄存器间不能直接传送,也不能直接将立即数送给段寄存器。给段寄存器。o源操作数为立即数源操作数为立即数, ,而目的操作数类型不确定时而目的操作数类型不确定时, ,要要给目的操作数加类型说明。给目的操作数加类型说明。q源操作数和目的操作数源操作数和目的操作数不能同为存储器不能同为存储器操作数。操作数。93
117、MOV DSMOV DS,100100 例例2.3 2.3 识别下列指令的正确性,对错误的指令,识别下列指令的正确性,对错误的指令,说明错误的原因。说明错误的原因。 MOV 1000HMOV 1000H,23H23H错。错。源、目的操作数不能同为存储器寻址。源、目的操作数不能同为存储器寻址。 MOV 1000HMOV 1000H,2000H2000H错。立即数不能直接赋给段寄存器。错。立即数不能直接赋给段寄存器。错。目的操作数长度不确定。错。目的操作数长度不确定。 MOV DATAMOV DATA,1133H1133H MOV CSMOV CS,AX AX 依赖于依赖于DATADATA的定义的
118、定义错。不能用传送指令改变代码段寄存器。错。不能用传送指令改变代码段寄存器。 MOV AXMOV AX,0100H+BX+BP0100H+BX+BP错。地址寄存器不能同为基址寄存器。错。地址寄存器不能同为基址寄存器。94 例例2.4 2.4 FIRSTFIRST,SECONDSECOND为字节变量,写出将为字节变量,写出将FIRSTFIRST开始的字内容送给变量开始的字内容送给变量SECONDSECOND开始的字单元指令序列。开始的字单元指令序列。MOVMOV AL AL,FIRSTFIRSTMOVMOV SECOND SECOND,ALALMOVMOV AL AL,FIRST1FIRST1M
119、OVMOV SECOND1 SECOND1,ALALMOVMOV AX AX,WORD PTRWORD PTR FIRST FIRSTMOVMOV WORD PTRWORD PTR SECOND SECOND,AXAX 用字传送用字传送 用字节传送用字节传送952. 交换指令交换指令o操作:操作: ( (目的操作数目的操作数) ) ( (源操作数源操作数) )n格式:格式:XCHG XCHG 目的操作数,源操作数目的操作数,源操作数REG/MEMREG/MEM, REG REG REG REG, MEM MEMn说明:说明:基本用法同基本用法同MOVMOV指令指令; ; 当当源源或或目目的的操
120、操作作数数为为MEMMEM操操作作数数时时,会会自自动动激激活活LOCKLOCK信信号号, ,该该特特性性常常用用于于多多机机、多多任任务务或或多多用用户户系系统统中中的的临临界段(共享资源)访问。界段(共享资源)访问。注意:注意: (1 1)该指令不影响标志位;)该指令不影响标志位; (2 2)不允许使用段寄存器。)不允许使用段寄存器。96 例例2.5 2.5 FIRSTFIRST,SECONDSECOND已定义为字节变量,写出将已定义为字节变量,写出将变量变量FIRSTFIRST和和SECONDSECOND中内容交换的指令序列。中内容交换的指令序列。 解:解: 用交换指令用交换指令XCHG
121、 AL,FIRST XCHG SECOND,ALXCHG AL,FIRST 用用MOV指令指令MOV AL,FIRSTMOV BL,SECONDMOV FIRST,BLMOV SECOND,AL97TEST: MOV AL,0FFH XCHG AL,SEMAPHORE AND AL,AL ;产生条件码产生条件码 JNZ TEST ;忙时等待忙时等待 (临界段程序临界段程序) MOV AL,0 MOV SEMAPHORE,AL ;清信号灯清信号灯 例例2.62.6:临界段访问(测试与置操作):临界段访问(测试与置操作)98 输入输入指令指令o格式:格式:IN IN 累加器,累加器, 端口端口 A
122、L/AX/EAXAL/AX/EAX, IMM8 IMM8 AL/AX/EAX AL/AX/EAX, DX DXo操作:操作: (I/OI/O端口)端口)AL/AX/EAXAL/AX/EAX I/O指令指令直接寻址直接寻址: : 指令给出的立即数是指令给出的立即数是I/OI/O端口地址端口地址间接寻址间接寻址: : DXDX寄存器给出的是寄存器给出的是I/OI/O端口地址端口地址99 输出指令输出指令o格式:格式:OUT OUT 端口端口, , 累加器累加器 IMM8 , AL/AX/EAXIMM8 , AL/AX/EAX DX , AL/AX/EAX DX , AL/AX/EAXo操作:(操作
123、:(AL/AX/EAXAL/AX/EAX)I/OI/O端口端口说明:说明:I/OI/O端口有两种寻址方式端口有两种寻址方式 使用立即数的使用立即数的直接寻址直接寻址, ,寻址范围为寻址范围为0 0255;255; 使用使用DXDX寄存器的寄存器的间接寻址间接寻址, ,寻址范围为寻址范围为0 02 21616-1-1。100n格式格式:LEA r16/r32, memLEA r16/r32, mem ;r16/r32-mem;r16/r32-目的操作数寄存器目的操作数寄存器p例例 LEA AX, BPDILEA AX, BPDIn说明说明pLEALEA指令处理变量的地址指令处理变量的地址( (E
124、 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的有效地址的有效地址=BXBX4.4.地址地址- -目标传送指令目标传送指令101pMOVMOV指令用指令用OFFSETOFFSET操作不能直接取数组中任意元操作不能直接取数组中任意元素的位移量,只能取数组的
125、第一个元素的位移量,素的位移量,只能取数组的第一个元素的位移量,而而LEALEA可以传送任意数组元素的位移量。可以传送任意数组元素的位移量。 如LEA DX, BETABXSIpLEALEA的源操作数必须是存储器操作数的源操作数必须是存储器操作数pLEALEA不影响不影响F F标志标志LDS reg, mem 目的操作数为目的操作数为1616位或位或3232位位通用寄存器之一,源操作通用寄存器之一,源操作数是双字长存储器指针,将双字长源操作数中的低数是双字长存储器指针,将双字长源操作数中的低地址字传送给目的寄存器,将双字长源操作数中的地址字传送给目的寄存器,将双字长源操作数中的高地址字传送给高
126、地址字传送给DSDS段寄存器段寄存器102p如B DB F A DD B LDS BX, A ; B的位移量=BX,B的段基址=DS MOV AL, BX ;将F=AL uLESreg,memq和和LDSLDS一样,只是把双字长源操作数中的高地一样,只是把双字长源操作数中的高地址字传送给址字传送给ESES而不是而不是DSDS103o说说明明:XLATXLAT是是一一条条隐隐含含寻寻址址的的指指令令。隐隐含含两两个个操操作作数数:DSDS:(E)BX(E)BX存存放放表表基基址址, ,ALAL存存放放查查表表参参数数。使使用用前前要要给给隐隐含操作数赋初值。含操作数赋初值。5. 查表指令查表指令
127、n 格式:格式:XLATXLATn 操作:操作:(EBX)+(AL)ALEBX)+(AL)AL (BX)+(AL)AL (BX)+(AL)ALo注意注意: (1 1)不影响标志位;)不影响标志位; (2 2)字节表格(长度不超过)字节表格(长度不超过256256)首地址存入)首地址存入BXBX; (3 3)需转换代码存入需转换代码存入ALAL。104 例例2.7 2.7 内内存存中中自自TABLETABLE开开始始的的1616个个单单元元连连续续存存放放着着自自然然数数0 0到到1515的的平平方方值值( (构构成成一一个个平平方方表表) ),任任给给一一整整数数M M在在XXXX单单元元中中
128、( (该该数数为为00M15)M15),查查表表求求M M的平方值,并将结果存入的平方值,并将结果存入YYYY单元中。单元中。解解: :LEA BXLEA BX,TABLETABLEMOVMOV AL AL,XXXX XLATXLAT MOVMOV YY YY,ALALTABLE 0+1 1+2 4+3 9+15 225XX 51056. 压栈压栈/弹栈指令弹栈指令o格式:格式:PUSHPUSH 源操作数源操作数REG16/MEM16/IMM16REG16/MEM16/IMM16REG32/MEM32/IMM32REG32/MEM32/IMM32o操作:操作: ( (E)SP)-2/E)SP)
129、-2/4 4(E)SP(E)SP ( (源操作数源操作数)()(SS:(E)SPSS:(E)SP)106n格式:格式:POP POP 目的操作数目的操作数 MEM16/REG16MEM16/REG16 MEM32/REG32 MEM32/REG32n操作操作:( ( SSSS:(E)SP)(E)SP)目的操作数目的操作数 ( (E)SP)+ 2E)SP)+ 2/4/4(E)SP(E)SP弹栈指令弹栈指令107o堆栈指令的操作数只能为堆栈指令的操作数只能为字或双字字或双字。oPUSHPUSH和和POPPOP要成对出现要成对出现,以保持堆栈平衡。,以保持堆栈平衡。o堆栈指令也隐含了一个堆栈指令也隐
130、含了一个目的目的/ /源操作数源操作数 堆栈堆栈。o压压栈栈顺顺序序是是先先压压高高字字节节后后压压低低字字节节,弹弹栈栈则则是是先先弹弹低字节后弹高字节低字节后弹高字节。(先进后出)。(先进后出)使用说明使用说明:注意:注意: (1 1)指令执行后不影响标志位;)指令执行后不影响标志位; (2 2)不能用立即寻址方式;)不能用立即寻址方式; (3 3)目标操作数不能是)目标操作数不能是CSCS。108 例例2.8 2.8 用堆栈操作指令将用堆栈操作指令将BXBX和和CXCX中中的两个的两个1616位数(其中位数(其中BXBX是高是高1616位)组成位)组成3232位数传送到位数传送到EAXE
131、AX寄存器中。寄存器中。解:解: PUSH BX ;先压高先压高1616位位 PUSH CX ;后压低后压低1616位位 POP EAX109 例例2.92.9设程序在数据段中定义的数组如下设程序在数据段中定义的数组如下: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累加累加器中的结果是多少?器中的结果是多少?7.传送指令应用举例传送指令应用举例1101. 1. MOV BX,
132、OFFSET NAMES MOV BX, OFFSET NAMES MOV AL,BX+5 MOV AL,BX+5( (AL)=NAMES+5=20AL)=NAMES+5=202. 2. MOV AX, NAMESMOV AX, NAMES 错,源与目的操作数类型不一致错,源与目的操作数类型不一致3. 3. MOV AX, WORD PTR NAMES+1 MOV AX, WORD PTR NAMES+1 ( (AX)=NAMES+1=AX)=NAMES+1=MOMO=4D4FH=4D4FH4. 4. MOV BX,6MOV BX,6 MOV SI,5 MOV SI,5 MOV AX,NAME
133、SBXSI MOV AX,NAMESBXSI 前两条指令正确,第三条错,源与前两条指令正确,第三条错,源与目的操作数类型不一致目的操作数类型不一致 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 25NAMESDS1115. 5. MOV BX, 6*2MOV BX, 6*2 MOV SI,5 MOV SI,5 MOV AX,OFFSET NAMESBXSI MOV AX,OFFSET NAMESBXSI INC AX INC AX 前两条指令正确;第三条错,前两条指令正确;第三条错,OFFSET
134、OFFSET只能取直接变量的偏移地址;只能取直接变量的偏移地址;第四条错,第四条错,AXAX不能用作寄存器间址。不能用作寄存器间址。6. 6. MOV BX, 6MOV BX, 6 MOV SI,5 MOV SI,5 LEA DI,NAMESBXSI LEA DI,NAMESBXSI MOV AL,DI MOV AL,DI ( (DI)=NAMESDI)=NAMES偏移地址偏移地址+(+(BX)+(SI)BX)+(SI) =NAMES =NAMES偏移地址偏移地址+11+11( (AL)=NAMES+11=AL)=NAMES+11=K K=4BH=4BH T+1 O+2 M+3 .+4 .+5
135、 20+6 R+7 O+8 S+9 E+10 30+11 K+12 A+13 T+14 E+15 .+16 25NAMESDS112 例例2.102.10 8048680486工作在实地址方式时,工作在实地址方式时,( (DS)=091DHDS)=091DH,(BX)=0024H(BX)=0024H,有关存储器的内容如图所示。求指令有关存储器的内容如图所示。求指令 LES DILES DI,32HBX32HBX执行后的结果。执行后的结果。DIDIESES0000F6HF6H1 1E40HE40H0922609226H H段基址段基址操作码操作码操作码操作码3232H H00H00H存储器存储器
136、指指令令代代码码段段偏移量偏移量数数据据段段位位移移量量F6HF6H00H00H40H40H1EH1EH00320032H HBX 0024HBX 0024H+ DS*16 091D0H+ DS*16 091D0H09226H09226H1132.4.3.2 2.4.3.2 算术运算指令算术运算指令 算算术术运运算算指指令令用用以以完完成成加加、减减、乘乘、除除四四种种基基本本运运算算,其其操操作作对对象象可可以以是是字字节节、字字、双双字字的的有有符符号号和和无无符符号号二二进进制制整整数数,也也可可以以是是无无符符号号的的压压缩缩、非非压压缩缩BCDBCD数数。算算术术运运算算指指令令还还
137、支支持持十十进进制制调调整整、比比较较指指令令和和数数据据宽宽度度变变换换指指令令等等。除除数数据据宽宽度度变变换换指指令令外外,算算术术运运算算指指令令影影响响标标志志寄寄存存器器EFLAGSEFLAGS中的状态标志位。中的状态标志位。114算术运算指令包括算术运算指令包括: :o加加/ /减法指令减法指令( (ADD/ADC/SUB/SBB)ADD/ADC/SUB/SBB)o加加1/1/减减1 1指令指令( (INC/DEC)INC/DEC)o求补指令求补指令( (NEG)NEG)o数据宽度变换指令数据宽度变换指令( (CBW/CWD/CDQ/CWDE)CBW/CWD/CDQ/CWDE)o
138、交换加法指令交换加法指令( (XADD)XADD)o比较指令比较指令( (CMP)CMP)o比较并交换指令比较并交换指令( (CMPXCHG)CMPXCHG)o乘乘/ /除法指令除法指令( (MUL/IMUL/DIV/IDIV)MUL/IMUL/DIV/IDIV)oBCDBCD调整指令调整指令( (AAA/AAS/AAM/AAD/DAA/DAS)AAA/AAS/AAM/AAD/DAA/DAS)115 加法加法/ /减法指令减法指令 n操作:操作: ADDADD:( (目的目的)+()+(源源) ) 目的目的 SUB: (SUB: (目的目的)-()-(源源) ) 目的目的 ADCADC:( (
139、目的目的)+()+(源源)+ )+ CF CF 目的目的 SBB: (SBB: (目的目的)-()-(源源)- )- CF CF 目的目的目的操作数,源操作数目的操作数,源操作数REGREG, REG/MEM/IMM REG/MEM/IMMMEMMEM, REG/IMM REG/IMMn格式:格式:ADDADD SUB SUB ADCADC SBB SBB116使用说明:使用说明:nADD/SUBADD/SUB指指令令用用于于单单个个字字节节/ /字字/ /双双字字数数的的加加/ /减减法法运算;运算;nADC/SBBADC/SBB指指令令则则常常用用于于多多精精度度或或多多字字节节/ /多多
140、字字/ /多多双双字数字数的加的加/ /减法运算。减法运算。nINC/DEC INC/DEC REG/MEM REG/MEM 指指令令与与 ADD/SUB ADD/SUB REG/MEMREG/MEM,1 1 的的异异同同:两两者者都都执执行行加加1/1/减减1 1操操作作,但但前前者者不不影影响响进位,而后者影响。进位,而后者影响。117加法指令对条件标志位的影响:加法指令对条件标志位的影响:SF=1 结果为负结果为负0 否则否则ZF=1 结果为结果为00 否则否则CF=1 和的最高有效位有向高位的进位和的最高有效位有向高位的进位0 否则否则OF=1 2个操作数符号相同,而结果符号个操作数符
141、号相同,而结果符号与之相反与之相反0 否则否则表示无符表示无符号数相加号数相加的溢出的溢出表示带符表示带符号数相加号数相加的溢出的溢出118减法指令对条件标志位的影响:减法指令对条件标志位的影响:CF=1 减法转换为加法运算时无进位减法转换为加法运算时无进位0 否则否则OF=1 2个操作数符号相反,而结果符号个操作数符号相反,而结果符号与减数相同与减数相同0 否则否则表示无符表示无符号数相减号数相减的溢出的溢出表示带符表示带符号数相减号数相减的溢出的溢出CF=1 被减数最高有效位有向高位的借位被减数最高有效位有向高位的借位0 否则否则119 例例2.11 2.11 两个两个3232位双字数据位
142、双字数据X X、Y Y定义如下:定义如下: X DWX DW 1234H1234H,5678H5678H Y DW 3FEAH Y DW 3FEAH,A033HA033H请编写计算请编写计算X=XX=XY Y的程序段(低位在前)。的程序段(低位在前)。解:解: 用用80868086指令指令 MOV MOV AXAX,Y Y SUB SUBX X,AXAX ;低低1616位字数据相减位字数据相减MOVMOVAXAX,2Y2YSBB SBB 2X2X,AX AX ;高高1616位字数据相减位字数据相减 用用80386/48680386/486指令指令 MOV MOV EAXEAX,DWORD PT
143、RDWORD PTR Y Y ;3232位数位数Y Y送送EAXEAX SUB SUBDWORD PTRDWORD PTR X X,EAXEAX ;X=X-YX=X-Y120 解:解: MOV SIMOV SI,0 ;SI0 ;SI用作数组下标用作数组下标 MOV AXMOV AX,0 ;AX0 ;AX用于求和,初值为用于求和,初值为0 0 MOV CXMOV CX,5 ;CX5 ;CX用作循环计数器用作循环计数器AGAINAGAIN:ADD ALADD AL,BUFSIBUFSI;求和求和 ADC AHADC AH,0 0;处理进位处理进位 INC SIINC SI;数组下标数组下标SISI
144、加加1 1 LOOP AGAINLOOP AGAIN;未完继续未完继续 MOV BUFSIMOV BUFSI,ALAL;保存结果低位保存结果低位 MOV BUFSI+1MOV BUFSI+1,AHAH;保存结果高位保存结果高位 HLTHLT 例例2.12 2.12 编编写写一一程程序序段段,求求内内存存中中5 5个个单单元元字字节节(单单元元地地址址:BUFBUFBUF+4BUF+4)无无符符号号数数之之和和。结结果果存存在在BUF+5BUF+5(低位)和低位)和BUF+6BUF+6(高位)单元。高位)单元。1212.2.整数变反指令整数变反指令( (求补求补) )o格式:格式: NEG NE
145、G 目的操作数目的操作数 REG/MEMREG/MEMo操作:操作: 0-( 0-(OP1) OP1OP1) OP1o应用:常用于求绝对值。应用:常用于求绝对值。解解: : TEST AXTEST AX,8000H8000H JZ NEXT JZ NEXT NEG AX NEG AX NEXT NEXT:HLTHLT 例例2.112.11:求:求AXAX中存放的有符号数的绝对值。中存放的有符号数的绝对值。1223. 3. 比较指令比较指令o操操作作:( (OP1) OP1) (OP2)(OP2),根根据据操操作作结结果果修修改改状状态态标标志志,但不改变目标操作数值。但不改变目标操作数值。o说
146、说明明: CMPCMP指指令令常常用用于于比比较较两两个个数数,然然后后根根据据指指令令产生的状态标志进行程序转移。产生的状态标志进行程序转移。 CMPCMP与与SUBSUB指令都执行减法操作,但前者不因指令都执行减法操作,但前者不因操作结果改变目标操作数值,而后者改变。操作结果改变目标操作数值,而后者改变。v格式:格式:CMP 目的操作数,目的操作数, 源操作数源操作数 REG, REG/MEM/IMM MEM,REG/IMM1234. 4. 乘法指令乘法指令 乘法指令分为有乘法指令分为有符号数符号数和和无符号数无符号数乘法指令乘法指令(IMUL/MUL)。)。 无符号数乘法指令只有单操作数
147、格式一种;无符号数乘法指令只有单操作数格式一种; 有符号数乘法指令则有有符号数乘法指令则有单操作数、双操作数单操作数、双操作数和三操作数和三操作数三种格式。三种格式。124单操作数乘法指令单操作数乘法指令o格式:格式:MUL/IMUL 源操作数源操作数 REG/MEMn操操作作:MUL和和IMUL分分别别为为有有符符号号数数和和无无符符号号数数乘乘法法指指令,两种指令除令,两种指令除操作数类型操作数类型不同外,操作完全相同:不同外,操作完全相同:字字: (AX)(源操作数源操作数)DX:AX双字双字: (EAX)(源操作数源操作数)EDX:EAX字节字节: (AL)(源操作数源操作数)AX源操
148、作数源操作数125o说明:说明:单操作数乘法指令的被乘数是隐含的单操作数乘法指令的被乘数是隐含的( (在在AL/AX/EAXAL/AX/EAX中中) ),而结果长度一定是被乘数,而结果长度一定是被乘数/ /乘数的二倍乘数的二倍( (在在AX/DX:AX/EDX:EAXAX/DX:AX/EDX:EAX中中) )。源操作数不能为立即数。源操作数不能为立即数。要根据是有符号数还是无符号数,分别选用要根据是有符号数还是无符号数,分别选用IMULIMUL或或MULMUL指令指令指令执行影响指令执行影响CFCF和和OFOF标志,若指令执行后,结果的标志,若指令执行后,结果的高一半是有效数值位,则高一半是有
149、效数值位,则CF=OF=1CF=OF=1,否则否则CF=OF=0CF=OF=0。126 例例2.12 2.12 若若( (AL)=96HAL)=96H,(BL)=12H(BL)=12H,求分别执行求分别执行MUL MUL BLBL和和IMUL BLIMUL BL指令后的结果及指令后的结果及OFOF、CFCF状态。状态。 解解: : MUL BLMUL BL完成完成ALAL和和BLBL中的两个无符号数相乘,即:中的两个无符号数相乘,即: ( (AX)=(AL)(BL)=96H12H=0A8CHAX)=(AL)(BL)=96H12H=0A8CH IMUL IMUL BLBL完完成成ALAL和和BL
150、BL中中的的两两个个有有符符号号数数相相乘乘,此此时时ALAL中的数是负数,真值为中的数是负数,真值为-6-6AHAH,即:即: -6 -6AH AH 12H = -774H12H = -774H 用补码表示:用补码表示: ( (AX)=F88CHAX)=F88CH AHAH含有效数字,含有效数字, OF=1OF=1、CF=1CF=1。AHAH含有效数字,含有效数字, OF=1OF=1、CF=1CF=1。127 双操作数乘法指令双操作数乘法指令 格式:格式: IMUL IMUL 目的操作数,源操作数目的操作数,源操作数 REGREG, REG/MEM/IMM REG/MEM/IMM 操作:操作
151、:( (目的操作数目的操作数)()(源操作数源操作数)目的操作数目的操作数 三操作数乘法指令三操作数乘法指令 格式:格式:IMUL IMUL 目的操作数,源操作数,立即数目的操作数,源操作数,立即数 REGREG, REG/MEM REG/MEM, IMM IMM 操作:操作:( (源操作数源操作数) )( (立即数立即数)目的操作数目的操作数 1285.5.除法指令除法指令o格式:格式:DIVIDIV DIVIDIV 源操作数源操作数 REG/MEMREG/MEMo操作:按源操作数类型操作:按源操作数类型: : 字节字节:(:(AX)/(AX)/(源源) ),商存于,商存于ALAL中,余数存
152、于中,余数存于AHAH。 字字: (: (DX:AX)/(DX:AX)/(源源) ),商存于,商存于AXAX中中, ,余数存于余数存于DXDX。 双字双字:(:(EDX:EAX)/(EDX:EAX)/(源源) ),商在,商在EAXEAX中中, ,余数在余数在EDXEDX。129除法指令的被除数是隐含的,且除法指令的被除数是隐含的,且长度一定是除数的长度一定是除数的二倍二倍( (在在AX/DX:AX/EDX:EAXAX/DX:AX/EDX:EAX中中) )。所以所以, ,使用除法指令使用除法指令常要扩展被除数长度常要扩展被除数长度。扩展时无符号数一般用:。扩展时无符号数一般用: MOVZX AX
153、MOVZX AX,ALAL MOV DX MOV DX,0 0 MOV EDX MOV EDX,0 0 有符号数一般用:有符号数一般用:CBW/CWD/CDQCBW/CWD/CDQ源操作数不能为立即数源操作数不能为立即数对所有条件标志位均无定义对所有条件标志位均无定义o说明说明: :130乘乘/ /除法指令应用举例除法指令应用举例 例例2.12 2.12 编写完成编写完成( (EAX)EAX)9/49/4的程序段。的程序段。 解:解: MOVMOVEBXEBX,9 9 MUL/ MUL/IMULIMULEBX EBX ;(EAX)9EDX(EAX)9EDX:EAXEAX MOV MOVEBXE
154、BX,4 4 DIV/ DIV/IDIVIDIVEBX EBX ;(EAX)9/4EAX(EAX)9/4EAX131 MOV AX,a ;ab在在CX:BX中中 MOV AX,c ;c在在DX:AX中中 ;ab+c在在DX:AX中中 ;商存入;商存入S IMUL bMOV CX,DXMOV BX,AXCWDADD AX,BXMOV DX,CXIDIV aMOV S,AX 例例2.13 2.13 下下列列程程序序段段完完成成S=(ab+c)/aS=(ab+c)/a的的运运算算,其其中中变变量量a a、b b、c c和和S S均均为为带带符符号号的的字字数数据据,结结果果的的商商存存入入S S,余
155、数则不计,请在下列空格中填入合适的指令。余数则不计,请在下列空格中填入合适的指令。1326. 6. BCDBCD调整指令调整指令 AAA: AAA: 未组合未组合BCDBCD加法调整指令,隐含操作数为加法调整指令,隐含操作数为ALAL。AAS:AAS:未组合未组合BCDBCD减法调整指令,隐含操作数为减法调整指令,隐含操作数为ALAL。AAM:AAM:未组合未组合BCDBCD乘法调整指令,隐含操作数乘法调整指令,隐含操作数AXAX、AHAH、ALAL。 将将AXAX中乘积调整为两个未组合中乘积调整为两个未组合BCDBCD数存于数存于AHAH和和ALALAAD:AAD:调整除法运算前调整除法运算
156、前AXAX中的被除数内容。中的被除数内容。操作:操作:( (AH)10+(AL)AXAH)10+(AL)AXDAA:DAA:组合组合BCDBCD加法调整指令加法调整指令, , 隐含操作数为隐含操作数为ALAL。DAS:DAS:组合组合BCDBCD减法调整指令减法调整指令, , 隐含操作数为隐含操作数为ALAL。格式格式: : AAAAASAAMAADDAADASAAAAASAAMAADDAADAS133 DAA/DASDAA/DAS、AAA/AASAAA/AAS隐隐含含的的操操作作寄寄存存器器是是ALAL,所所以以BCDBCD码码加加法法/ /减减法法只只能能用用累累加加器器ALAL为为目目的
157、的操操作作数数的的加加法法/ /减减法法指指令令,且且加加法法/ /减减法法指令后要跟调整指令。指令后要跟调整指令。 多多字字节节、字字和和双双字字BCDBCD加加法法/ /减减法法只只能能用用带带进进位位/ /借借位位的的字字节节加加法法/ /减法指令实现。减法指令实现。 ASCIIASCII码码数数的的运运算算与与非非压压缩缩BCDBCD码码数数的的运运算算基基本本相相同同,但但要要保保持结果仍为持结果仍为ASCIIASCII码,则需转换。码,则需转换。 AAMAAM隐含的操作寄存器是隐含的操作寄存器是AXAX,要跟在要跟在MULMUL指令之后。指令之后。 AADAAD指令的功能不是将除法
158、后的结果调整为指令的功能不是将除法后的结果调整为BCDBCD码,而是在除码,而是在除法前将法前将AXAX保存的两位非压缩保存的两位非压缩BCDBCD数调整为二进制数。该指令要放在数调整为二进制数。该指令要放在DIVDIV指令之前。指令之前。 说明:说明:134 解:解:MOV ALMOV AL,BYTE PTRBYTE PTR X X ; ;取字变量的低字节取字变量的低字节 ADD ALADD AL,BYTE PTRBYTE PTR Y ; Y ;低位相加低位相加 DAADAA ;BCD ;BCD码调整码调整 MOV MOV BYTE PTRBYTE PTR X X,AL ;AL ;保存低位结
159、果保存低位结果 MOV ALMOV AL,BYTE PTRBYTE PTR X1 ; X1 ;取字变量的高字节取字变量的高字节 ADC ALADC AL,BYTE PTRBYTE PTR Y1 ; Y1 ;高位相加高位相加 DAADAA MOV MOV BYTE PTRBYTE PTR X1 X1,ALAL 例例2.14 2.14 两个两个4 4位压缩位压缩BCDBCD码定义如下:码定义如下: X X DW 3526HDW 3526HY YDW 1234HDW 1234H 请编写计算请编写计算X+YX+Y的程序段。的程序段。135 例例2.15 2.15 程序段程序段 MOVAX,405H M
160、OVBL,06H AAD DIV BL 执行后执行后AXAX的内容为的内容为 。 A. 307H B. 703H C. 4231H D. 806HA1362.4.3.3 2.4.3.3 逻辑运算和移位指令逻辑运算和移位指令 1. 1. 逻辑运算指令逻辑运算指令 逻逻辑辑运运算算指指令令包包括括ANDAND、OROR、XORXOR、NOTNOT和和TESTTEST指指令令,所所有有指指令令都都对对其其操操作作数数按按位位进进行行逻辑运算。操作数可以是字节、字和双字。逻辑运算。操作数可以是字节、字和双字。137n功功能能:分分别别按按位位进进行行逻逻辑辑“与与”、“或或”、“异或异或”、“测试测试
161、”和和“非非”。格式:格式:ANDAND OR OR XOR XOR TEST TEST 目标操作数,源操作数目标操作数,源操作数 REGREG, REG/MEM/IMM REG/MEM/IMM MEM MEM, REG/IMM REG/IMM NOT NOT 目标操作数目标操作数 REG/MEMREG/MEM逻辑运算指令逻辑运算指令138使用说明使用说明: : 逻辑运算指令除逻辑运算指令除NOTNOT指令指令外,都影响标志寄存器外,都影响标志寄存器的状态标志位,且逻辑运算后进位标志的状态标志位,且逻辑运算后进位标志CFCF一定为一定为0 0,所以逻辑运算指令,所以逻辑运算指令常用于清常用于清
162、0 0和清进位位和清进位位。编程时要根据操作合理选用指令,一般编程时要根据操作合理选用指令,一般: : 对某些二进制位对某些二进制位清零清零用逻辑用逻辑与与指令指令ANDAND; 对某些二进制位对某些二进制位置位置位用逻辑用逻辑或或指令指令OROR; 对对某某些些二二进进制制位位求求反反用用逻逻辑辑异异或或指指令令XORXOR,全全部位部位求反求反用逻辑用逻辑非非指令指令NOTNOT。139 ANDAND指指令令与与TESTTEST指指令令的的相相同同之之处处是是都都执执行行按按位位“与与”操操作作,两两者者执执行行后后对对标标志志寄寄存存器器中中状状态态标标志志位位的的影影响响相相同同, ,
163、不不同同之之处处是是前前者者改改变变目目标标操操作作数数的的值值, ,而而后后者者并并不不改改变变目目标标操操作作数数的的值值。所所以以TESTTEST指指令令与与CMPCMP指指令令的的用用法法类类似似,用于产生按位测试的条件码。用于产生按位测试的条件码。140 例例2.17 2.17 写出一条能完成下述操作的指令:写出一条能完成下述操作的指令: 将将AXAX的高字节清零,低字节不变;的高字节清零,低字节不变; 将将BXBX的低字节置成全的低字节置成全11,高字节不变;,高字节不变; 将将CXCX的高字节变反,低字节不变。的高字节变反,低字节不变。141 解解: : TEST DXTEST
164、DX,8000H ;8000H ;测试符号位,产生状态测试符号位,产生状态 JZ EXIT ;JZ EXIT ;符号位符号位=0=0,结束,结束 NEG DX ;NEG DX ;求绝对值求绝对值 NEG AXNEG AX SBB DX SBB DX,0 0 EXIT EXIT:HLTHLT 例例2.18 2.18 已已知知寄寄存存器器DXDX:AXAX的的内内容容为为3232位位带带符符号号数数,编编写写一一段段程程序序使使DXDX:AXAX的的内内容容成成为为原原来来数据的绝对值。数据的绝对值。1422. 2. 移位指令移位指令 移位指令包括移位指令包括: :o算术移位指令算术移位指令( (
165、SAL/SAR)SAL/SAR)o逻辑移位指令逻辑移位指令( (SHL/SHR)SHL/SHR)o循环移位指令循环移位指令( (ROR/ROL/RCR/RCL)ROR/ROL/RCR/RCL)o双精度移位指令双精度移位指令( (SHLD/SHRD)SHLD/SHRD)143o算术算术/ /逻辑左移指令逻辑左移指令( (SAL/SHL)SAL/SHL)CF0o算术右移指令算术右移指令( (SAR)SAR)CFo逻辑右移指令逻辑右移指令( (SHR)SHR)CF0144o循环左移指令循环左移指令( (ROL)ROL)o循环右移指令循环右移指令( (ROR)ROR)CFCFo带进位位循环左移指令带进
166、位位循环左移指令( (RCL)RCL)CFo带进位位循环右移指令带进位位循环右移指令( (RCR)RCR)CF145使用说明使用说明o移位指令的源操作数采用立即数寻址时,移位指令的源操作数采用立即数寻址时,80868086指令只能为指令只能为1 1,8048680486则为则为8 8位,实际使用低位,实际使用低5 5位。位。o移位指令常用于二进制数的倍乘和倍除,即算术移位指令常用于二进制数的倍乘和倍除,即算术/ /逻辑移逻辑移n n位,位,相当于把二进制数乘以或除以相当于把二进制数乘以或除以2 2n n。o要注意算术右移要注意算术右移( (SAR)SAR)与逻辑右移与逻辑右移( (SHR)SH
167、R)的区别的区别: :前者在符号前者在符号位和数值位依次右移的同时,用符号位充填符号位,而后者位和数值位依次右移的同时,用符号位充填符号位,而后者用用0 0充填符号位。充填符号位。所以所以, ,有符号和无符号数倍乘用有符号和无符号数倍乘用SHL/SALSHL/SAL均均可,但倍除时,有符号数用可,但倍除时,有符号数用SARSAR和无符号数用和无符号数用SHRSHR。o移位指令也常用于循环控制,如逻辑尺控制循环。移位指令也常用于循环控制,如逻辑尺控制循环。146 例例2.19 2.19 试编写用移位和加法指令完成试编写用移位和加法指令完成( (EAX)9/4EAX)9/4的程序段。的程序段。 解
168、解: (: (EAX)EAX)9/4=(EAX)9/4=(EAX)8+(EAX)/48+(EAX)/4MOV EBXMOV EBX,EAX EAX ;保存保存EAXEAXSAL/SAL/SHLSHL EAX EAX,3 3 ;(EAX)8EAX(EAX)8EAXADDADD EAX EAX,EBX EBX ;(EAX)8+(EAX)EAX(EAX)8+(EAX)EAXSAR/SAR/SHRSHR EAX EAX,2 2 ;(EAX)9/4EAX(EAX)9/4EAX147 MOV BLMOV BL,AL ;ALAL ;AL内容存于内容存于BLBL MOV CX MOV CX,8 ;8 ;循环次
169、数为循环次数为8 8AGAINAGAIN:ROL BLROL BL,1 ;(BL)1 ;(BL)依次左移,最高位送依次左移,最高位送CFCF RCR AL RCR AL,1 ;(AL)1 ;(AL)依次右移依次右移, ,最高位用最高位用CFCF充填充填 LOOP AGAINLOOP AGAIN 例例2.20 2.20 编编写写一一程程序序段段,将将寄寄存存器器ALAL的的8 8位位二二进制内容颠倒过来。进制内容颠倒过来。 解解: : ALAL内内容容为为ALAL7 7ALAL6 6ALAL5 5ALAL4 4ALAL3 3ALAL2 2ALAL1 1ALAL0 0,颠颠倒倒是是使使ALAL内内
170、容容成成为为ALAL0 0ALAL1 1ALAL2 2ALAL3 3ALAL4 4ALAL5 5ALAL6 6ALAL7 7 。用用带带进进位位的的循循环环指令实现:指令实现:1482.4.4 2.4.4 串操作指令串操作指令o串传送指令串传送指令 MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSDo串装入指令串装入指令 LODSB/LODSW/LODSDLODSB/LODSW/LODSDo串存储指令串存储指令 STOSB/STOSW/STOSDSTOSB/STOSW/STOSDo串比较指令串比较指令 CMPSB/CMPSW/CMPSDCMPSB/CMPSW/CMPSDo串扫
171、描指令串扫描指令 SCASB/SCASW/SCASDSCASB/SCASW/SCASDo串输入指令串输入指令 INSB/INSW/INSDINSB/INSW/INSDo串输出指令串输出指令 OUTSB/OUTSW/OUTSDOUTSB/OUTSW/OUTSD 串操作指令是指用于对存储器中字节串、字串和串操作指令是指用于对存储器中字节串、字串和双字串进行操作的指令,包括双字串进行操作的指令,包括: : 149串操作约定串操作约定: :用用DS:(E)SIDS:(E)SI寻址源串寻址源串, ,允许段超越;允许段超越;用用ES:(E)DIES:(E)DI寻址目的串,但寻址目的串,但ESES段不能超越
172、;段不能超越;由由DFDF标志位决定标志位决定( (E)SIE)SI,(E)DI (E)DI 指针增减:指针增减: DF=0,DF=0,递增;递增;DF=1,DF=1,递减;递减;由串长度决定指针增减量大小;由串长度决定指针增减量大小;带重复前缀时,用带重复前缀时,用( (E)CXE)CX作重复计数器。作重复计数器。 1501.1.串传送指令串传送指令 o格式:格式: MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSD MOVS MOVS 目的串,源串目的串,源串 MEMMEM, MEM MEMn说明说明: : 该该指指令令允允许许加加重重复复前前缀缀REPREP。此此时时由
173、由( (E)CXE)CX控控制制串串传传送指令送指令MOVSMOVS的执行次数。相当于指令序列:的执行次数。相当于指令序列: AGAINAGAIN:MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSD LOOP AGAIN LOOP AGAINn操作操作: : (DS:(E)SI)(ES:(E)DI)DS:(E)SI)(ES:(E)DI) 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)SIE)SI,(E)DI(E)DI指针指针n应用:用于数据块传送应用:用于数据块传送151 例例2.212.21编写将数据段中自编写将数据段中自AREA1AREA1开始的开始的10
174、0100个字数据搬到附加段中以个字数据搬到附加段中以AREA2AREA2开始的数据区中开始的数据区中的程序段。的程序段。解:解:用用MOV指令指令 LEA SI, AREA1 LEA DI, AREA2 MOV CX, 100 DONE: MOV AX,SI MOV ES:DI,AX ADD SI,2 ADD DI,2 LOOP DONE152 用基本串传送指令用基本串传送指令 LEA SI, AREA1 LEA DI, AREA2 MOV CX, 100 CLD DONE: MOVSW LOOPDONE 用重复串传送指令用重复串传送指令 LEA SI, AREA1 LEA DI, AREA2
175、 MOV CX, 100 CLD REP MOVSW1532.2.串装入指令串装入指令 n格式:格式: LODSB/LODSW/LODSDLODSB/LODSW/LODSD LODS LODS 源串源串 MEMMEMn说明说明: : 一般不与重复前缀一般不与重复前缀REPREP连用。连用。n操作操作: : (DS:(E)SI)AL/AX/EAXDS:(E)SI)AL/AX/EAX 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)SIE)SI指针指针n应用:用于取数据块中元素值应用:用于取数据块中元素值1543.3.串存储指令串存储指令 n格式:格式: STOSB/STOSW/ST
176、OSDSTOSB/STOSW/STOSD STOSSTOS 目的串目的串 MEMMEMn说明说明: : 允许加重复前缀允许加重复前缀REPREP。n操作操作: : AL/AX/EAX(ES:(E)DI)AL/AX/EAX(ES:(E)DI) 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)DIE)DI指针指针n应应用用:用用于于数数据据块块初初始始化化。LODSLODS和和STOSSTOS结结合合常用于数据块传送。常用于数据块传送。1554.4.串扫描指令串扫描指令 n格式:格式: SCASB/SCASW/SCASD SCASB/SCASW/SCASD SCAS SCAS 目的串
177、目的串 MEMMEMn说说明明: : 允允许许加加重重复复前前缀缀REPEREPE或或REPNEREPNE。扫扫描描次次数数由由( (E)CXE)CX指定。重复条件:指定。重复条件: REPE REPE :IF (E)CX)0 AND ZF=1IF (E)CX)0 AND ZF=1, THEN THEN 重复串扫描重复串扫描 REPNE: IF (E)CX)0 AND ZF=0REPNE: IF (E)CX)0 AND ZF=0, THEN THEN 重复串扫描重复串扫描n操操作作: : ( (AL/AX/EAX)-(ES:(E)DI),AL/AX/EAX)-(ES:(E)DI),影影响响标标
178、志志, ,但但不不改改变目的串内容。变目的串内容。 按按DFDF指示和操作数长度修改指示和操作数长度修改( (E)DIE)DI指针指针n应用:应用:用于在串数据中查找关键字用于在串数据中查找关键字。156 MOV SI,2170H ;搬移搬移 MOV CX,100H CLD MOV DI,1000H ;查找查找 MOV CX,100H JNZ K1 MOV BYTE PTR DI,20H ;ASCII码码20H为空为空K1:MOV DI,1000HREP MOVSBREPNE SCASBDEC DI 例例2.22 2.22 串串操操作作指指令令将将100100H H个个数数的的字字符符从从21
179、702170H H处处搬搬到到10001000H H处处,然然后后从从中中检检索索与与ALAL中中字字符符相相同同的的单单元元,并并将将此此单单元元换换成成空空格格符符,程程序序段段如如左左,请请把把所所缺缺指指令令填填上上(本本程程序序只只换换第第一一个个相相同单元)。同单元)。1575.5.串比较指令串比较指令n格式:格式: CMPSB/CMPSW/CMPSDCMPSB/CMPSW/CMPSD CMPS CMPS 源串,目的串源串,目的串 MEMMEM , MEM MEMn说明说明: : 允许加重复前缀允许加重复前缀REPEREPE或或REPNEREPNE。n操操作作: : (DS:(E)
180、SI)-(ES:(E)DI),DS:(E)SI)-(ES:(E)DI),影影响响标标志志, ,但但不不改改变变源源串串和和目目的的串串内内容容。按按DFDF指指示示和和操操作作数数长长度修改度修改( (E)DIE)DI、(E)SI(E)SI指针指针n应用:应用:常用于比较两个串数据是否匹配常用于比较两个串数据是否匹配。1582.4.5 2.4.5 控制转移指令控制转移指令 控制转移指令包括:控制转移指令包括:n无条件转移指令(无条件转移指令(JMPJMP)n调用调用/ /返回指令(返回指令(CALL/RETCALL/RET)n条件转移指令(条件转移指令(JCCJCC)n循环控制指令(循环控制指
181、令(LOOPLOOP)n中断指令(中断指令(INTINT)五类。五类。 控制转移指令的共同特点是可以改变控制转移指令的共同特点是可以改变CS:(E)IPCS:(E)IP的内容,从而改变程序执行顺序。的内容,从而改变程序执行顺序。159o直接转移直接转移此时,指令中直接给出转移的目标地址。又分为此时,指令中直接给出转移的目标地址。又分为: :控制转移指令使用说明:控制转移指令使用说明:1.1.按目标地址的寻址方式,转移可分为:按目标地址的寻址方式,转移可分为: 直接直接短短( (SHORT)SHORT)转移转移 段内段内( (NEAR)NEAR)直接直接转移转移 段间段间( (FAR)FAR)直
182、接直接转移转移 段段内内直直接接短短转转移移和和段段内内直直接接转转移移又又称称为为相相对对转转移移。即即转转移移的的目目标标地地址址为为当当时时的的( (E)IPE)IP地地址址加加上上一一8 8位位位位移移量量( (短短转转移移) )、1616位位位位移移量量(16(16位位寻寻址址) )或或3232位位位位移移量量(32(32位位寻寻址址) ) ,即即:(E)IP)+DISP (E)IPE)IP)+DISP (E)IP160q间接转移间接转移 2. 2. 8086/80888086/8088的的条条件件转转移移指指令令都都为为短短转转移移,80386/8048680386/80486则推
183、广到段内转移。则推广到段内转移。v寄存器间接转移。仅有段内转移。寄存器间接转移。仅有段内转移。v存储器间接转移。分段内和段间转移存储器间接转移。分段内和段间转移。 3. 3. CALLCALL指指令令与与JMPJMP指指令令的的不不同同之之处处是是: :CALLCALL指指令令执行时,增加了保存断点地址进栈的操作。执行时,增加了保存断点地址进栈的操作。 此此时时, ,指指令令中中给给出出的的寄寄存存器器或或存存储储单单元元中中间间接接存存放放着着转转移的目标地址。移的目标地址。又分为又分为: : 4. 4. 循环指令只能是短转移。循环指令只能是短转移。 1611. 1. JMP/CALL LA
184、BELJMP/CALL LABEL;段内直接转移段内直接转移/ /调用调用转移目标转移目标: : IP(IP)+Disp16/32IP(IP)+Disp16/32 例例2.232.23控制转移指令举例控制转移指令举例4. 4. JMP DWORD PTR DISPBX JMP DWORD PTR DISPBX ;1616位段间间接转移位段间间接转移转移目标转移目标: : IPBX+DISPIPBX+DISP,CSBX+DISP+2CSBX+DISP+22. 2. JMP/CALL FAR PTR LABEL JMP/CALL FAR PTR LABEL ;段间直接转移段间直接转移/ /调用调用
185、 转移目标转移目标: : CSSEG LABELCSSEG LABEL,(E)IPOFFSET LABEL(E)IPOFFSET LABEL3. 3. JMP/CALL BXJMP/CALL BX ;1616位段内间接转移位段内间接转移/ /调用调用 转移目标转移目标: : IP(BX)IP(BX)5. 5. CALL FWORD PTR EAXCALL FWORD PTR EAX;3232位段间间接调用位段间间接调用 转移目标转移目标: : EIP EAXEIP EAX,CS EAX+4CS EAX+4162 例例2.24 2.24 指指令令JMP JMP NEAR NEAR PTR PTR
186、 PROGPROG在在程程序序代代码码段段中中的的偏偏移移地地址址为为20132013H H(这这是是该该指指令令第第一一字字节节的的偏偏移移地地址址),组组成成该该指指令令的的三三字字节节机机器器码码为为E91234HE91234H(其其中中E9HE9H为为操操作作码)。码)。该指令执行后,程序将转去何处该指令执行后,程序将转去何处? ? 解:解:该指令执行过程如下该指令执行过程如下: :54285428H H20132013H HE9HE9H12H12H34H34H存储器存储器指指令令代代码码段段位位移移量量34123412H H+ IP 2016H+ IP 2016HIP 5428HIP
187、 5428H 程序转移到当前代码段中偏移地址为程序转移到当前代码段中偏移地址为54285428H H的单元执行的单元执行163 CMP CMP AX AX,BXBXJNOJNO PROG1 PROG1JNCJNC PROG2 PROG2JMPJMP PROG3 PROG3 解:解: 指令指令CMPCMP AXAX,BXBX的的功功能能是是: ( (AX)-(BX)AX)-(BX),根根据据结结果果置置相相应应标标志志位位,而而8080X86MPUX86MPU中中数数是是用用补补码码表表示示,补补码码减减法法可可用用补补码加法实现码加法实现。于是:于是: ( (AX)-(BX)= (AX)+-(
188、BX)AX)-(BX)= (AX)+-(BX)补补 例例2.252.25已知已知( (AX)=14C6HAX)=14C6H,(BX)=80DCH(BX)=80DCH,执行以下程执行以下程序后,程序转向哪里?序后,程序转向哪里?164 ( (AX) =14C6H=0001010011000110AX) =14C6H=0001010011000110 + +-(BX)(BX)补补=7=7F24H=0111111100100100F24H=0111111100100100 1001001111101010=93EAH 1001001111101010=93EAH 符号位向进位位的进位符号位向进位位的
189、进位C C2 2=0=0 最高数据位向符号位的进位最高数据位向符号位的进位C C1 1=1=1 OF= COF= C1 1CC2 2=1=1,溢出。溢出。 程序转向程序转向PROG3加法无进位表明减法有借位加法无进位表明减法有借位, , CF=CCF=C2 2=1=1。程序段如下:程序段如下:CMPCMP AX AX,BXBXJNOJNO PROG1 PROG1JNCJNC PROG2 PROG2JMPJMP PROG3 PROG3165 例例2.29 2.29 编编写写一一程程序序段段,BUFBUF单单元元有有一一单单字字节节无无符符号号数数X X,编编程程计计算算Y Y(仍仍为为单单字字节
190、节),结结果果保保留留在在累累加加器中。器中。 解:解: MOVMOVALAL,BUFBUF; ;BUFBUF内容(内容(X X)ALAL CMPCMPALAL,2020; ;与与2020比较比较 JNCJNCNEXTNEXT; ;X X 2020,转去执行转去执行X-20X-20 MOV MOVBLBL,ALAL; ;Y=3X=2X+XY=3X=2X+X,用移位和加法实现用移位和加法实现 SHLSHLALAL,1 1 ADD ADDALAL,BLBL JMPJMPEXITEXIT; ;跳过计算跳过计算Y=X-20Y=X-20的指令的指令NEXT:NEXT: SUB AL SUB AL,202
191、0EXIT:EXIT: HLT HLTY=Y=3 3X X20X X20X-20 X20X-20 X201662.5 2.5 关于指令系统的说明关于指令系统的说明正确使用指令系统,关键要弄清楚:正确使用指令系统,关键要弄清楚:指令的各种类型指令的各种类型每条指令的功能及格式每条指令的功能及格式每条指令对操作数的要求每条指令对操作数的要求指令执行后对标志寄存器的影响指令执行后对标志寄存器的影响源源/ /目的操作数目的操作数 及其寻址方式及其寻址方式操作数长度操作数长度显式还是隐式显式还是隐式指令运用的多样性与优化指令运用的多样性与优化1671.1.应把指令格式应把指令格式( (句法句法) )与寻
192、址方式联系起与寻址方式联系起来理解、掌握。来理解、掌握。 每条指令的显式操作数,无论是每条指令的显式操作数,无论是OP1,OP2OP1,OP2还是还是OP3,OP3,都无非是立即数、寄存器数或存储都无非是立即数、寄存器数或存储器数,其对应的寻址方式可能是前面所讲的器数,其对应的寻址方式可能是前面所讲的十一种寻址方式之一。十一种寻址方式之一。2.5 2.5 关于指令系统的说明关于指令系统的说明1682.5 2.5 关于指令系统的说明关于指令系统的说明2.2.使用指令时,要特别注意弄清楚指令隐使用指令时,要特别注意弄清楚指令隐含的操作寄存器含的操作寄存器例如:例如:v乘、除法指令的单操作数格式下,
193、只显式指出乘、除法指令的单操作数格式下,只显式指出了源操作数的乘数或除数,但应注意目的操作数了源操作数的乘数或除数,但应注意目的操作数和源操作数的被乘数和源操作数的被乘数/ /被除数必须存放在被除数必须存放在A A累加器累加器或或DX:AX(EDX:EAX)DX:AX(EDX:EAX)中。中。v加、减、乘、除运算的组合加、减、乘、除运算的组合/ /未组合未组合BCDBCD码调整码调整指令看起来均无操作数,但目的操作数均隐含在指令看起来均无操作数,但目的操作数均隐含在A A累加器中。累加器中。v串操作指令规定传送操作是从串操作指令规定传送操作是从DS:ESI(DS:ESI(或或SI)SI)地址传
194、到地址传到ES:EDI(ES:EDI(或或DI)DI)地址;存取操作时,地址;存取操作时,A A累累加器和变址寄存器加器和变址寄存器DI/SIDI/SI是取寄存器;入是取寄存器;入/ /出操出操作时,作时,DX(DX(或或EDX)EDX)是端口寄存器。是端口寄存器。v重复前缀重复前缀REPREP和循环指令和循环指令LOOPLOOP都是以都是以CX(CX(或或ECX)ECX)作为隐含的重复作为隐含的重复/ /循环次数计数寄存器。循环次数计数寄存器。1692.5 2.5 关于指令系统的说明关于指令系统的说明v查表转换指令查表转换指令XLATXLAT必须以必须以EBXEBX作为被查表的表基址,作为被
195、查表的表基址,以以ALAL作为表指针和存放结果的目的寄存器。所以必须作为表指针和存放结果的目的寄存器。所以必须预先将表的基址送到预先将表的基址送到EBXEBX中,而将被查表元素的下标送中,而将被查表元素的下标送到到ALAL中。中。v标志处理指令标志处理指令LAHFLAHF、SAHFSAHF隐含的寄存器是隐含的寄存器是AHAH寄存器和寄存器和标志寄存器标志寄存器F F的低字节。的低字节。v比较并交换指令比较并交换指令CMPXCHGCMPXCHG看起来只有看起来只有2 2个操作数,而实个操作数,而实际上隐含了累加器际上隐含了累加器A A作为第三个操作数。作为第三个操作数。v数据长度扩展数据长度扩展
196、( (转换转换) )指令指令CBW/CWDE/CWD/CDQCBW/CWDE/CWD/CDQ隐含了隐含了A A累加器和累加器和DXDX寄存器作为源寄存器作为源/ /目的操作数。目的操作数。 1702.5 2.5 关于指令系统的说明关于指令系统的说明3.3.对带符号和无符号数,许多同种操作却对带符号和无符号数,许多同种操作却要使用不同的指令。要使用不同的指令。例如:例如:最高位扩展的传送指令最高位扩展的传送指令 MOVSX MOVZXMOVSX MOVZX指令名称指令名称 对带符号数对带符号数 对无符号数对无符号数乘法指令乘法指令 IMUL MULIMUL MUL除法指令除法指令 IDIV DI
197、VIDIV DIV移位指令移位指令* * SAL/SAR SHL/SHRSAL/SAR SHL/SHR* *算术算术/ /逻辑左移相同,但右移过程不同。例如:逻辑左移相同,但右移过程不同。例如:设设 AX=8520HAX=8520HSHR AX,1 SHR AX,1 后,结果是后,结果是AX=4290HAX=4290HSAR AX,1 SAR AX,1 后,结果是后,结果是AX=C290HAX=C290H1712.5 2.5 关于指令系统的说明关于指令系统的说明4.4.应注意指令和指令序列中标号与变量的区别。应注意指令和指令序列中标号与变量的区别。 两者都是存储单元的符号地址。但标号是某条指令
198、所两者都是存储单元的符号地址。但标号是某条指令所存放单元的符号地址,位于指令的操作符存放单元的符号地址,位于指令的操作符( (助记符助记符) )前面;前面; 变量是某个数据所存放单元的符号地址,位于操作符变量是某个数据所存放单元的符号地址,位于操作符后面的操作数部分。后面的操作数部分。 换言之,标号对应的存储单元中存放的是指令换言之,标号对应的存储单元中存放的是指令( (操作操作码码) ),而变量所对应的存储单元中存放的是数据,而变量所对应的存储单元中存放的是数据( (操作数操作数) )。 所有控制转移指令可以转移到代表指令地址的标号去,所有控制转移指令可以转移到代表指令地址的标号去,但决不允
199、许转移到某一变量。但决不允许转移到某一变量。1722.5 2.5 关于指令系统的说明关于指令系统的说明5.5.要严格区分指令是对地址还是对地址中要严格区分指令是对地址还是对地址中的内容的内容( (数据数据) )进行操作进行操作例如:例如:LEA BX,TABLE LEA BX,TABLE ;TABLE;TABLE的偏移地址的偏移地址BXBXMOV BX,TABLEMOV BX,TABLE* * ; ;字变量字变量TABLETABLE中的内容中的内容BXBXMOV BX,OFFSET TABLE MOV BX,OFFSET TABLE ;TABLE;TABLE的偏移地址的偏移地址BXBXXCHG
200、 AX,BX XCHG AX,BX ;BX;BX中的内容与中的内容与AXAX中的内容变换中的内容变换XCHG AX,BX XCHG AX,BX ;BX;BX所指示的地址所指示的地址( (内存单元内存单元) )中中 ; ;的内容与的内容与AXAX中的内容变换中的内容变换* *当将当将TABLETABLE作为一个变量用数据定义伪指令定义过时,作为一个变量用数据定义伪指令定义过时,它是一个符号地址;当将它作为一个数用它是一个符号地址;当将它作为一个数用EQUEQU或等号或等号=定义过时,它是一个立即数。定义过时,它是一个立即数。1731 1、若自若自BLOCKBLOCK开始的内存缓冲区中开始的内存缓
201、冲区中, ,有有100100个个1616位带符号数位带符号数, ,要求找出其中的最大值要求找出其中的最大值, ,将它存放到将它存放到MAXMAX单元中。单元中。2 2、将将ASCIIASCII码数转换为紧凑型码数转换为紧凑型BCDBCD码数。若在内存数据区中码数。若在内存数据区中( (输入缓冲区中输入缓冲区中) ),已有若干个用,已有若干个用ASCIIASCII码表示的十进制数码码表示的十进制数码( (显然每个存储单元只存放一位十进制数显然每个存储单元只存放一位十进制数) )。要求把它们转。要求把它们转换为相应的换为相应的BCDBCD码,且把相邻两个存储单元的十进制数码的码,且把相邻两个存储单
202、元的十进制数码的BCDBCD码合并在一个单元中,地址高的放在高码合并在一个单元中,地址高的放在高4 4位。这样就可位。这样就可节省一半存储单元。节省一半存储单元。课后练习/讨论题1743 3、与上例相反。要求将存放在内存中的若干个组与上例相反。要求将存放在内存中的若干个组合型合型BCDBCD码数分别转换为码数分别转换为ASCIIASCII码,存于输出缓冲器码,存于输出缓冲器中,高中,高4 4位位BCDBCD码对应的码对应的ASCIIASCII码放在较高地址的单码放在较高地址的单元。元。4 4、内存中起始地址为内存中起始地址为BLOCKBLOCK的数据块中的数据有正的数据块中的数据有正有负,要求
203、把其中的正、负数分开,分别送至同一有负,要求把其中的正、负数分开,分别送至同一段中的两个缓冲区,正、负数的缓冲区的首址分别段中的两个缓冲区,正、负数的缓冲区的首址分别为为PLUS-DATAPLUS-DATA和和MINUS-DATAMINUS-DATA。课后练习/讨论题175课后练习/讨论题分析:要解决这个问题,可先把数据块的第一分析:要解决这个问题,可先把数据块的第一个数取至个数取至AXAX中,然后从第二个存储单元开始,中,然后从第二个存储单元开始,依次与依次与AXAX中的内容比较。如中的内容比较。如AXAX中的值大,则不中的值大,则不作改变,接着进行下一次比较;如作改变,接着进行下一次比较;
204、如AXAX中的值小,中的值小,则将内存单元的内容送至则将内存单元的内容送至AXAX,取代原来小的数。取代原来小的数。这样,经过这样,经过9999次比较后,在次比较后,在AXAX中存的必然是中存的必然是100100个数中最大的数。个数中最大的数。 要进行要进行9999次比较,显然要编一个循环程序,次比较,显然要编一个循环程序,在每一循环中要用比较指令,然后用条件转移指在每一循环中要用比较指令,然后用条件转移指令判别大小。循环开始前要置初值。令判别大小。循环开始前要置初值。1 1、若自、若自BLOCKBLOCK开始的内存缓冲区中开始的内存缓冲区中, ,有有100100个个1616位带位带符号数符号
205、数, ,要求找出其中的最大值要求找出其中的最大值, ,将它存放到将它存放到MAXMAX单元单元中。中。176参考程序段如下:参考程序段如下: MOV BX,OFFSET BLOCK MOV BX,OFFSET BLOCK ; ;将将BLOCKBLOCK偏移地址送偏移地址送BXBX MOV AX,BX MOV AX,BX ADD BX ADD BX,2 2 ; ;数据指针加数据指针加2 2,指向下个字数据,指向下个字数据 MOV CX,99 ; MOV CX,99 ;设循环比较次数设循环比较次数AGAIN:AGAIN:CMP AX,BX CMP AX,BX ;AX;AX与与BXBX所指存储单元中
206、的两个数比较所指存储单元中的两个数比较 JG JG NEXTNEXT ; ;若若AXAX中的数大,转中的数大,转NEXTNEXT MOV AX,BX ; MOV AX,BX ;否则,将大数送否则,将大数送AXAXNEXT:NEXT:INC BX INC BX INC BX INC BX DEC CX ;CX=CX-1DEC CX ;CX=CX-1 JNZ JNZ AGAIN AGAIN ;CX0, ;CX0,转转AGAINAGAIN继续循环继续循环 MOV MAX,AX ;CX=0,MOV MAX,AX ;CX=0,循环结束,最大数送循环结束,最大数送MAXMAX HLT HLT 177课后练
207、习/讨论题2 2、将、将ASCIIASCII码数转换为紧凑型码数转换为紧凑型BCDBCD码数。若在内存数据码数。若在内存数据区中区中( (输入缓冲区中输入缓冲区中) ),已有若干个用,已有若干个用ASCIIASCII码表示的十码表示的十进制数码进制数码( (显然每个存储单元只存放一位十进制数显然每个存储单元只存放一位十进制数) )。要求把它们转换为相应的要求把它们转换为相应的BCDBCD码,且把相邻两个存储单码,且把相邻两个存储单元的十进制数码的元的十进制数码的BCDBCD码合并在一个单元中,地址高的码合并在一个单元中,地址高的放在高放在高4 4位。这样就可节省一半存储单元。位。这样就可节省一
208、半存储单元。分析:分析:要把要把ASCIIASCII码十进制数变为码十进制数变为BCDBCD码很简单,只要将码很简单,只要将高高4 4位变为位变为0 0即可即可; ;要把两位要把两位BCDBCD码组合在一个单元中,则码组合在一个单元中,则只要把地址高的左移只要把地址高的左移4 4位,再与地址低的装配为一个字位,再与地址低的装配为一个字节即可。节即可。还有一点要注意,被转换的还有一点要注意,被转换的ASCIIASCII码个数可能是偶数,码个数可能是偶数,也可能是奇数。若是奇数,则把地址最低或地址最也可能是奇数。若是奇数,则把地址最低或地址最高的一个转换为非组合型高的一个转换为非组合型BCDBCD
209、码码( (高高4 4位为位为0)0),然后将,然后将剩下的偶数个按统一的方法处理。剩下的偶数个按统一的方法处理。178MOV SI,OFFSET ASCBUFMOV SI,OFFSET ASCBUFMOV DI,OFFSET BCDBUF MOV DI,OFFSET BCDBUF MOV CX,COUNT MOV CX,COUNT ROR CX,1 ROR CX,1 JNC NEXT JNC NEXT ROL CX,1 ROL CX,1 MOV AL,SIMOV AL,SIINC SIINC SIAND AL,0FHAND AL,0FHMOV DI,ALMOV DI,ALINC DIINC D
210、IDEC CX DEC CX ROR CX,1 ROR CX,1 NEXT:NEXT:MOV AL,SI MOV AL,SI INC SI INC SI AND AL,0FH AND AL,0FH MOV BL,AL MOV BL,AL MOV AL,SI MOV AL,SI INC SI INC SI PUSH CXPUSH CX MOV CL,4 MOV CL,4 SAL AL,CL SAL AL,CL POP CXPOP CX ADD AL,BL ADD AL,BL MOV DI,AL MOV DI,AL INC DI INC DI LOOP LOOP NEXT NEXT HLT HLT
211、 参考程序段如下:参考程序段如下:判断判断ASCIIASCII码个数是奇码个数是奇数还是偶数数还是偶数保护、保护、恢复恢复CXCX连续连续2 2位位ASCIIASCII码转换码转换为为1 1位压缩位压缩BCDBCD码码1793 3、与上例相反。要求将存放在内存中的与上例相反。要求将存放在内存中的若干个组合型若干个组合型BCDBCD码数分别转换为码数分别转换为ASCIIASCII码,存于输出缓冲器中,高码,存于输出缓冲器中,高4 4位位BCDBCD码对码对应的应的ASCIIASCII码放在较高地址的单元。码放在较高地址的单元。课后练习/讨论题180 MOV SI,OFFSET BCDBUF MO
212、V SI,OFFSET BCDBUF MOV DI,OFFSET ASCBUF MOV DI,OFFSET ASCBUF MOV CX,COUNT MOV CX,COUNT TRANTTRANT:MOV AL,SI MOV AL,SI INC SI INC SI MOV BL,AL MOV BL,AL AND AL,0FH AND AL,0FH OR AL,30H OR AL,30H MOV DI,AL MOV DI,AL INC DI INC DI MOV AL,BL MOV AL,BL PUSH CX PUSH CX MOV CL,4MOV CL,4SHR AL,CL SHR AL,CL
213、OR AL,30H OR AL,30H MOV DI,AL MOV DI,AL INC DIINC DIPOP CX POP CX LOOPLOOP TRANT TRANT HLT HLT 参考程序段如下:参考程序段如下:1814 4、内存中起始地址为、内存中起始地址为BLOCKBLOCK的数据块中的数据的数据块中的数据有正有负,要求把其中的正、负数分开,分别有正有负,要求把其中的正、负数分开,分别送至同一段中的两个缓冲区,正、负数的缓冲送至同一段中的两个缓冲区,正、负数的缓冲区的首址分别为区的首址分别为PLUS-DATAPLUS-DATA和和MINUS-DATAMINUS-DATA。课后练习
214、/讨论题分析:分析:要解决这一问题,可设要解决这一问题,可设SI(SI(或或ESI)ESI)为源数为源数据块的指针,设据块的指针,设DI(DI(或或EDI)EDI)和和BX(BX(或或EBX)EBX)分别为正、分别为正、负数的目的区指针,使用串装入指令负数的目的区指针,使用串装入指令LODSLODS把源数把源数据取至据取至AL(AL(或或EAX)EAX)中中; ;然后检查其符号位然后检查其符号位, ,若是正若是正数数, ,则用串存储指令则用串存储指令STOSSTOS指令送至正数缓冲区指令送至正数缓冲区; ;若若是负数是负数, ,则可把则可把DIDI与与BXBX交换交换, ,将负数区指针交换到将
215、负数区指针交换到DIDI中中, ,再用再用STOSSTOS指令送至负数缓冲区。同时指令送至负数缓冲区。同时, ,可用可用CXCX来控制循环次数。来控制循环次数。182 MOV SI,OFFSET BLOCK MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUSMOV DI,OFFSET PLUS DATADATA MOV BX,OFFSET MINUSMOV BX,OFFSET MINUS DATADATA MOV CX,COUNT MOV CX,COUNT GOON:GOON:LODSB LODSB TEST AL,80H TEST AL,80H JNZ JNZ MINUS MINUS STOSB STOSB JMP JMP AGAINAGAINMINUS:MINUS:XCHG BX,DI XCHG BX,DI STOSB STOSB XCHG BX,DI XCHG BX,DI AGAIN:AGAIN:DEC CX DEC CX JNZ JNZ GOONGOON HLT HLT参考程序段如下:参考程序段如下:183