第四章 典型 cpu 及指令系统举例

92
第第第 第第第 第第 第第 CPU CPU 第第第第 第第 第第第第 第第

Upload: stacey

Post on 23-Jan-2016

144 views

Category:

Documents


0 download

DESCRIPTION

第四章 典型 CPU 及指令系统举例. 学习内容:. 4 . 1 8086/8088 CPU 的结构 4 . 2 主存储器 4 . 3 8086/8088 堆栈 4 . 4 8086/8088 指令系统 4 . 5 提高 CPU 性能的一些措施. 学习目标. 理解 8086/8088CPU 的寄存器结构、主存储器、堆栈结构。 掌握 8086/8088 指令系统的寻址方式。 (本章的重点内容) 理解 8086/8088 指令类型。 了解提高 CPU 性能的一些措施与当前常用的实际 CPU 基本组成。. 重点难点: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章   典型 CPU 及指令系统举例

第四章 第四章 典型 典型 CPUCPU 及指令系统举例及指令系统举例

Page 2: 第四章   典型 CPU 及指令系统举例

学习内容:学习内容:

4 . 1 8086/8088 CPU 的结构4 . 2 主存储器4 . 3 8086/8088 堆栈4 . 4 8086/8088 指令系统4 . 5 提高 CPU 性能的一些措施

Page 3: 第四章   典型 CPU 及指令系统举例

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

储器、堆栈结构。掌握 8086/8088 指令系统的寻址方式。

(本章的重点内容)理解 8086/8088 指令类型。了解提高 CPU 性能的一些措施与当前常

用的实际 CPU 基本组成。

Page 4: 第四章   典型 CPU 及指令系统举例

重点难点:8086/8088 指令系统的寻址方式。

课时安排: 6 课时。

媒体使用:使用多媒体投影,主要采用 PowerPoint

准备的电子教案。

Page 5: 第四章   典型 CPU 及指令系统举例

§4.1 8086/8088CPU§4.1 8086/8088CPU§4.1.1 8086/8088CPU 的结构1. 8086/8088 内部结构:8086/8088CPU 采用指令流水线结构,将

取指令(或取操作数)与执行指令的功能分别由两个独立部件实现,

即总线接口部件 BIU 与执行部件 EU

主要任务是完成 CPU与主存储器或 I/O 之间的信息传送。

主要任务是执行指令

Page 6: 第四章   典型 CPU 及指令系统举例

1 、执行部件 EU :包括一个 16 位算术逻辑部件ALU 、一组通用寄存器、暂存器、标志寄存器和EU 控制器。

2 、 EU 主要任务是执行指令。

3 、执行部件 EU 功能见教材 P114 。

Page 7: 第四章   典型 CPU 及指令系统举例

总线接口部件 BIU 见教材 P115 。1 、总线接口部件 BIU :包括一段寄存器、指令指针、 6 字节的指令队列、 20 位总线地址形成部件和总线控制逻辑。

2 、 BIU 主要任务是完成 CPU 与主存储器或I/O 端口之间的信息传送。

3 、总线接口 BIU 功能见教材 P115 。

Page 8: 第四章   典型 CPU 及指令系统举例

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

段基值:在 BIU 中设置段寄存器,用以存放 20 位段起始地址的高 16 位,称为段基值。

偏移量:由 EU 或指令指针 IP 提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。( 16 位)

段基址:由段基值左移 4 位后,得到一个物理地址。

二者相加形成 20 位主存单元的物理地址。

Page 9: 第四章   典型 CPU 及指令系统举例

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

Page 10: 第四章   典型 CPU 及指令系统举例

2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成我们把提供一个 20 位地址的两个寄存器中的值分别称之为:

20 位寄存器中的值称之为段基址( Segment base value )

16 位寄存器中的值称之为偏移量( Offset )或有效地址 (Effective address)

段基址是由四个段寄存器提供 20 位的高 16 位,低四位补 0 形成的

偏移量是由 CPU 内的 EU 部分提供的

Page 11: 第四章   典型 CPU 及指令系统举例

§4.1. 8086/8088§4.1. 8086/8088 寄存器寄存器 1. 段寄存器: CS (代码段寄存器)——用来存放程序的指

令代码序列,用来存放当前代码段段首址的高16 位,即段基值。

DS (数据段寄存器)——存放程序的有关数据,用来存放当前数据段的段基值。

SS (堆栈段寄存器)——用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。

ES (附加段寄存器)——存放运算结果或辅助数据,存放当前附加段的段基值。

Page 12: 第四章   典型 CPU 及指令系统举例

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

Page 13: 第四章   典型 CPU 及指令系统举例

2 . 通用寄存器( 1 )地址指针寄存( 2 )数据寄存器3. 用于控制的寄存器( 1 )指令指针 IP :( 2 )标志寄存器 FR

进位标志位 CF 奇偶标志位 PF

辅助进位标志位 AF 零值标志位 ZF

符号标志位 SF 溢出标志位 OF

单步(或跟踪)标志位 TF 中断标志位 IF

方向标志位 DF

作用类似于 PC ,当现行指令执行完毕,由 IP 提供下一条指令地址

Page 14: 第四章   典型 CPU 及指令系统举例

§4.2 §4.2 主存储器主存储器§4.2.1 8086/8088§4.2.1 8086/8088 主存储器的特点主存储器的特点 8086/8088CPU 有 20 条地址引出线,因此具

有 1M 字节( 210*210=220 )的寻址能力,即可以在 1M 个字节单元中寻找出所需的一个存储单元。

在 8086/8088 主存中,一个字节数据占用一个存储单元。一个字( Word )数据( 16位)则占用二个相邻的存储单元,数的低 8位(低字节)存放在低地址单元;高 8 位(高字节)存放在高地址单元,并以低字节所在存储单元地址作为字数据的单元地址。

Page 15: 第四章   典型 CPU 及指令系统举例

§4.2.2 §4.2.2 主存储器的段结构主存储器的段结构

8086/8088 把 1MB 主存空间按需要划分为若干段( segment )。每个段都由连续的字节单元组成,最大长度为 64K(即 65536 ),可作为独立寻址的逻辑单位。

一个段起始单元的地址,称为对应段的段基址( 20 位)。

Page 16: 第四章   典型 CPU 及指令系统举例

§4.2.2 §4.2.2 主存储器的段结构主存储器的段结构

在程序中设置的段称为逻辑段。

主存可分成任意多个段,但在某一时刻,一个程序只能访问 4 个段寄存器指向的当前段的内容。 4 个段寄存器 CS 、 DS 、 SS 和 ES ,分别保存代码段、数据段、堆栈段和附加段这 4 个当前段的段基址的高 16 位——段基值。

Page 17: 第四章   典型 CPU 及指令系统举例

§4.2.3 §4.2.3 逻辑地址与物理地址逻辑地址与物理地址 逻辑地址——段基值:偏移量(书写形式)( 1 ) 段基值:由某个段寄存器( CS,DS,SS,E

S )给出,它是段基址的高 16 位。( 2 ) 偏移量:(也称偏移地址)由 IP 或 EU

按寻址方式产生的有效地址提供,它是段内某存储单元与段基址之间的字节距离。

物理地址——是指实际的 20 位主存单元地址,1MB 主存空间的每个存储单元只对应惟一的物理地址,其范围为 00000H—FFFFFH 。

Page 18: 第四章   典型 CPU 及指令系统举例

逻辑地址——物理地址的转换方式: 将段基值左移 4 位形成 20 位段基址,再

加上偏移量,产生 20 位物理地址。

逻辑地址的来源CPU 在执行指令时,是按指令所需的操作类型从不同的来源获得存储单元的逻辑地址,然后形成对应的物理地址以访问主存。(具体内容见教材的 P124表 4-2 逻辑地址的来源)

Page 19: 第四章   典型 CPU 及指令系统举例

§4.3 8086/8088§4.3 8086/8088 堆栈堆栈

§4.3.1 §4.3.1 堆栈组织堆栈组织8086/80888086/8088的堆栈是由的堆栈是由 SSSS指定的一段存指定的一段存

储区(≤储区(≤ 64KB64KB)构成,并采用向上)构成,并采用向上(地址码减小)生成方式,由堆栈指针(地址码减小)生成方式,由堆栈指针SPSP 指向栈顶。指向栈顶。

SSSS提供堆栈段的段基值,提供堆栈段的段基值, SPSP 的内容为的内容为栈顶单元相对堆栈段段基址的字节距离栈顶单元相对堆栈段段基址的字节距离(偏移量)。(偏移量)。

8086/80888086/8088堆栈规定以字(堆栈规定以字( 22个字节)个字节)为单位进行存取。为单位进行存取。

Page 20: 第四章   典型 CPU 及指令系统举例

§4.3.2 堆栈操作

堆栈组织堆栈组织

Page 21: 第四章   典型 CPU 及指令系统举例

§4.3.2 §4.3.2 堆栈操作堆栈操作 先设置堆栈,主要是对堆栈段寄存器先设置堆栈,主要是对堆栈段寄存器 SSSS

物堆栈指针物堆栈指针 SPSP 赋初值。赋初值。

对堆栈的操作均在栈顶进行的,其基本对堆栈的操作均在栈顶进行的,其基本操作的操作的压栈压栈出栈出栈

Page 22: 第四章   典型 CPU 及指令系统举例

压 栈压 栈 压栈压栈 -------- 用压栈指令用压栈指令 PUSHPUSH 可以将通用寄可以将通用寄

存器、段寄存器或字存储单元内容压入堆存器、段寄存器或字存储单元内容压入堆栈。栈。

执行压栈指令执行压栈指令 PUSHPUSH 的操作过程分二步的操作过程分二步进行:进行:

(( 11 )()( SPSP )) -2——SP-2——SP ;首先修改栈顶指;首先修改栈顶指针,针, SPSP减减 22 以指向空字单元(即新栈以指向空字单元(即新栈顶)顶)

(( 22 )数据——()数据——( SPSP );将寄存器或存储);将寄存器或存储单元内容送入单元内容送入 SPSP 指向的空字单元中指向的空字单元中

Page 23: 第四章   典型 CPU 及指令系统举例

(AL)=34H

(AH)=12H

(BH)=56H

(BL)=78H

BX

AX

56 78

12 34(SP)-

2→SP ;(AX) →(SP)

压栈之前 (SP)

(SP)-2→SP;(BX) →(SP)

压栈指令

Page 24: 第四章   典型 CPU 及指令系统举例

出栈出栈 出栈 ---- 用弹出指令 POP 可以将当前栈顶字

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

执行出栈指令 POP 的操作过程分二步进行:( 1 )(( SP ))——寄存器 / 字单元;将栈顶

单元内容送到指定的寄存器或字单元( 2 )( SP ) +2——SP ;修改栈顶指针, SP

加 2 以指向新栈顶

Page 25: 第四章   典型 CPU 及指令系统举例

BX

AX

56 78

12 34

(BL)=78H

(BH)=56H

(AL)=34H

(AH)=12H

(SP) →BX;(SP)+2→SP

(SP) →AX;(SP)+2→SP

出栈之后 (SP)AX

BX

Page 26: 第四章   典型 CPU 及指令系统举例

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

Page 27: 第四章   典型 CPU 及指令系统举例

§4.4 8086/8088§4.4 8086/8088 指令系统指令系统§4.4.1 8086/8088§4.4.1 8086/8088 寻址方式寻址方式1 . 寄存器寻址方式:指令所需的操

作数存放在 CPU 的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。

Page 28: 第四章   典型 CPU 及指令系统举例

寻址过程:

例:( BX ) =1234H

MOV AX , BX :将 BX 中的内

容送到 AX 中 ( AX ) =1234H

操作码 REC

操作数S

Ri

是指令代码中的寻址字段,表示操作数的寄存器地址

Page 29: 第四章   典型 CPU 及指令系统举例

2. 2. 立即数寻址方式立即数寻址方式

立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到 BIU 的指令队列中。

操作码 操作码F5H

12H

34H一条指令一条指令

AH ALAX AH ALAX

( A ) MOV AX , 1234H ( B ) MOV AL , 0F5H

Page 30: 第四章   典型 CPU 及指令系统举例

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

在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量)

段基值:是由某个段寄存器提供,由指令隐含给出。

偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由 CPU 的 EU按指令中操作数的寻址方式计算而得到,又称为有效地址 EA 。

有效地址 EA :由位移量、基地址、变址量三个地址分量的某种组合求得。

Page 31: 第四章   典型 CPU 及指令系统举例

段基址

段基值左移四位

段基值

Page 32: 第四章   典型 CPU 及指令系统举例

(( 11 )直接寻址方式)直接寻址方式定义:指令所需的操作数存放在存储单

元中,操作数的有效地址 EA直接由指令代码中的位移量提供。

寻址过程:

在源程序中,直接寻址方式可用数值地址或符号地址来表示。

操作码 … 位移量

EA

Page 33: 第四章   典型 CPU 及指令系统举例

用数值地址表示:在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。

MOV BX , DS : [1000H]

完成将当前数据段偏移 1000H个字节的字单元内容 1234H送入BX中。

Page 34: 第四章   典型 CPU 及指令系统举例

用符号地址表示: 在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。

若指令中不必给出数据段寄存器名,即隐含使用 DS ;其他须指定。

例题: P130

MOV BX , VAR MOV BX , DS : VAR

MOV DA_BYTE , 0FH MOV DS :DA_BYTE , 0FH

MOV CL , DA+3 MOV CL , DA+3

Page 35: 第四章   典型 CPU 及指令系统举例

(( 22 )寄存器间接寻址方式)寄存器间接寻址方式 寄存器间接寻址方式:指令所需的操作数在存

储单元中,操作数的有效地址 EA直接从基址寄存器( BP 或 BX )或变址寄存器( SI 或 DI )中获得。

见 P131 的图 4-22 寄存器间接寻址方式。 若以 BX , SI 或 DI 间接寻址时,隐含使用的

段寄存器是 DS ,若以 BP 间接寻址时,隐含使用的段寄存器是 SS 。

MOV CH , [SI] MOV CH , DS : [SI]

MOV [DI] , BX MOV DS : [DI] , BX

MOV AL , [BX] MOV AL , DS : [BX]

MOV CX , [BP] MOV CX , SS : [BP]

Page 36: 第四章   典型 CPU 及指令系统举例

操作码 MOD R/M

SI

DI

BX

BP

OR

OR

OR EA

寻址过程

是指令代码中的寻址字段

寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。

(( 22 )寄存器间接寻址方式)寄存器间接寻址方式

Page 37: 第四章   典型 CPU 及指令系统举例

变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA 是基址寄存器( BP 或 BX )或变址寄存器( SI 或 DI )的内容与指令中给出的位移量( 8 位或 16 或)两个地址分量之和。

使用 SI 或 DI 称为变址寻址。使用 BX 或 BP 称为基址寻址。

(( 33 )变址寻址和基址寻址方式)变址寻址和基址寻址方式

Page 38: 第四章   典型 CPU 及指令系统举例

变址寻址和基址寻址方式变址寻址和基址寻址方式

操作码 MOD R/M 位移量

SI

DI

BX

BP

OR

OR

OR + EA

Page 39: 第四章   典型 CPU 及指令系统举例

寻址方式的使用格式:

变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。

典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量

例题 4-1 :见教材 132页。

MOV AX , 10H[SI] MOV AX , DS :10H[SI]

MOV TABLE[DI] , 12H MOV DS :TABLE[DI] , 12H

MOV AX , ARRY[BX] MOV AX , DS :ARRY[BX]

MOV TAB1[BP] , CL MOV SS : TAB1[BP] , CL

Page 40: 第四章   典型 CPU 及指令系统举例

(( 44 )基址变址寻址方式)基址变址寻址方式

操作码 MOD R/M 位移量

SI

DI

BP

BX

OR

OR

+ EA

寻址过程

Page 41: 第四章   典型 CPU 及指令系统举例

寻址方式的使用格式:

基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改)

例题 4-2 :见教材 133-134页。

MOV AX , 200H[BX][SI] MOV AX , DS : 200H[BX][SI]

MOV TABLE[BX][DI] , 0FFH

MOV DS : TABLE[BX][DI] , 0FFH

MOV AX , ARRY[BP][SI] MOV AX , SS : ARRY[BP][SI]

MOV TAB1[BP][DI] , DL MOV SS : TAB[BP][DI] , DL

Page 42: 第四章   典型 CPU 及指令系统举例

上半部分表示由 CPU 的执行部件 EU 根据寻址方式计算有效地址 EA 。

下半部分表示由总线接口部件 BIU 形成操作数的物理地址。按操作数的物理地址就可直接访问操作数的存储单元。

Page 43: 第四章   典型 CPU 及指令系统举例

4. 4. 串操作寻址方式串操作寻址方式

串操作寻址方式:

串操作指令规定:隐含使用 SI 作为在数据段中的源串(即源

操作数)的地址指针隐含使用 DI 作为在附加段中的目的串的地

址指针。

SI

DI

源串有效地址 EA

目的串有效地址 EA

Page 44: 第四章   典型 CPU 及指令系统举例

5. I/O5. I/O 端口寻址端口寻址

了解

Page 45: 第四章   典型 CPU 及指令系统举例

§4.4.2 8086/8088§4.4.2 8086/8088 指令 指令 8086/8088 指令按操作数地址划分:

双操作数指令: OPR DEST , SRC

单操作数指令: OPR DEST

无操作数指令: OPR

Page 46: 第四章   典型 CPU 及指令系统举例

8086/8088 指令按功能划分:

传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令

Page 47: 第四章   典型 CPU 及指令系统举例

一、传送类指令一、传送类指令分类:(仅存标志指令 SAHF 、标志出

栈指令 POPF 对标位有影响)

 数据传送类指令 交换指令 标志位传送指令 地址传送指令

Page 48: 第四章   典型 CPU 及指令系统举例

11 .数据传送类指令(.数据传送类指令( MovMovee ))格式: MOV DEST , SRC

功能: DEST ( SRC ) 将源地址的内容(源操作数)传送到目

的地址中。传送指令执行后源操作数保持不变。

Page 49: 第四章   典型 CPU 及指令系统举例

11 .数据传送类指令(.数据传送类指令( MovMovee ))

注意:MOV 指令中的两个操作数可同为字或字节,但两者位数必须一致。目的操作数不能为立即数。两个操作数不能同时为存储器操作数。MOV 指令中立即数不能直接传送给段寄存器,而且段寄存器之间也不能直接传送数据,但可以通过寄存器实现间接传送。一条 MOV 指令不能完成两个存储单元之间的数据传送,但可以用两条指令来实现。

Page 50: 第四章   典型 CPU 及指令系统举例

数据传送指令( Move ) ( 指令中只允许两个操作数的其中一个在主存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送 )

Page 51: 第四章   典型 CPU 及指令系统举例

MOVMOV 指令错误指令错误例子举例例子举例

例子 错误原因MOV 60H , AL 立即数不能作目的操作数MOV [BX] , [SI] 存储器之间不能直接传送MOV CS , AX CS 不能作目的操作数MOV BX , IP 通用寄存器无 IP 寄存器MOV DS , ES 段寄存器间不能直接传送MOV CX , AL 源和目的操作数长度不一致

Page 52: 第四章   典型 CPU 及指令系统举例

22 .交换指令(.交换指令( ExcahangeExcahange ))格式: XCHG DEST , SRC功能:将源地址的内容(源操作数)与目

的地址的内容(目的操作数)相互交换。

Page 53: 第四章   典型 CPU 及指令系统举例

通用寄存器 AX BX CX DX S

I DI BP SP存储器

图 4-30 CXHG 指令的数据交换

注意:–数据交换只能在通用寄存器之间或通用寄存器与存储单元之间进行。–交换指令不能使用段寄存器,也不能使用立即数。

Page 54: 第四章   典型 CPU 及指令系统举例

33 .标志位传送指令.标志位传送指令( 1 )取标志指令( LAHF ) 格式: LAHF 功能: AH ( FR ) 7-0 ,将标志寄存器 FR 低 8

位内容传送到 AH 寄存器中。 见如下图(一一对应) 7   6   5   4   3   2   1    0

这种指令用于对标志寄存器进行存取操作,共 4 条指令且都是无操作数指令

SF

符号ZF

零值AF辅助进位

PF

奇偶CF

进位

AH

FR低 8位

Page 55: 第四章   典型 CPU 及指令系统举例

( 2 )存标志指令格式: SAHF功能:( FR ) 7-0 AH ,将 AH 寄存器

的内容传送给标志寄存器 FR 低 8 位。

( 3 )标志压栈指令( PUSHF )格式: PUSHF 功能: PUSHF 指令先将栈顶指针 SP 内

容减 2 指向空字单元,然后把 16 位标志寄存器 FR 的所有内容送到 SP 指向的新栈顶字单元中。

Page 56: 第四章   典型 CPU 及指令系统举例

( 4 )标志压栈指令( POPF )格式: POPF 功能: POPF 指令先 SP 指向的栈顶字单

元的内容弹出标志寄存器中,然后 SP 内容加 2 指向新的栈顶。各标志位的状态由堆栈弹出字的对应位内容决定。

Page 57: 第四章   典型 CPU 及指令系统举例

    地址传送指令(了解)地址传送指令(了解)( 1 )装入有效地址指令 LEA格式: LEA DEST , SRC 功能: DEST SRC 的 EA ,即将源操作数的

有效地址 EA 传送到目的地址( 16 位通用寄存器)中。

( 2 )装入地址指针指令 LDS 格式: LDS DEST , SRC LES DEST , SRC 功能:是从作地址指针的 4 个存储单元中,

同时取出段基值与偏移量(即源操作数),分别送到段寄存器 DS ( ES )和通用寄存器中。

Page 58: 第四章   典型 CPU 及指令系统举例

二、算术运算类指令二、算术运算类指令

1 .加法运算指令( 1 )加法指令( ADD )格式: ADD DSET , SRC功能: DEST ( SRC ) + ( DEST ),

影响 OF , SF , ZF , AF , PF 和 CF 标志位。

见教材 P141页,例 4-8注意各标志位的变化。

Page 59: 第四章   典型 CPU 及指令系统举例

(1)(1) 加法指令加法指令 ADDADD

例: ADD DL , 0A4H

Page 60: 第四章   典型 CPU 及指令系统举例

(( 22 )带进位加法指令()带进位加法指令( ADADCC ))格式: ADC DSET , SRC

功能: DEST ( SRC ) + ( DEST ) +CF ,即在完成两个操作数相加的同时,将标志位 CF 加上,求出的和数送入目的地址中。影响 OF , SF , ZF , AF , PF和 CF 标志位。

注意: ADC 主要用于大于 16 位数的相加运算。

Page 61: 第四章   典型 CPU 及指令系统举例

例 4-9 有一个 32 位无符号数存放在 DX(高 16 位)、 AX (低 16 位)中,若要加上常数 76F1A23H ,则用以下指令来实现:

ADD AX , 1A23H ;

ADC DX , 76FH ;

完成把 16 位常数加在 AX 中,若产生进位,则记录在 CF 中。

由 ADC 指令在完成高 16 位相加的同时,将低 16 位进位(即 CF 中的数)也加上。

+7 +6F+ +1A +23DX AXCF

DH DL AH AL

Page 62: 第四章   典型 CPU 及指令系统举例

(( 33 )加)加 11 指令(指令( INCINC ))格式: INC DSET

功能: DEST ( DEST ) +1 ,即目的操作数加 1 后送回目的地址中,影响 OF , SF , ZF ,AF 和 PF ,但不影响 CF 。

注意: 操作数只能在通用寄存器或存储单元中,不能是

立即数。 INC 指令主要用于计数器的计数或修改地址指针。

Page 63: 第四章   典型 CPU 及指令系统举例

2. 2. 减法运算指令减法运算指令( 1 )减法指令( SUB )格式: SUB DEST , SRC功能: DEST ( DEST )—( SRC ),

即完成从目的操作数中减去源操作数,其差值送入目的地址中。影响 OF , SF , ZF ,AF 和 PF ,但不影响 CF 。

例:有 2 个字节单元 A 、 B ,可用指令实现( A )—( B ) A 。

MOV AL , B SUB A , AL

Page 64: 第四章   典型 CPU 及指令系统举例

减法指令减法指令 SUBSUB

Page 65: 第四章   典型 CPU 及指令系统举例

(( 22 )带借位减法指令()带借位减法指令( SBSBBB ))格式: SBB DEST , SRC功能: DEST ( DEST ) - ( SR

C ) -CF ,即在完成 2 个操作数相减的同时,还要减去借位 CF ,影响 OF , SF ,ZF , AF 和 PF ,但不影响 CF 。

注意:用于大于 16 位数的相减运算,将低位部分的相减的借位引入高位部分的减法。

Page 66: 第四章   典型 CPU 及指令系统举例

(( 33 )减)减 11 指令(指令( DECDEC ))格式: DEC DSET

功能: DEST ( DEST ) -1 ,即目的操作数减 1 后送回目的地址中,影响 OF , SF , ZF ,AF 和 PF ,但不影响 CF 。

注意: 操作数只能在通用寄存器或存储单元中,不能是

立即数。 DEC 指令主要用于计数器的计数或修改地址指

针,但它的计数或修改方向与 INC 指令相反。

Page 67: 第四章   典型 CPU 及指令系统举例

(( 44 )求负指令()求负指令( NEGNEG ))格式: NEG DSET

功能: DEST 0- ( DEST ),即用 0减去目的操作数,相减结果送回目的地址中。影响 OF , SF , ZF , AF 和 PF ,但不影响 CF 。

见教材 P143例 4-13例 4-14

Page 68: 第四章   典型 CPU 及指令系统举例

(( 55 )比较指令()比较指令( CMPCMP ))格式: CMP DSET , SRC功能:( DEST ) - ( SRC ),两个操作

数相减后,仅按相减结果设置标志位 OF ,SF , ZF , AF , PF 和 CF ,但不保留差。

CMP 和 SUB 之间的区别:运算结果不送回目的地址中,因此 CMP

指令执行后,两个操作数都不变,只影响状态标志位。

CMP 主要是利用所设标志位的状态来反映两个操作数的大小。

Page 69: 第四章   典型 CPU 及指令系统举例

3. 3. 乘法运算指令乘法运算指令( 1 )无符号数乘法指令( MUL )格式: MUL OPRD功能: 注意:( OPRD )是乘法运算的一个操作数,

只能在通用寄存器或存储单元中,另一个操作安息则隐含在 AL 或 AX 寄存器中。

( 2 )带符号数乘法指令( IMUL ) 该指令中的操作数及积均为带符号且用补码表示。

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

Page 70: 第四章   典型 CPU 及指令系统举例

4. 4. 除法运算指令除法运算指令( 1 )无符号数除法指令( DIV )格式: DIV OPRD功能:

注意: DIV 指令对标志寄存器无有效标志结果,有两种情况将产生 0 型中断,转入除法出错中断处理。(除数为 0 或商溢出)

字节除法: AL ( AX ) / ( OPRD )字无称号数相除: AX ( DX : AX ) / ( OPRD )

Page 71: 第四章   典型 CPU 及指令系统举例

( 2 )带符号数除法指令( IDIV )格式: IDIV OPRD功能:该指令中的操作数、商及余数均带符且用补码表示,其余均与 DIV 操作相同。

( 3 )字节 / 字符号扩展指令格式: CBW ;扩展 AL 中的符号位至 AH

中 CWD ;扩展 AX 中的符号位至 DX 中两个指令主要用在除法指令前,形成双倍长

度的被除数,对标志寄存器均无影响。

Page 72: 第四章   典型 CPU 及指令系统举例

5. BCD5. BCD 码校正指令码校正指令

( 1 )非组合型加法校正指令 AAA

( 2 )组合型加法校正指令 DAA

( 3 )非组合型减法校正指令 AAS

( 4 )组合型减法校正指令 DAS

BCD— 十进制:先用二进制数的加减、乘除指令对 BCD 码进行运算,接着用 BCD 码校正指令对运算结果进行校正。

例题请参见教材 P147 。

Page 73: 第四章   典型 CPU 及指令系统举例

三、位操作类指令三、位操作类指令

1. 逻辑运算指令( 1 )逻辑与指令(二 1 为 1 )格式: AND DEST , SRC功能: DEST ( SRC )∧( DEST )( 2 )逻辑或指令(有 1 为 1 )格式: OR DEST , SRC功能: DEST ( SRC ) ∨ ( DEST )

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

Page 74: 第四章   典型 CPU 及指令系统举例

三、位操作类指令三、位操作类指令( 3 )逻辑异或指令(同为 0 ,异为 1 )格式: XOR DEST , SRC功能: DEST ( SRC ) O ( DEST )

( 4 )逻辑非指令格式: NOT DEST功能: DEST ( DEST )

Page 75: 第四章   典型 CPU 及指令系统举例

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

例 2 :实现将标志寄存器的第 8 位 TF 位置 1 。 PUSHF ;标志压栈指令(将 16 位标志寄存 FR

的内容送入栈顶单元) POP AX ;出栈,即(栈顶单元)→ AX OR AX , 100H ;将 AX 中第 8 位置 1 ,其余

不变 PUSH AX POPF

;通过堆栈将修改的结果送回标志寄存器中

Page 76: 第四章   典型 CPU 及指令系统举例

2. 2. 测试指令( 测试指令( TestTest ))

格式: TEST DEST , SRC功能:( SRC )∧( DEST ) ; 将源操

作数与目的操作数进行按位逻辑与运算,仅按结果设置标志位 SF , ZF , PF ,相与的结果不保存。

Page 77: 第四章   典型 CPU 及指令系统举例

3. 3. 移位移位 // 循环移位指令循环移位指令移位指令分算术移位、逻辑移位和循环移

位,共 8 条指令,其特点是:具有相同的指令格式: OPR DESR , COUN

T每条指令都是单操作数指令,即只需一个

操作数 DESTDEST 只能是 8/16 位通用寄存器或存储器

操作数,不能是立即数COUNT表示移位的次数,移位一次,为 1 ;

移位多次,则须有 CL替代, CL 中存放移位的次数。

Page 78: 第四章   典型 CPU 及指令系统举例

(( 11 )算术移位指令)算术移位指令 格式:算术左移指令 SAL DEST , COUNT ;将 DEST 指定的

操作数左移 COUNT ,最高位移入 CF 中,最低位补 0

算术右移指令 SAR DEST , COUNT ;将 DEST 指定的操作数右移 COUNT ,最高符号位保持不变,连同符号位依次右移,最低位移入 CF 中

算术移位指令主要用于对带符号数的移位,左移一位相当于乘 2 ;右移一位相当于除 2 。

Page 79: 第四章   典型 CPU 及指令系统举例

(( 22 )逻辑移位指令)逻辑移位指令格式:逻辑左移指令 SHL DEST , COUNT逻辑右移指令 SHR DEST , COUNT 功能:将 DEST 指定的 8/16 位寄存器或存储器操

作数移位 COUNT 。SHL—— 最高位移入 CF 中,最低位补 0SHR—— 最低位移入 CF 中,最高位补 0

Page 80: 第四章   典型 CPU 及指令系统举例

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

功能:将 DEST 指定的 8/16 位寄存器或存储器操作数移位 COUNT 。

ROL/ROR—— 将操作数循环左移 /右移RCL/RCR—— 将操作数和 CF 一起循环左移 /右移 见示意图 4-39

Page 81: 第四章   典型 CPU 及指令系统举例

(( 33 )循环移位指令)循环移位指令

循环

带进位循环

Page 82: 第四章   典型 CPU 及指令系统举例

例:要求把 CL 中的数( 0-15 )所指定AX 中的位分离出来,可用以下程序段实现。

设 CL=2MOV BX , 1H ;( BX ) = ( 0000 , 0001 )

2

SHL BX , CL ;( BX ) = ( 0000 , 0100 ) 2

AND AX , BX ;( AX ) = ( 0000 , 0 00 ) 2

或者:MOV BX , 100H ;( BX ) = ( 0000 , 0100 )

2

AND AX , BX ;( AX ) = ( 0000 , 0 00 ) 2

逻辑右移 SHR

Page 83: 第四章   典型 CPU 及指令系统举例

四、串操作类指令四、串操作类指令“串”是指存储器中一序列字或字节单

元,其内容是字符或数据。串操作是对这一序列或字单元的内容进

行某种操作。

Page 84: 第四章   典型 CPU 及指令系统举例

1 . 1 . 取串指令取串指令指令格式: LODS 源串指令功能:( 1 ) AX/AL ( DS :( SI ))( 2 ) SI ( SI ) ±1 或 2

( 3 )对标志寄存器无影响

Page 85: 第四章   典型 CPU 及指令系统举例

2 . 2 . 存串指令存串指令指令格式: STOS目的串 /STOSB/STOS

W指令功能:( 1 ) ES :( DI ) ( AX ) / ( A

L )( 2 ) DI ( DI ) ±1 或 2

( 3 )对标志寄存器无影响

Page 86: 第四章   典型 CPU 及指令系统举例

3 .3 .串比较指令串比较指令指令格式: MOVS目的串、源串 /MOVSB

/MOVSW指令功能:( 1 )( ES :( DI )) ( DS :( S

I ))( 2 ) SI ( SI ) ±1 或 2 , DI ( D

I ) ±1 或 2

( 3 )对标志寄存器无影响

Page 87: 第四章   典型 CPU 及指令系统举例

4. 4. 串比较指令串比较指令

指令格式: CMPSI 源串,目的串 /CMPSB/CMPSW

指令功能:( 1 )( DS :( SI )—( ES :( DI ))( 2 ) SI ( SI ) ±1 或 2 , DI ( D

I ) ±1 或 2( 3 )影响标志位 OF , SF , ZF , AF , P

F , CF

Page 88: 第四章   典型 CPU 及指令系统举例

5 .5 .串搜索指令串搜索指令指令格式: SCAS目的串 /SCASB/SCASW指令功能:( 1 )( AX/AL )—( ES :( DI ))( 2 ) DI ( DI ) ±1 或 2

( 3 )影响标志位 OF , SF , ZF , AF ,PF , CF

Page 89: 第四章   典型 CPU 及指令系统举例

6. 6. 重复前缀指令(重复前缀指令( 33 条)条) 指令格式: REP 重复执行串操作指令的条件是:( CX )≠ 0 指令格式: REPE/REPZ 重复执行串操作指令的条件是:( CX )≠ 0AND

ZF=1

指令格式: REPNE/REPNZ 重复执行串操作指令的条件是:( CX )≠ 0 AND

ZF=1

Page 90: 第四章   典型 CPU 及指令系统举例

五、处理器控制指令五、处理器控制指令1. 标志位操作指令2. 与外部事件同步的指令3. 空操作指令

Page 91: 第四章   典型 CPU 及指令系统举例

§4.5 §4.5 提高提高 CPUCPU 性能的一些措性能的一些措施施了解自学

Page 92: 第四章   典型 CPU 及指令系统举例

作业作业 ::

见教材 P164 , T3----27做在书上

作业:做在作业本上 1 、编写一程序段,将 AL 的低 4 位与 BL 的低

4 位互换, AL 和 BL 的高 4 位保持不变。 2 、编写计算 5X-Y+10 多项式值的程序段。说明:多项式值存于 AX 中, X 、 Y 是无符号数,设中间和最后结果不超过 16 位二进制数。