第四章

140
第第第 第第第 第第第 第第第 CPU CPU 第第第第第第第第

Upload: nan

Post on 04-Jan-2016

87 views

Category:

Documents


4 download

DESCRIPTION

第四章. 典型的 CPU 及指令系统. 内容简介. IBM PC 系列微型机及兼容机是国内外应用最广泛的微型计算机。 IBM PC 微机的 CPU 采用 Intel 8088 或 Intel 8086 微处理器。本章先介绍 8086/8088CPU 的内部结构、主存储器组织以及堆栈结构,然后讲解 8086/8088 指令系统的寻址方式和指令功能。. 学习目标. ☻ 理解 8086/8088CUP 的寄存器结构、主存储器、堆栈结构。 ☻ 掌握 8086/8088 指令系统的寻址方式。 ☻ 理解 8086/8088 指令类型。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章

第四章第四章

典型的典型的 CPUCPU 及指令系统及指令系统

Page 2: 第四章

内容简介内容简介 IBM PCIBM PC 系列微型机及兼容机是国内外应系列微型机及兼容机是国内外应

用最广泛的微型计算机。用最广泛的微型计算机。 IBM PCIBM PC 微机的微机的CPUCPU 采用采用 Intel 8088Intel 8088 或或 Intel 8086Intel 8086 微处微处理器。本章先介绍理器。本章先介绍 8086/8088CPU8086/8088CPU 的内部的内部结构、主存储器组织以及堆栈结构,然后结构、主存储器组织以及堆栈结构,然后讲解讲解 8086/80888086/8088 指令系统的寻址方式和指指令系统的寻址方式和指令功能。令功能。

Page 3: 第四章

学习目标学习目标 ☻☻ 理解理解 8086/8088CUP8086/8088CUP 的寄存器结构、主的寄存器结构、主

存储器、堆栈结构。存储器、堆栈结构。 ☻☻ 掌握掌握 8086/80888086/8088 指令系统的寻址方式。指令系统的寻址方式。 ☻☻ 理解理解 8086/80888086/8088 指令类型。指令类型。 ☻☻ 了解提高了解提高 CPUCPU 性能的一些措施与当前常性能的一些措施与当前常

用的实际用的实际 CPUCPU 基本组成。基本组成。

Page 4: 第四章

学习建议学习建议 8086/80888086/8088 指令系统的寻址方式是本章指令系统的寻址方式是本章

的重点内容,指令主要是通过不同的寻址的重点内容,指令主要是通过不同的寻址方式去存取操作数,它们是理解指令功能方式去存取操作数,它们是理解指令功能和编程的基础。同学们在学习时,应注意和编程的基础。同学们在学习时,应注意各种寻址方式的特点和应用场合。各种寻址方式的特点和应用场合。

Page 5: 第四章

第四章的内容章节第四章的内容章节 4.14.1 、、 8086/8088CPU8086/8088CPU 4.24.2 、主存贮器、主存贮器 4.34.3 、、 8088/80868088/8086 堆栈堆栈 4.44.4 、、 8088/80868088/8086 指令系统指令系统 4.54.5 、提高、提高 CPUCPU 性能的一些措施性能的一些措施

Page 6: 第四章

第三章的模型计

算机C

PU

Page 7: 第四章

IBM 公司于 1981 年 8 月 12 日所推出的第一台 IBM PC——5150 1985 年,中国自行研制成功了第一台微型计算机,长城的 0520

Page 8: 第四章

8088/8086

————————8086/8088CPU8086/8088CPU

Page 9: 第四章

8088/8086

————————8086/8088CPU8086/8088CPU

Page 10: 第四章

8088/8086

————————8086/8088CPU8086/8088CPU

Page 11: 第四章

IBM 公司于 1981 年 8 月 12 日所推出的第一台 PC 机的主板图

————————8086/8088CPU8086/8088CPU

Page 12: 第四章

44 、、 1 8086/8088CPU1 8086/8088CPU

8086CPU8086CPU 是是 1616 位微处理器,即位微处理器,即 CPUCPU 的的内外数据总线为内外数据总线为 1616 位,一个总线周期可以位,一个总线周期可以传送一个字(传送一个字( 1616 位)数据。而位)数据。而 80888088 是准是准1616 位微处理器,其位微处理器,其 CPUCPU 内部总线为内部总线为 1616 位,位,外部总线为外部总线为 88 位,因此一个总线周期只能位,因此一个总线周期只能传送一个字。传送一个字。

Page 13: 第四章

4.14.1 、、 8086/8088CPU8086/8088CPU (概述)(概述)

相同点:相同点:

都是都是 1616 位机,外部地址线都是位机,外部地址线都是 2020 条。条。内部结构基本相同内部结构基本相同

Page 14: 第四章

4.14.1 、、 8086/8088CPU8086/8088CPU

不同点不同点::最主要的区别就是系统总线中的数据线最主要的区别就是系统总线中的数据线 80880866 是是 1616 位,而位,而 80888088 地址线是地址线是 88 位。位。

此外,此外, 8088/80868088/8086 都是都是 1616 位宽度的计算机位宽度的计算机但常常称但常常称 80888088 是准是准 1616 位机位机

————————8086/8088CPU8086/8088CPU

Page 15: 第四章

1.8086/80881.8086/8088 的内部结构的内部结构4.1.14.1.1 、、 8086/8088CPU8086/8088CPU 的结构的结构

流水线式的取指 - 执行

————————8086/8088CPU8086/8088CPU

Page 16: 第四章

8086/8088 CPU8086/8088 CPU 采用了一种较先进的采用了一种较先进的指令流水线结构,将取指令(或取操作指令流水线结构,将取指令(或取操作数)与执行指令的功能分别由两个独立部数)与执行指令的功能分别由两个独立部件实现,即总线接口部件件实现,即总线接口部件 BIUBIU (( bus interbus interface unitface unit )与执行部件)与执行部件 EUEU (( execute uexecute unitnit )。因此,当)。因此,当 EUEU 执行某条指令时,执行某条指令时, BIBIUU 同时完成从主存中预取后继指令,两个同时完成从主存中预取后继指令,两个部件并行的工作,使指令的读取与执行可部件并行的工作,使指令的读取与执行可以部分重叠,从而提高了指令的执行速度。以部分重叠,从而提高了指令的执行速度。

Page 17: 第四章

————————8086/8088CPU8086/8088CPU

1.EU

2.BIU

Page 18: 第四章

1616 为算术逻辑运算部件为算术逻辑运算部件 ALUALU 一组通用寄存器一组通用寄存器

执行部件执行部件 EU EU 暂存器暂存器 标志寄存器标志寄存器 EUEU 控制器控制器

Page 19: 第四章

1.8086/80881.8086/8088 的内部结构的内部结构1.EU(Execute Unit)1.EU(Execute Unit)从指令队列里取出指令代码,由从指令队列里取出指令代码,由 EUEU 控制器控制器

进行译码后产生对应的控制信号到各部件进行译码后产生对应的控制信号到各部件以完成指令规定的操作以完成指令规定的操作

对操作数进行算逻运算,并将运算结果的对操作数进行算逻运算,并将运算结果的特征状态存放在标志寄存器中特征状态存放在标志寄存器中

由于由于 EUEU 不直接与系统总线连接,由此当需不直接与系统总线连接,由此当需要与主存储器或要与主存储器或 I/OI/O 端口传送数据时,端口传送数据时, EUEU向向 BIUBIU 发出命令,并提供给发出命令,并提供给 BIU16BIU16 位有效位有效地址与传送的数据地址与传送的数据

————————8086/8088CPU8086/8088CPU

Page 20: 第四章
Page 21: 第四章

段寄存器段寄存器

指令指针指令指针 BIU 6BIU 6 字节的指令队列(字节的指令队列( 80888088 是是 44 字字

节)节)

2020 位地址形成部件位地址形成部件

总线控制逻辑总线控制逻辑

Page 22: 第四章

1.8086/80881.8086/8088 的内部结构的内部结构2.BIU(Bus Interface Unit)2.BIU(Bus Interface Unit)

从主存取出指令送到指令队列中排队从主存取出指令送到指令队列中排队从主存或从主存或 I/OI/O 端口取操作数或存放运算结果端口取操作数或存放运算结果计算并形成访问贮存的计算并形成访问贮存的 2020 位物理位物理地址地址

————————8086/8088CPU8086/8088CPU

Page 23: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成先给大家学习以下计算机科学中的量词先给大家学习以下计算机科学中的量词

221010=1024=1K=1024=1K

222020=1024K=1M=1024K=1M

223030=1024M=1G=1024M=1G

我们学习的我们学习的 8088/80868088/8086 有有 2020 根地址线,可根地址线,可以将主存储器编上以将主存储器编上 222020 个内存单元,即个内存单元,即 1M1M 内内存,即使有多于存,即使有多于 1M1M 内存的内存,对于内存的内存,对于 8088/8088/80868086 来说,也是浪费。来说,也是浪费。

————————8086/8088CPU8086/8088CPU

Page 24: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成现在有一个问题,现在有一个问题, 2020 根地址线需要一根地址线需要一

次提供次提供 2020 个信号,但是我们的计算机是个信号,但是我们的计算机是 1616位宽度,位宽度, 1616 位的位的 CPUCPU 宽度如何由宽度如何由 CPUCPU 提提供供 2020 位的地址信号呢?位的地址信号呢?

————————8086/8088CPU8086/8088CPU

16 位 ?20 位

Page 25: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成其实答案很简单,一个寄存器的宽度其实答案很简单,一个寄存器的宽度

是是 1616 位,两个寄存器不就是位,两个寄存器不就是 3232 为宽度了为宽度了吗吗我们没有用两位寄存器并在一起来提供我们没有用两位寄存器并在一起来提供 3232位的信号,而让一个位的信号,而让一个 2020 位的寄存器和一个位的寄存器和一个1616 为寄存器进行加法来得到一个为寄存器进行加法来得到一个 2020 位的地位的地址信号址信号

————————8086/8088CPU8086/8088CPU

Page 26: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成

————————8086/8088CPU8086/8088CPU

Page 27: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成

————————8086/8088CPU8086/8088CPU

Page 28: 第四章

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成我们把提供一个我们把提供一个 2020 位地址的两个寄存位地址的两个寄存

器中的值分别称之为:器中的值分别称之为:2020 位寄存器中的值称之为段基址(位寄存器中的值称之为段基址( Segment bSegment b

ase valuease value ))1616 位寄存器中的值称之为偏移量(位寄存器中的值称之为偏移量( OffsetOffset )或)或

有效地址有效地址 (Effective address)(Effective address)

段基址是由四个段寄存器提供段基址是由四个段寄存器提供 2020 位的高位的高 1616 位,位,低四位补低四位补 00 形成的形成的

偏移量是由偏移量是由 CPUCPU 内的内的 EUEU 部分提供的部分提供的————————8086/8088CPU8086/8088CPU

Page 29: 第四章

1.1. 段寄存器段寄存器2.2. 通用寄存器通用寄存器(( 11 )地址指针寄存器)地址指针寄存器(( 22 )数据寄存器)数据寄存器3.3. 用于控制的寄存器用于控制的寄存器(( 11 )指令指针)指令指针 IRIR

(( 22 )标志寄存器)标志寄存器 FRFR

————————8086/8088CPU8086/8088CPU

Page 30: 第四章

1.1. 段寄存器段寄存器————————8086/8088CPU8086/8088CPU

Page 31: 第四章

22 、通用寄存器(、通用寄存器( General RegisterGeneral Register )) (( 11 )地址寄存器()地址寄存器( Address Pointer Address Pointer

RegisterRegister )) 堆栈指针寄存器堆栈指针寄存器 SPSP 基址指针寄存器基址指针寄存器 BPBP 源变址寄存器 源变址寄存器 SISI 目的变址寄存器目的变址寄存器 DI DI

Page 32: 第四章

2.2. 通用寄存器通用寄存器

(( 22 )数据寄存器)数据寄存器AXAX ,, BXBX ,, CXCX ,, DDXX ————————8086/8088CPU8086/8088CPU

Page 33: 第四章

2.2. 通用寄存器通用寄存器 (( 11 )地址指针寄存)地址指针寄存器器(( 22 )数据寄存器)数据寄存器

————————8086/8088CPU8086/8088CPU

Page 34: 第四章

3.3. 用于控制的寄存器用于控制的寄存器 ---- (( 11 )指令指针)指令指针IRIR

————————8086/8088CPU8086/8088CPU

Page 35: 第四章

3.3. 用于控制的寄存器用于控制的寄存器(( 22 )标志寄存器)标志寄存器 FFRR

————————8086/8088CPU8086/8088CPU

Page 36: 第四章

3.3. 用于控制的寄存器用于控制的寄存器(( 22 )标志寄存器)标志寄存器 FRFR进位标志位进位标志位 CF(Carry Flag)CF(Carry Flag)奇偶标志位奇偶标志位 PF(Parity Flag)PF(Parity Flag)辅助进位标志位辅助进位标志位 (Auxiliary Flag)(Auxiliary Flag)零值标志位零值标志位 (Zero Flag)(Zero Flag)符号标志位符号标志位 SF(Sign Flag)SF(Sign Flag)溢出标志位溢出标志位 OF(Overflow Flag)OF(Overflow Flag)单步(跟踪)标志位单步(跟踪)标志位 TF(Trae Flag)TF(Trae Flag)中断标志位中断标志位 IF(Interrupt –enable Flag)IF(Interrupt –enable Flag)方向标志位方向标志位 DF(Direction Flag)DF(Direction Flag) ————————8086/8088CPU8086/8088CPU

Page 37: 第四章

4.24.2 、主存储器、主存储器4.2.14.2.1 8086/80888086/8088 主存储器的特点主存储器的特点4.2.24.2.2 主存储器的段结构主存储器的段结构4.2.34.2.3 逻辑地址与物理地址逻辑地址与物理地址

1.1. 逻辑地址逻辑地址2.2. 物理地址物理地址3.3. 逻辑地址的来源逻辑地址的来源

Page 38: 第四章

8086/80888086/8088 主存储器的特点主存储器的特点

Page 39: 第四章

8086/80888086/8088

主存储器的特

主存储器的特

点点

Page 40: 第四章

8086/80888086/8088 主存储器的特点主存储器的特点

Page 41: 第四章

8086/80888086/8088 主存储器的特点主存储器的特点

Page 42: 第四章

4.2.34.2.3 逻辑地址与物理地址逻辑地址与物理地址1.1. 逻辑地址逻辑地址 段基值:偏移量段基值:偏移量2.2. 物理地址物理地址 == 段基值左移段基值左移 44 位位 ++ 偏移量偏移量 == 段基值段基值 *10+*10+ 偏移量偏移量3.3. 逻辑地址的来源逻辑地址的来源

Page 43: 第四章

8086/80888086/8088 主存储器的特点主存储器的特点

Page 44: 第四章
Page 45: 第四章

4.34.3 8086/80888086/8088 堆栈堆栈4.3.14.3.1 堆栈组织堆栈组织 堆栈指针堆栈指针 SPSP 是是 1616 位的寄存器,所以堆位的寄存器,所以堆

栈的最大深度是栈的最大深度是 64k64k 个字节,最多存放个字节,最多存放 3232个字。个字。

8086/80888086/8088 堆栈规定以字(堆栈规定以字( 22 个字节)个字节)为单位进行存取,字数据在堆栈中的存放为单位进行存取,字数据在堆栈中的存放格式是底字节在低地址单元,高字节在高格式是底字节在低地址单元,高字节在高地址单元。地址单元。

Page 46: 第四章

4.3.24.3.2 堆栈操作堆栈操作 ::

STACK1 SEGMENT PARA STACK STACK1 SEGMENT PARA STACK

DB 40H DUPDB 40H DUP (( 00 )) STACK1 ENDSSTACK1 ENDS

::

1.1. 压栈压栈2.2. 出栈出栈

Page 47: 第四章

堆栈组织堆栈组织

Page 48: 第四章

11 、、压栈压栈 用压栈指令用压栈指令 PUSHPUSH 可以将通用寄存器、可以将通用寄存器、

段寄存器或字存储单元内容压入堆栈。段寄存器或字存储单元内容压入堆栈。 PUSH AXPUSH AX PUSH DSPUSH DS PUSH DATAWPUSH DATAW PUSHF PUSHF

Page 49: 第四章

22 、出栈、出栈 用弹出指令用弹出指令 POPPOP 可以将当前栈顶字单可以将当前栈顶字单

元内容取出送到通用寄存器、段寄存器或元内容取出送到通用寄存器、段寄存器或字存储单元中。字存储单元中。

POP AXPOP AX POP DSPOP DS POP DATAWPOP DATAW POPFPOPF

Page 50: 第四章

堆栈操作堆栈操作 --1.1. 压栈压栈 2.2. 出栈出栈

Page 51: 第四章

4.44.4 8086/80888086/8088 指令系统指令系统

4.4.1 8086/80884.4.1 8086/8088 寻址方式寻址方式 8086/80888086/8088 各指令中的操作数有各指令中的操作数有 44 种:种:

寄存器操作数、立即数操作数、存储寄存器操作数、立即数操作数、存储器操作数、器操作数、 I/OI/O 端口操作数。端口操作数。

Page 52: 第四章

11 、立即数寻址方式、立即数寻址方式 Immediate AddressinImmediate Addressingg

注:立即数经常用于给寄存器或存储单元赋注:立即数经常用于给寄存器或存储单元赋初值,并且只能作为源操作数、不能作目初值,并且只能作为源操作数、不能作目的操作数。的操作数。

例如:例如: MOV CXMOV CX ,, 0B3CAH0B3CAH MOV ALMOV AL ,, 2525 MOV BXMOV BX ,“,“ AB”AB” MOV AHMOV AH ,‘,‘ C’C’

Page 53: 第四章

立即数立即数寻址方式

Page 54: 第四章

11 、寄存器寻址方式、寄存器寻址方式 Register AssressinRegister Assressingg

例:例: MOV AXMOV AX ,, BXBX

操作码操作码 REGREG

R 操作数操作数

Page 55: 第四章

33 、存储器寻址方式、存储器寻址方式 在汇编语言程序中,一个存储单元的地在汇编语言程序中,一个存储单元的地

址采用逻辑地址来表示,其形式为:址采用逻辑地址来表示,其形式为: 段基址:偏移量段基址:偏移量 偏移量是指存放操作数的存储单元与段偏移量是指存放操作数的存储单元与段

起始地址(段基址)之间的字节距离,它起始地址(段基址)之间的字节距离,它由由 CPUCPU 的的 EUEU 按指令中操作数的寻址方式按指令中操作数的寻址方式计算而得到,又称为有效地址计算而得到,又称为有效地址 EAEA 。。

Page 56: 第四章

EAEA 是由三个地址分量的某种组合 求得是由三个地址分量的某种组合 求得的,它们分别是:的,它们分别是:

位移量:它是指令代码中的一个位移量:它是指令代码中的一个 88 位或位或 1616位二进制数。位二进制数。

基地址:即基址寄存器基地址:即基址寄存器 BXBX 或基址指针或基址指针 BPBP的内容。的内容。

变址量:即变址寄存器变址量:即变址寄存器 SISI 或或 DIDI 的内容。的内容。

Page 57: 第四章

(( 11 )直接寻址方式)直接寻址方式 Direct AddressingDirect Addressing ☻☻ 用数值地址表示用数值地址表示 例:例: MOV BXMOV BX ,, DS:[1000H]DS:[1000H] ☻☻ 用符号地址表示用符号地址表示 例:例: MOV BXMOV BX ,, VARVAR MOV DA_BYTEMOV DA_BYTE ,, 0FH0FH MOV CLMOV CL ,, DA+3DA+3上述三条指令分别 等价于:上述三条指令分别 等价于: MOV BXMOV BX ,, DS:VARDS:VAR MOV DS:DA_BYTEMOV DS:DA_BYTE ,, 0FH0FH MOV CLMOV CL ,, DS:DA+3DS:DA+3

Page 58: 第四章

3.3. 存储器寻址方式存储器寻址方式

直接寻址方式(直接寻址方式( Direct AddressDirect Address ))

Page 59: 第四章

(( 22 )寄存器间接寻址方式)寄存器间接寻址方式 例:例: MOV CHMOV CH ,, [SI][SI] MOV [DI]MOV [DI] ,, BXBX MOV ALMOV AL ,, [BX][BX] MOV CXMOV CX ,, [BP][BP]上述指令分别等价于:上述指令分别等价于: MOV CHMOV CH ,, DS:[SI]DS:[SI] MOV DS:[DI]MOV DS:[DI] ,, BXBX MOV ALMOV AL ,, DS:[BX]DS:[BX] MOV CXMOV CX ,, SS:[BP]SS:[BP]

Page 60: 第四章

寄存器间接寻址方式

寄存器间接寻址方式

Page 61: 第四章

(( 33 )变址寻址()变址寻址( Indexed AddressingIndexed Addressing )) 和基址(和基址( Based AddressingBased Addressing )) 其寻址方式使用的格式为:其寻址方式使用的格式为: MOV AXMOV AX ,, 10H[SI]10H[SI] MOV TABLE[DI]MOV TABLE[DI] ,, 12H12H MOV AXMOV AX ,, ARRY[BX]ARRY[BX] MOV TAB1[BP]MOV TAB1[BP] ,, CLCL上述指令分别等价于:上述指令分别等价于: MOV AXMOV AX ,, DS:10H[SI]DS:10H[SI] MOV DS:TABLE[DI]MOV DS:TABLE[DI] ,, 12H12H MOV AXMOV AX ,, DS:ARRY[BX]DS:ARRY[BX] MOV SS:TAB1[BP]MOV SS:TAB1[BP] ,, CL CL

Page 62: 第四章

变址寻址(

变址寻址(Indexed A

ddresssingIndexed A

ddresssing

))

和基址(

和基址(B

ased Addressing

Based A

ddressing

)寻址

)寻址

方式方式

Page 63: 第四章

用变址寻址方式访问一维数组

用变址寻址方式访问一维数组

Page 64: 第四章

(( 44 )基址变址寻址)基址变址寻址 指令所需的操作数在主存单元中,操作指令所需的操作数在主存单元中,操作

数的有效地址数的有效地址 EAEA 是三个地址分量之和,即是三个地址分量之和,即基址寄存器(基址寄存器( BXBX 或或 BPBP )内容、变址寄存)内容、变址寄存器(器( SISI 或或 DIDI )内容与指令中的位移量()内容与指令中的位移量( 88位或位或 1616 位)之和,称为基址变址寻址方式。位)之和,称为基址变址寻址方式。

Page 65: 第四章

基址变址寻址(基址变址寻址( Based Indexed AddressingBased Indexed Addressing ))

Page 66: 第四章

其使用格式为:其使用格式为: MOV AXMOV AX ,, 200H[BX][SI]200H[BX][SI] MOV TABLE[BX][DI]MOV TABLE[BX][DI] ,, 0FFH0FFH MOV AXMOV AX ,, ARRAY[BP][SI]ARRAY[BP][SI] MOV TAB1[BP][DI]MOV TAB1[BP][DI] ,, DLDL上述指令分别等价于:上述指令分别等价于: MOV AXMOV AX ,, DS:200H[BX][SI]DS:200H[BX][SI] MOV DS:TABLE[BX][DI]MOV DS:TABLE[BX][DI] ,, 0FFH0FFH MOV AXMOV AX ,, SS:ARRAY[BP][SI]SS:ARRAY[BP][SI] MOV SS:TAB1[BP][DI]MOV SS:TAB1[BP][DI] ,, DLDL

Page 67: 第四章

用基址变址寻址方式访问二维数组

用基址变址寻址方式访问二维数组

Page 68: 第四章
Page 69: 第四章

SI

DI

源串有效地址

目的串有效地址

串操作寻址方式串操作寻址方式

Page 70: 第四章

4.4.24.4.2 8086/80888086/8088 指令指令

按操作数地址个数:按操作数地址个数:1.1.双操作数指令双操作数指令 :OPR DEST,SRC:OPR DEST,SRC

2.2. 单操作数指令单操作数指令 :OPR DEST:OPR DEST

3.3.无操作数指令无操作数指令 :OPR:OPR

Page 71: 第四章

注意:在注意:在 8086/80888086/8088 指令系统中,除指令系统中,除串操作指令外其余所有指令最多只能串操作指令外其余所有指令最多只能有一个操作数存放在存储器中。对于有一个操作数存放在存储器中。对于双操作数指令而言,两个操作数不能双操作数指令而言,两个操作数不能同时是存储器操作数。同时是存储器操作数。

Page 72: 第四章

4.4.24.4.2 8086/80888086/8088 指令指令按功能来分:按功能来分:1.1. 传送类指令传送类指令 (Transfer instructions)(Transfer instructions)

2.2. 算术运算类指令算术运算类指令 (Arithmatic instructions)(Arithmatic instructions)

3.3. 位操作类指令位操作类指令 (Bit manipulation instructions)(Bit manipulation instructions)

4.4. 串操作类指令串操作类指令 (String instructions)(String instructions)

5.5. 程序转移类指令程序转移类指令 (Program transfer instructions)(Program transfer instructions)

6.6. 处理器控制类指令处理器控制类指令 (Processor control instruction(Processor control instructions)s)

Page 73: 第四章

一 传送类指令一 传送类指令 这类指令又可以分为这类指令又可以分为 44 种:数据传送指种:数据传送指

令,交换指令,标志位传送指令,地址传令,交换指令,标志位传送指令,地址传送指令。送指令。

1.1. 数据传送指令(数据传送指令( MoveMove )) 指令格式:指令格式: MOV DESTMOV DEST ,, SRCSRC 指令中只允许两个操作数的其中一个在主指令中只允许两个操作数的其中一个在主

存储器中,立即数不能直接送段寄存器,存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送段寄存器也不能之间直接传送

Page 74: 第四章

1.1. 数据传送指令数据传送指令

Page 75: 第四章
Page 76: 第四章

例:把例:把 DA_WORD1DA_WORD1 字单元的内容传送到字单元的内容传送到DA_WORD2DA_WORD2 字单元中,可用如下两条指字单元中,可用如下两条指令:令:

MOV AXMOV AX ,, DA_WORD1DA_WORD1 MOV DA_WORD2MOV DA_WORD2 ,, AXAX 例:把立即数例:把立即数 10A0H10A0H 传送给段寄存器传送给段寄存器 DSDS ,,

ESES ,可用以下,可用以下 33 条指令:条指令: MOV AXMOV AX ,, 10A0H10A0H MOV DSMOV DS ,, AXAX MOV ESMOV ES ,, AXAX

Page 77: 第四章

22 、交换指令、交换指令 指令格式:指令格式: XCHG DESTXCHG DEST ,, SRCSRC 指令功能:(指令功能:( DESTDEST ) () ( SRCSRC )) 注:交换指令不能使用段寄存器,也不能使注:交换指令不能使用段寄存器,也不能使

用立即数。用立即数。 例例 :: 要将两个字节存储单元要将两个字节存储单元 DAB1DAB1 、、 DAB2DAB2

的内容进行交换,可用以下的内容进行交换,可用以下 33 条指令来实现条指令来实现 :: MOV ALMOV AL ,, DAB1DAB1 XCHG ALXCHG AL ,, DAB2DAB2 MOV DAB1MOV DAB1 ,, AL AL

Page 78: 第四章

2.2. 交换指令(交换指令( XchangeXchange ))

Page 79: 第四章

3.3. 标志位传送类指令标志位传送类指令(( 11 )取标志指令)取标志指令 LAHFLAHF

指令格式:指令格式: LAHFLAHF

指令功能:指令功能: AH AH (( FRFR )) 7~07~0

Page 80: 第四章

(( 22 )取标志指令)取标志指令 SAHFSAHF

指令格式:指令格式: SAHFSAHF

指令功能:指令功能: FRFR7~07~0 AH AH

S

Page 81: 第四章

例:将标志位例:将标志位 SFSF ,, ZFZF置置 11 ,将,将 AAFF ,, PFPF ,, CFCF置置 00 ,可用以下两条,可用以下两条指令实现:指令实现:

MOV AHMOV AH ,, 11000000B11000000B SAHFSAHF

Page 82: 第四章

3.3. 标志位传送类指令标志位传送类指令(( 33 标志压栈指令标志压栈指令 PUSHF PUSHF (( Push FlagPush Flag ))

(( 44 )标志出栈指令)标志出栈指令 POPFPOPF (( Pop FlagPop Flag ))

Page 83: 第四章

4.4. 地址传送指令(地址传送指令( Address TransferAddress Transfer ))(( 11 )装入有效地址指令)装入有效地址指令 (Load Effective Address)(Load Effective Address)

指令格式:指令格式: LEA DESTLEA DEST ,, SRCSRC

指令的功能:指令的功能: DEST SRCDEST SRC 的的 EAEA

LEALEA 指令的源操作数必须是存储器操作数指令的源操作数必须是存储器操作数(可以是字节或字),而目的地址只能是(可以是字节或字),而目的地址只能是 1166 位通用寄存器名。位通用寄存器名。

Page 84: 第四章
Page 85: 第四章

(( 22 )装入地址指针指令)装入地址指针指令指令格式:指令格式: LDS DESTLDS DEST ,, SRCSRC

LES DESTLES DEST ,, SRCSRC

LESLES 与与 LDSLDS 功能类似,功能类似, 不同的只是用不同的只是用 ESES代替代替 DSDS

LDSLDS 指令功能:指令功能: DEST DEST (( SRCSRC )) DS DS (( SRC+2SRC+2 ))这两条指令中的源操作数必须是存储器操作数,这两条指令中的源操作数必须是存储器操作数,

源地址源地址 SRCSRC 给出给出 3232 位地址指针的首字节地位地址指针的首字节地址;而目的地址址;而目的地址 DESTDEST则只能是则只能是 1616 位通用位通用寄存器名。寄存器名。

Page 86: 第四章
Page 87: 第四章
Page 88: 第四章

2.2. 算术运算类指令算术运算类指令 (Arithmatic instru(Arithmatic instructions)ctions)

1.1.加法运算指令加法运算指令(( 11 )加法指令()加法指令( AdditionAddition ))指令格式:指令格式: ADD DEST , SRCADD DEST , SRC

指令功能:指令功能: DEST (SRC)+(DEST)DEST (SRC)+(DEST) 例例 4—8 4—8 加法指令的常用格式有:加法指令的常用格式有: ADD BX , SIADD BX , SI ADD DA_WORD , 0F8CHADD DA_WORD , 0F8CH ADD DL , TAB[BX]ADD DL , TAB[BX]

Page 89: 第四章
Page 90: 第四章

(( 22 )带进位加法指令()带进位加法指令( Add With CarrAdd With Carryy ))

指令格式:指令格式: ADC DEST , SRCADC DEST , SRC 指令功能:指令功能: DEST (SRC)+(DEST)+CFDEST (SRC)+(DEST)+CF ADCADC 指令主要用于大于指令主要用于大于 1616 位数的相加运算位数的相加运算 例例 4-9 4-9 有一个有一个 3232 位无符号数存放在位无符号数存放在 DXDX (高(高 1616 位)、位)、 AXAX (低(低 1616 位)中,若要加位)中,若要加上常数上常数 76F1A23H76F1A23H ,则用以下指令来实现:,则用以下指令来实现:

ADD AX , 1A23HADD AX , 1A23H ADC DX , 76FHADC DX , 76FH

Page 91: 第四章

(( 33 )加)加 11 指令(指令( Incremen)Incremen) 指令格式:指令格式: INC DESTINC DEST 指令功能:指令功能: DEST (DEST)+1DEST (DEST)+1 注:注: INCINC 指令不影响指令不影响 CFCF 标志位,它与标志位,它与 ADD DEST , 1ADD DEST , 1 不同,操作数被当作无符不同,操作数被当作无符号数,其操作数只能在通用寄存器或存储号数,其操作数只能在通用寄存器或存储单元中,不能是立即数。单元中,不能是立即数。

INCINC 指令主要用于计数器的计数或修改地指令主要用于计数器的计数或修改地址指针 址指针

Page 92: 第四章

例例 4-10 INC4-10 INC 指令的使用格式如下:指令的使用格式如下: INC CLINC CL INC DIINC DI INC COUNTINC COUNT

Page 93: 第四章

22 、减法运算指令、减法运算指令 (( 11 )减法指令()减法指令( SubtractionSubtraction )) 指令格式:指令格式: SUB DEST , SRCSUB DEST , SRC 指令功能:指令功能: DEST (DEST)-(SRC)DEST (DEST)-(SRC) 例例 4-11 SUB 4-11 SUB 指令的常用格式如下:指令的常用格式如下: SUB AL , 3FHSUB AL , 3FH SUB BX , AXSUB BX , AX SUB DAW , DXSUB DAW , DX

Page 94: 第四章

减法指令(减法指令( SubtractionSubtraction )) SUBSUB

Page 95: 第四章

减法的减法的 CFCF 值反映无符号数运算中的借值反映无符号数运算中的借位情况,因此当作为无符号数时,若位情况,因此当作为无符号数时,若

减数减数 >> 被减数,此时有借位,则被减数,此时有借位,则 CF=1;CF=1; 否否则则 CF=0CF=0 。或者也可以简单的用二进制减。或者也可以简单的用二进制减法运算中最高有效位向高位的进位情况来法运算中最高有效位向高位的进位情况来判别,有进位时判别,有进位时 CF=0,CF=0, 无进位时无进位时 CF=1CF=1 。。

减法的减法的 OFOF 位的设置方法为:若两个数位的设置方法为:若两个数的符号相反,而结果的符号与减数相同,的符号相反,而结果的符号与减数相同,则则 OF=1OF=1 ;除上述情况外;除上述情况外 OF=0OF=0 。。

Page 96: 第四章

例例 4-12 4-12 有有 22 个字节单元个字节单元 AA ,, BB ,可用以,可用以下指令实现(下指令实现( AA )) -- (( BB ) ) AA ::

MOV AL , BMOV AL , B SUB A , ALSUB A , AL (( 22 )带借位减法指令)带借位减法指令 (( Subtract With BorrowSubtract With Borrow )) 指令格式:指令格式: SBB DEST , SRCSBB DEST , SRC 指令功能:指令功能: DEST DEST ←(←(DEST)-(SRC)-CFDEST)-(SRC)-CF

Page 97: 第四章

(( 33 )减)减 11 指令(指令( DecrementDecrement )) 指令格式:指令格式: DEC DESTDEC DEST 指令功能:指令功能: DEST (DEST) - 1DEST (DEST) - 1减减 11 指令也不影响指令也不影响 CFCF ,且被当作无符号数。,且被当作无符号数。

其操作数只能在通用寄存器或存储器中,其操作数只能在通用寄存器或存储器中,不能是立即数。不能是立即数。

Page 98: 第四章

(( 44 )求负数指令()求负数指令( NegativeNegative )) 指令格式:指令格式: NEG DESTNEG DEST 指令功能:指令功能: DEST 0 - (DEST)DEST 0 - (DEST) NEGNEG 指令属单操作数指令,操作数可以是指令属单操作数指令,操作数可以是

字节或字,且被当作补码表示的带符号数。字节或字,且被当作补码表示的带符号数。其操作数只能在通用寄存器或存储单元中,其操作数只能在通用寄存器或存储单元中,不能是立即数。不能是立即数。

如操作数为零,求负的结果仍为零,则标如操作数为零,求负的结果仍为零,则标志位志位 CFCF 置置 00 ,否则,否则 CFCF 置置 11 。。

Page 99: 第四章

例例 4 -13 4 -13 设设 ALAL 中存放一正数:中存放一正数: (( ALAL )) =25H=00100101B=25H=00100101B 。。 BLBL 中存放中存放负数负数 - 58H- 58H 的补码的补码 :(BL)=A8H=10101000B.:(BL)=A8H=10101000B.

可用以下指令获得可用以下指令获得 AL,BLAL,BL 中数的负数:中数的负数: NEG ALNEG AL NEG BLNEG BL 以上指令执行后,以上指令执行后, ALAL 中为负数中为负数 -25H-25H 的补的补

码,(码,( ALAL )) =DBH=11011011B=DBH=11011011B 。。 BLBL 中中则为正数,(则为正数,( BLBL )) =58H=01011000B=58H=01011000B 。。

Page 100: 第四章

例例 4-14 4-14 在在 DAW+2DAW+2 、、 DAWDAW 字单元存放字单元存放有一个有一个 3232 为带符号数,为带符号数, DAWDAW 中存放的是中存放的是低低 1616 位。求这个数的负数并存入原单元中,位。求这个数的负数并存入原单元中,可用以下指令:可用以下指令:

NEG DAWNEG DAW MOV AL , 0MOV AL , 0 SBB AX , DAW+2SBB AX , DAW+2 MOV DAW+2 , AX MOV DAW+2 , AX

Page 101: 第四章

(( 55 )比较指令()比较指令( CompareCompare )) 指令格式:指令格式: CMP DEST , SRCCMP DEST , SRC 指令功能:(指令功能:( DESTDEST )) - - (( SRCSRC ),两),两

个操作数相减后,仅按相减结果设置标志个操作数相减后,仅按相减结果设置标志位位 OFOF ,, SFSF ,, ZFZF ,, AFAF ,, PFPF ,, CFCF ,而,而不保留两数相减的差。不保留两数相减的差。

例如: 例如: CMP AL , 0CMP AL , 0 CMP CX , VARCMP CX , VAR CMP [DI] , BXCMP [DI] , BX

Page 102: 第四章

3.3.乘法指令乘法指令(( 11 )无符号数乘法指令)无符号数乘法指令 MULMUL

指令格式:指令格式: MUL OPRDMUL OPRD

其中(其中( OPRDOPRD )是乘法运算的一个操作数,它只)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中。另一个操作数能在通用寄存器或存储单元中。另一个操作数隐含在隐含在 ALAL 或或 AXAX 寄存器中。乘法运算得到的双寄存器中。乘法运算得到的双倍长的乘积隐含的存放在倍长的乘积隐含的存放在 AXAX 或或 DX:AXDX:AX 中。中。

字节无符号数相乘:字节无符号数相乘: AX AX (( OPRD)*(AL)OPRD)*(AL)

字无符号数相乘:字无符号数相乘: DX:AX (OPRD)*(AX)DX:AX (OPRD)*(AX)

Page 103: 第四章

乘法指令乘法指令

Page 104: 第四章

MULMUL 指令只影响标志寄存器中指令只影响标志寄存器中 CFCF ,,OFOF 标志位,标志位, MULMUL 指令执行后,如果指令执行后,如果 AHAH(字节乘法)或(字节乘法)或 DXDX (字乘法)为全“(字乘法)为全“ 0”0” ,,则则 CF=0CF=0 和和 OF=0;OF=0; 否则否则 CF=1,OF=1CF=1,OF=1 (表(表示示 AHAH 或或 DXDX 中有乘积的有效数字)中有乘积的有效数字)

例例 4 – 15 4 – 15 两个字节存储单元两个字节存储单元 DAB1DAB1 、、 DADAB2B2 内容相乘,乘积放在内容相乘,乘积放在 PROCPROC 中,可用以中,可用以下指令实现:下指令实现:

MOV AL , DAB2MOV AL , DAB2 MUL DAB1MUL DAB1 MOV PROC , AXMOV PROC , AX

Page 105: 第四章

(( 22 )带符号数乘法指令)带符号数乘法指令 指令格式:指令格式: IMUL OPRDIMUL OPRD该指令中的操作数及乘积均带符号且用补该指令中的操作数及乘积均带符号且用补

码表示,除此之外其余操作与码表示,除此之外其余操作与 MULMUL 指令完指令完全相同。全相同。

注:如果乘积的高一半即注:如果乘积的高一半即 AHAH 或或 DXDX 是低一是低一半半 AL AL 或或 AXAX 的符号扩展,则的符号扩展,则 CF=0CF=0 ,, OFOF=0=0否则否则 CF=1CF=1 ,, OF=1OF=1 。。

Page 106: 第四章

44 、除法指令、除法指令 (( 11 )无符号数除法指令)无符号数除法指令 指令格式:指令格式: DIV OPRDDIV OPRD OPRDOPRD 只能在通用寄存器或存储单元中只能在通用寄存器或存储单元中 字节除法:字节除法: AL AL ←← (( AXAX )) / OPRD/ OPRD 字除法:字除法: AX AX ←← (( DX:AXDX:AX )) // (( OPROPR

DD ))

Page 107: 第四章

除法指令除法指令

Page 108: 第四章

(( 22 )带符号数除法指令)带符号数除法指令 指令格式:指令格式: IDIV OPRDIDIV OPRD该指令中的操作数、商及余数均带符号且该指令中的操作数、商及余数均带符号且

用补码表示,除此之外,其余操作与用补码表示,除此之外,其余操作与 DIVDIV指令完全相同。指令完全相同。

注:余数的符号与被除数相同,商的符号注:余数的符号与被除数相同,商的符号与除数相同。与除数相同。

Page 109: 第四章

(( 33 )字节)字节 // 字符号扩展指令字符号扩展指令 指令格式指令格式 :: CBW CBW 扩展扩展 ALAL 中的符号位至中的符号位至 AHAH 中中 CWD CWD 扩展扩展 AXAX 中的符号位至中的符号位至 DXDX 中中

Page 110: 第四章

例例 4 -16 4 -16 两个两个 88 位带符号数分别放在位带符号数分别放在 BYTBYTE1E1

BYTE2BYTE2 字节存储单元中,将字节存储单元中,将 BYTE1BYTE1 内容内容除以除以 BYTE2BYTE2 内容,商放在内容,商放在 QUOTQUOT 字节单字节单元中,可用以下指令实现:元中,可用以下指令实现:

MOV AL , BYTE1MOV AL , BYTE1 CBW CBW IDIV BYTE2IDIV BYTE2 MOV QUOT , AL MOV QUOT , AL

Page 111: 第四章

55 、、 BCDBCD 码校正指令码校正指令 8086/80888086/8088 指令系统把指令系统把 BCDBCD 码分为码分为 22

种格式:组合型(压缩型、装配型、种格式:组合型(压缩型、装配型、 PACPACKEDKED )和非组合型(非压缩型、拆散型、)和非组合型(非压缩型、拆散型、UPACKEDUPACKED )。)。

组合型:组合型: 11 个字节表示个字节表示 22 个个 BCDBCD 码,即两码,即两位十进制数。位十进制数。

非组合型:非组合型: 11 个字节的低个字节的低 44 位表示一个位表示一个 BCBCDD 码,高码,高 44 位通常为“位通常为“ 0000”0000” 或“或“ 0011”0011”等,它对这字节所表示的十进制数无影响。等,它对这字节所表示的十进制数无影响。

Page 112: 第四章

(1)(1)非组合型加法校正指令非组合型加法校正指令(( ASCII Adjust for AdditionASCII Adjust for Addition ))指令格式:指令格式: AAAAAA指令功能:指令功能:若若 ALAL 中低中低 44 位的值位的值≤≤ 99,且,且 AF=0,AF=0, 那末将那末将 ALAL中高中高 44位清零,位清零, AFAF和和 CFCF 置“置“ 0”0” 若若 ALAL中低中低 44位的值位的值 >9>9,或,或 AF=1,AF=1, 那末那末 AL←AL←(( ALAL)) +6+6,, AH←AH←(( AH)+1,AH)+1,且将且将 ALAL中高中高 44位清零,位清零, AFAF 和和 CFCF 置“置“ 1” 1”

Page 113: 第四章

例如从键盘直接输入例如从键盘直接输入 22 个个 11 位十进制数,位十进制数,然后相加,其结果在然后相加,其结果在 AHAH ,, ALAL 中,实现这中,实现这个操作的程序段如下:个操作的程序段如下:

MOV AH , 1MOV AH , 1 INT 21HINT 21H MOV BL , ALMOV BL , AL MOV AH , 1MOV AH , 1 INT 21HINT 21H ADD AL , BLADD AL , BL AAAAAA

Page 114: 第四章

P147 P147 三种 情况三种 情况

Page 115: 第四章

(( 22 )组合型加法校正指令)组合型加法校正指令 DAADAA 指令格式:指令格式: DAADAA 指令功能:指令功能:如果如果 ALAL 中低中低 44 位位 >9>9 或或 AF=AF=

1,1, 那末那末 ALAL←← (AL)+6 , AF=1 (AL)+6 , AF=1 。。 如果如果 ALAL 中低中低 44 位位 >9>9 或或 AF=1,AF=1, 那末那末 ALAL←← (AL)+60H , (AL)+60H , CF=1CF=1 。。

Page 116: 第四章

例如实现例如实现 22 个个 44 位十进制数的加法位十进制数的加法 4678+25564678+2556 ,,结果存放在结果存放在 DXDX 中可编制如下程序段:中可编制如下程序段:

MOV AL ,78HMOV AL ,78H ADD AL, 56HADD AL, 56H DAADAA MOV DL , ALMOV DL , AL MOV AL , 46HMOV AL , 46H ADC AL , 78HADC AL , 78H DAADAA MOV DH , ALMOV DH , AL

Page 117: 第四章

(( 33 )非组合型减法校正指令)非组合型减法校正指令 AASAAS 指令格式:指令格式: AASAAS 指令功能:指令功能:若若 ALAL 中低中低 44 位的值位的值≤≤ 99,且 ,且

AF=0,AF=0, 那末将那末将 ALAL中高中高 44位清零位清零 AFAF和和 CFCF 置“置“ 0”0” 若若 ALAL中中低低 44 位的值位的值 >>9,9, 或 或 AF=0,AF=0, 那末那末 AL←(AL)-6AL←(AL)-6 和和 AH←(AH)-1AH←(AH)-1 ,且,且 将将 ALAL中高中高 44位清 零位清 零 AFAF和和 CFCF 置“置“ 1”1”

Page 118: 第四章

(( 44 )组合型减法校正指令)组合型减法校正指令 指令格式:指令格式: DASDAS 指令功能:指令功能:☻若☻若 ALAL 中低中低 44 位位 >9>9 或或 AF=1,AF=1, 那末那末 AL←(AL)-6AL←(AL)-6 ,, AFAF置置

““ 1”1” ☻ ☻若若 ALAL 中高中高 44 位位 >9>9 或或 CF=1,CF=1, 那末那末 AL←(AL)-60HAL←(AL)-60H CFCF “置“置 1”1”

Page 119: 第四章

三、位操作类指令三、位操作类指令 11 、逻辑运算、逻辑运算 ☻☻ 逻辑与指令 逻辑与指令 AND DEST , SRCAND DEST , SRC 指令功能:指令功能: DEST ←(SRC)/\(DEST)DEST ←(SRC)/\(DEST) ☻☻ 逻辑或指令 逻辑或指令 OR DEST , SRCOR DEST , SRC 指令功能:指令功能: DEST ←(SRC)\/(DEST)DEST ←(SRC)\/(DEST) ☻☻ 逻辑异或指令 逻辑异或指令 XOR DEST , SRCXOR DEST , SRC 指令功能:指令功能: DEST ←(SRC)○(DEST)DEST ←(SRC)○(DEST) ☻☻ 逻辑或指令 逻辑或指令 NOT DEST NOT DEST 指令功能:指令功能: DEST ←-(DEST)DEST ←-(DEST)

Page 120: 第四章

这些指令常用于对操作数的某些位进行分这些指令常用于对操作数的某些位进行分离、组合或设置,例如:离、组合或设置,例如:

AND AL , 0F0H;AND AL , 0F0H; 分离出分离出 ALAL 中的高中的高 44 位位 OR AL , 80H;OR AL , 80H; 将将 ALAL 中的最高位置“中的最高位置“ 1”1” XOR AX , AX ;XOR AX , AX ; 将将 AXAX 中的内容清零中的内容清零 XOR AL , 01H ;XOR AL , 01H ; 将将 ALAL 中最低位变反中最低位变反

Page 121: 第四章

例例 4-17 4-17 可用以下程序段实现将标志寄存器可用以下程序段实现将标志寄存器的第的第 88 位位 TFTF 位置“位置“ 1”1”

PUSHFPUSHF POP AXPOP AX OR AX , 100HOR AX , 100H PUSH AXPUSH AX POPFPOPF

Page 122: 第四章

22 、测试指令(、测试指令( TestTest )) 指令格式:指令格式: TEST DEST , SRCTEST DEST , SRC 指令功能:(指令功能:( SRCSRC )) /\/\ (( DESTDEST )) , , 仅影仅影响标志位响标志位 SF SF ,, ZFZF ,, PFPF

例要测试例要测试 ALAL 第第 33 位的状态,用指令位的状态,用指令 TEST AL , 08HTEST AL , 08H

Page 123: 第四章

33 、移位、移位 //循环移位指令循环移位指令 移位指令分为算术移位指令、逻辑移位指移位指令分为算术移位指令、逻辑移位指

令和循环移位指令。令和循环移位指令。 (( 11 )算术移位指令)算术移位指令 指令格式:算术左移指令格式:算术左移 SAL DEST,COUNTSAL DEST,COUNT 算术右移算术右移 SAR DEST,COUNTSAR DEST,COUNT

Page 124: 第四章
Page 125: 第四章

例如例如 :(AL)=11000001B:(AL)=11000001B (( - 63- 63 的补码),的补码),BLBL 中为中为 (BL)=10111111B(BL)=10111111B (负数(负数 - 65- 65 的的补码)。补码)。

SAL AL , 1 (AL)=10000010BSAL AL , 1 (AL)=10000010B SAL BL , 1 (BL)=01111110BSAL BL , 1 (BL)=01111110B ,溢出,溢出 例:例: (AL)=10110110B(AL)=10110110B 。。 SAR AL , 1 (AL)=11011011SAR AL , 1 (AL)=11011011

Page 126: 第四章

例例 4-19 AX4-19 AX 中已存放一个带符号数,若要中已存放一个带符号数,若要完成完成 (AX)*3/2(AX)*3/2 运算,可用以下程序段实现:运算,可用以下程序段实现:

MOV DX , AXMOV DX , AX SAL AX , 1SAL AX , 1 ADD AX , DX ADD AX , DX SAR AX , 1SAR AX , 1

Page 127: 第四章

(( 22 )逻辑移位指令)逻辑移位指令 指令格式:逻辑左移指令格式:逻辑左移 SHL DEST,COUNTSHL DEST,COUNT 逻辑右移逻辑右移 SHR DEST,COUNTSHR DEST,COUNT 逻辑移位与算数移位的不同点是:逻辑移位与算数移位的不同点是: 11 、逻辑移位用于无符号数的简单乘除运算、逻辑移位用于无符号数的简单乘除运算 算数移位用于带符号数的简单乘除运算算数移位用于带符号数的简单乘除运算 22 、右移指令时算术运算符号为不变,逻辑、右移指令时算术运算符号为不变,逻辑

移位所有的位都参与移动最高位补零移位所有的位都参与移动最高位补零

Page 128: 第四章

3.3. 位操作类指令位操作类指令 (Bit manipulation in(Bit manipulation instructions)structions)

Page 129: 第四章

例例 4-20 4-20 要求把由要求把由 CLCL 中的数(中的数( 0~150~15 )所)所指定指定 AXAX 中的位分离出来,可用以下程序段中的位分离出来,可用以下程序段实现:实现:

MOV BX , 1MOV BX , 1 SHL BX , CLSHL BX , CL AND AX , BXAND AX , BX

Page 130: 第四章

(( 33 )循环移位指令)循环移位指令 指令格式:指令格式:循环左移指令循环左移指令 ROL DEST,COUNTROL DEST,COUNT循环右移指令循环右移指令 ROR DEST,COUNTROR DEST,COUNT带进位循环左移指令带进位循环左移指令 RCL DEST,COUNTRCL DEST,COUNT带进位循环右移指令带进位循环右移指令 RCR DEST,COUNTRCR DEST,COUNT

Page 131: 第四章

3.3. 位操作类指令位操作类指令 (Bit manipulation in(Bit manipulation instructions)structions)

Page 132: 第四章

例例 4-21 4-21 由由 33 个字构成的一个无符号数从个字构成的一个无符号数从高位到底位依次存放在高位到底位依次存放在 M+4M+4 ,, M+2M+2 ,, MM字单元中,若要将该数右移一位,则可用字单元中,若要将该数右移一位,则可用以下程序段:以下程序段:

SHR M+4 , 1SHR M+4 , 1 RCR M+2 , 1RCR M+2 , 1 RCR M , 1RCR M , 1

Page 133: 第四章

四四 .. 串操作类指令串操作类指令 (String instruction(String instructions)s)

1.1. 取串指令(取串指令( Load StringLoad String )) LODSLODS 指令格式:指令格式: LODS LODS 源串源串 指令功能:将源串中的一个字或字节内容指令功能:将源串中的一个字或字节内容 送入送入 AXAX 或或 ALAL ,同时按照,同时按照 DFDF 修修 改改 SISI 。。 LODSBLODSB LODSWLODSW

Page 134: 第四章

2.2. 存串指令(存串指令( Store StringStore String )) STOSSTOS

指令格式:指令格式: STOS STOS 目的串目的串 或 或 STOSBSTOSB

STOSWSTOSW

3.3.串传送指令(串传送指令( Move StringMove String )) MOVSMOVS

指令格式:指令格式: MOVS MOVS 目的串,源串目的串,源串 或 或 MOVSBMOVSB

MOVSWMOVSW

Page 135: 第四章

4.4.串比较指令(串比较指令( Compare StringCompare String ))指令格式:指令格式: CMPS CMPS 源串,目的串源串,目的串 或或 CMPSBCMPSB CMPSWCMPSW5.5.串搜索指令(串搜索指令( Scan String )Scan String )指令格式:指令格式: SCAS SCAS 目的串目的串 或 或 SCASBSCASB SCASWSCASW

Page 136: 第四章

6.6. 重复前缀指令(重复前缀指令( RepeatRepeat )) 重复前缀指令共有重复前缀指令共有 33 条:条: (( 11 )指令格式:)指令格式: REPREP (( 22 )指令格式:)指令格式: REPEREPE 或或 REPZREPZ (( 33 )指令格式:)指令格式: REPNEREPNE 或或 REPNZREPNZ

Page 137: 第四章

例如:例如: REP MOVSBREP MOVSB假设假设 DF=0DF=0 ,, (SI)=0020H(SI)=0020H ,, (DI)=0100H(DI)=0100H ,,

(CX)=0030H(CX)=0030H ,执行如下程序段:,执行如下程序段: MOV SI , 0020HMOV SI , 0020H MOV DI , 0100HMOV DI , 0100H MOV CX , 0030HMOV CX , 0030HLOPLOP :: MOV AL , [SI]MOV AL , [SI] MOV ES:[DI] , ALMOV ES:[DI] , AL INC SIINC SI INC DIINC DI LOOP LOPLOOP LOP

Page 138: 第四章

五、处理器控制指令五、处理器控制指令 11 、标志位操作指令、标志位操作指令 (( 11 )清除进位标志指令)清除进位标志指令 CLC CLC 置 置 CF=0CF=0 (( 22 )进位标志置位指令)进位标志置位指令 STC STC 置置 CF=1CF=1 (( 33 )进位标志取反指令)进位标志取反指令 CMC CFCMC CF 取反取反

Page 139: 第四章

(( 44 )清除方向标志指令)清除方向标志指令 CLD CLD 置置 DF=0DF=0 (( 55 )方向标志置位指令)方向标志置位指令 STD STD 置置 DF=1DF=1 (( 66 )清除中断标志指令)清除中断标志指令 CLI CLI 置置 IF=0IF=0 (( 77 )中断标志置位指令)中断标志置位指令 STI STI 置置 IF=1IF=1

Page 140: 第四章

22 、与外部事件同步的指令、与外部事件同步的指令 (( 11 )) HLT HLT 停机指令停机指令 (( 22 )) WAIT WAIT 等待指令等待指令 (( 33 )) ESCESC 是外部协处理器的前缀是外部协处理器的前缀 (( 44 )) LOCKLOCK 是总线封锁前缀指令是总线封锁前缀指令 33 、空操作指令、空操作指令 指令格式:指令格式: NOPNOP