第四章 典型 cpu 及指令系统举例
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 PresentationTRANSCRIPT
第四章 第四章 典型 典型 CPUCPU 及指令系统举例及指令系统举例
学习内容:学习内容:
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 基本组成。
重点难点:8086/8088 指令系统的寻址方式。
课时安排: 6 课时。
媒体使用:使用多媒体投影,主要采用 PowerPoint
准备的电子教案。
§4.1 8086/8088CPU§4.1 8086/8088CPU§4.1.1 8086/8088CPU 的结构1. 8086/8088 内部结构:8086/8088CPU 采用指令流水线结构,将
取指令(或取操作数)与执行指令的功能分别由两个独立部件实现,
即总线接口部件 BIU 与执行部件 EU
主要任务是完成 CPU与主存储器或 I/O 之间的信息传送。
主要任务是执行指令
1 、执行部件 EU :包括一个 16 位算术逻辑部件ALU 、一组通用寄存器、暂存器、标志寄存器和EU 控制器。
2 、 EU 主要任务是执行指令。
3 、执行部件 EU 功能见教材 P114 。
总线接口部件 BIU 见教材 P115 。1 、总线接口部件 BIU :包括一段寄存器、指令指针、 6 字节的指令队列、 20 位总线地址形成部件和总线控制逻辑。
2 、 BIU 主要任务是完成 CPU 与主存储器或I/O 端口之间的信息传送。
3 、总线接口 BIU 功能见教材 P115 。
2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成
段基值:在 BIU 中设置段寄存器,用以存放 20 位段起始地址的高 16 位,称为段基值。
偏移量:由 EU 或指令指针 IP 提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。( 16 位)
段基址:由段基值左移 4 位后,得到一个物理地址。
二者相加形成 20 位主存单元的物理地址。
2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成
2. 8086/80882. 8086/8088 主存地址的形成主存地址的形成我们把提供一个 20 位地址的两个寄存器中的值分别称之为:
20 位寄存器中的值称之为段基址( Segment base value )
16 位寄存器中的值称之为偏移量( Offset )或有效地址 (Effective address)
段基址是由四个段寄存器提供 20 位的高 16 位,低四位补 0 形成的
偏移量是由 CPU 内的 EU 部分提供的
§4.1. 8086/8088§4.1. 8086/8088 寄存器寄存器 1. 段寄存器: CS (代码段寄存器)——用来存放程序的指
令代码序列,用来存放当前代码段段首址的高16 位,即段基值。
DS (数据段寄存器)——存放程序的有关数据,用来存放当前数据段的段基值。
SS (堆栈段寄存器)——用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。
ES (附加段寄存器)——存放运算结果或辅助数据,存放当前附加段的段基值。
1.1. 段寄存器段寄存器————————8086/8088CPU8086/8088CPU
2 . 通用寄存器( 1 )地址指针寄存( 2 )数据寄存器3. 用于控制的寄存器( 1 )指令指针 IP :( 2 )标志寄存器 FR
进位标志位 CF 奇偶标志位 PF
辅助进位标志位 AF 零值标志位 ZF
符号标志位 SF 溢出标志位 OF
单步(或跟踪)标志位 TF 中断标志位 IF
方向标志位 DF
作用类似于 PC ,当现行指令执行完毕,由 IP 提供下一条指令地址
§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 位(高字节)存放在高地址单元,并以低字节所在存储单元地址作为字数据的单元地址。
§4.2.2 §4.2.2 主存储器的段结构主存储器的段结构
8086/8088 把 1MB 主存空间按需要划分为若干段( segment )。每个段都由连续的字节单元组成,最大长度为 64K(即 65536 ),可作为独立寻址的逻辑单位。
一个段起始单元的地址,称为对应段的段基址( 20 位)。
§4.2.2 §4.2.2 主存储器的段结构主存储器的段结构
在程序中设置的段称为逻辑段。
主存可分成任意多个段,但在某一时刻,一个程序只能访问 4 个段寄存器指向的当前段的内容。 4 个段寄存器 CS 、 DS 、 SS 和 ES ,分别保存代码段、数据段、堆栈段和附加段这 4 个当前段的段基址的高 16 位——段基值。
§4.2.3 §4.2.3 逻辑地址与物理地址逻辑地址与物理地址 逻辑地址——段基值:偏移量(书写形式)( 1 ) 段基值:由某个段寄存器( CS,DS,SS,E
S )给出,它是段基址的高 16 位。( 2 ) 偏移量:(也称偏移地址)由 IP 或 EU
按寻址方式产生的有效地址提供,它是段内某存储单元与段基址之间的字节距离。
物理地址——是指实际的 20 位主存单元地址,1MB 主存空间的每个存储单元只对应惟一的物理地址,其范围为 00000H—FFFFFH 。
逻辑地址——物理地址的转换方式: 将段基值左移 4 位形成 20 位段基址,再
加上偏移量,产生 20 位物理地址。
逻辑地址的来源CPU 在执行指令时,是按指令所需的操作类型从不同的来源获得存储单元的逻辑地址,然后形成对应的物理地址以访问主存。(具体内容见教材的 P124表 4-2 逻辑地址的来源)
§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个字节)个字节)为单位进行存取。为单位进行存取。
§4.3.2 堆栈操作
堆栈组织堆栈组织
§4.3.2 §4.3.2 堆栈操作堆栈操作 先设置堆栈,主要是对堆栈段寄存器先设置堆栈,主要是对堆栈段寄存器 SSSS
物堆栈指针物堆栈指针 SPSP 赋初值。赋初值。
对堆栈的操作均在栈顶进行的,其基本对堆栈的操作均在栈顶进行的,其基本操作的操作的压栈压栈出栈出栈
压 栈压 栈 压栈压栈 -------- 用压栈指令用压栈指令 PUSHPUSH 可以将通用寄可以将通用寄
存器、段寄存器或字存储单元内容压入堆存器、段寄存器或字存储单元内容压入堆栈。栈。
执行压栈指令执行压栈指令 PUSHPUSH 的操作过程分二步的操作过程分二步进行:进行:
(( 11 )()( SPSP )) -2——SP-2——SP ;首先修改栈顶指;首先修改栈顶指针,针, SPSP减减 22 以指向空字单元(即新栈以指向空字单元(即新栈顶)顶)
(( 22 )数据——()数据——( SPSP );将寄存器或存储);将寄存器或存储单元内容送入单元内容送入 SPSP 指向的空字单元中指向的空字单元中
(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)
压栈指令
出栈出栈 出栈 ---- 用弹出指令 POP 可以将当前栈顶字
单元内容取出送到通用寄存器、段寄存器或字存储单元中。
执行出栈指令 POP 的操作过程分二步进行:( 1 )(( SP ))——寄存器 / 字单元;将栈顶
单元内容送到指定的寄存器或字单元( 2 )( SP ) +2——SP ;修改栈顶指针, SP
加 2 以指向新栈顶
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
堆栈操作堆栈操作 --1.1.压栈压栈 2.2. 出栈出栈
§4.4 8086/8088§4.4 8086/8088 指令系统指令系统§4.4.1 8086/8088§4.4.1 8086/8088 寻址方式寻址方式1 . 寄存器寻址方式:指令所需的操
作数存放在 CPU 的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。
寻址过程:
例:( BX ) =1234H
MOV AX , BX :将 BX 中的内
容送到 AX 中 ( AX ) =1234H
操作码 REC
操作数S
Ri
是指令代码中的寻址字段,表示操作数的寄存器地址
2. 2. 立即数寻址方式立即数寻址方式
立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到 BIU 的指令队列中。
操作码 操作码F5H
12H
34H一条指令一条指令
AH ALAX AH ALAX
( A ) MOV AX , 1234H ( B ) MOV AL , 0F5H
3. 3. 存储器寻址方式存储器寻址方式
在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量)
段基值:是由某个段寄存器提供,由指令隐含给出。
偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由 CPU 的 EU按指令中操作数的寻址方式计算而得到,又称为有效地址 EA 。
有效地址 EA :由位移量、基地址、变址量三个地址分量的某种组合求得。
段基址
段基值左移四位
段基值
(( 11 )直接寻址方式)直接寻址方式定义:指令所需的操作数存放在存储单
元中,操作数的有效地址 EA直接由指令代码中的位移量提供。
寻址过程:
在源程序中,直接寻址方式可用数值地址或符号地址来表示。
操作码 … 位移量
EA
用数值地址表示:在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。
MOV BX , DS : [1000H]
完成将当前数据段偏移 1000H个字节的字单元内容 1234H送入BX中。
用符号地址表示: 在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。
若指令中不必给出数据段寄存器名,即隐含使用 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
(( 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]
操作码 MOD R/M
SI
DI
BX
BP
OR
OR
OR EA
寻址过程
是指令代码中的寻址字段
寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。
(( 22 )寄存器间接寻址方式)寄存器间接寻址方式
变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA 是基址寄存器( BP 或 BX )或变址寄存器( SI 或 DI )的内容与指令中给出的位移量( 8 位或 16 或)两个地址分量之和。
使用 SI 或 DI 称为变址寻址。使用 BX 或 BP 称为基址寻址。
(( 33 )变址寻址和基址寻址方式)变址寻址和基址寻址方式
变址寻址和基址寻址方式变址寻址和基址寻址方式
操作码 MOD R/M 位移量
SI
DI
BX
BP
OR
OR
OR + EA
寻址方式的使用格式:
变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。
典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量
例题 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
(( 44 )基址变址寻址方式)基址变址寻址方式
操作码 MOD R/M 位移量
SI
DI
BP
BX
OR
OR
+ EA
寻址过程
寻址方式的使用格式:
基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改)
例题 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
上半部分表示由 CPU 的执行部件 EU 根据寻址方式计算有效地址 EA 。
下半部分表示由总线接口部件 BIU 形成操作数的物理地址。按操作数的物理地址就可直接访问操作数的存储单元。
4. 4. 串操作寻址方式串操作寻址方式
串操作寻址方式:
串操作指令规定:隐含使用 SI 作为在数据段中的源串(即源
操作数)的地址指针隐含使用 DI 作为在附加段中的目的串的地
址指针。
SI
DI
源串有效地址 EA
目的串有效地址 EA
5. I/O5. I/O 端口寻址端口寻址
了解
§4.4.2 8086/8088§4.4.2 8086/8088 指令 指令 8086/8088 指令按操作数地址划分:
双操作数指令: OPR DEST , SRC
单操作数指令: OPR DEST
无操作数指令: OPR
8086/8088 指令按功能划分:
传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令
一、传送类指令一、传送类指令分类:(仅存标志指令 SAHF 、标志出
栈指令 POPF 对标位有影响)
数据传送类指令 交换指令 标志位传送指令 地址传送指令
11 .数据传送类指令(.数据传送类指令( MovMovee ))格式: MOV DEST , SRC
功能: DEST ( SRC ) 将源地址的内容(源操作数)传送到目
的地址中。传送指令执行后源操作数保持不变。
11 .数据传送类指令(.数据传送类指令( MovMovee ))
注意:MOV 指令中的两个操作数可同为字或字节,但两者位数必须一致。目的操作数不能为立即数。两个操作数不能同时为存储器操作数。MOV 指令中立即数不能直接传送给段寄存器,而且段寄存器之间也不能直接传送数据,但可以通过寄存器实现间接传送。一条 MOV 指令不能完成两个存储单元之间的数据传送,但可以用两条指令来实现。
数据传送指令( Move ) ( 指令中只允许两个操作数的其中一个在主存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送 )
MOVMOV 指令错误指令错误例子举例例子举例
例子 错误原因MOV 60H , AL 立即数不能作目的操作数MOV [BX] , [SI] 存储器之间不能直接传送MOV CS , AX CS 不能作目的操作数MOV BX , IP 通用寄存器无 IP 寄存器MOV DS , ES 段寄存器间不能直接传送MOV CX , AL 源和目的操作数长度不一致
22 .交换指令(.交换指令( ExcahangeExcahange ))格式: XCHG DEST , SRC功能:将源地址的内容(源操作数)与目
的地址的内容(目的操作数)相互交换。
通用寄存器 AX BX CX DX S
I DI BP SP存储器
图 4-30 CXHG 指令的数据交换
注意:–数据交换只能在通用寄存器之间或通用寄存器与存储单元之间进行。–交换指令不能使用段寄存器,也不能使用立即数。
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位
( 2 )存标志指令格式: SAHF功能:( FR ) 7-0 AH ,将 AH 寄存器
的内容传送给标志寄存器 FR 低 8 位。
( 3 )标志压栈指令( PUSHF )格式: PUSHF 功能: PUSHF 指令先将栈顶指针 SP 内
容减 2 指向空字单元,然后把 16 位标志寄存器 FR 的所有内容送到 SP 指向的新栈顶字单元中。
( 4 )标志压栈指令( POPF )格式: POPF 功能: POPF 指令先 SP 指向的栈顶字单
元的内容弹出标志寄存器中,然后 SP 内容加 2 指向新的栈顶。各标志位的状态由堆栈弹出字的对应位内容决定。
地址传送指令(了解)地址传送指令(了解)( 1 )装入有效地址指令 LEA格式: LEA DEST , SRC 功能: DEST SRC 的 EA ,即将源操作数的
有效地址 EA 传送到目的地址( 16 位通用寄存器)中。
( 2 )装入地址指针指令 LDS 格式: LDS DEST , SRC LES DEST , SRC 功能:是从作地址指针的 4 个存储单元中,
同时取出段基值与偏移量(即源操作数),分别送到段寄存器 DS ( ES )和通用寄存器中。
二、算术运算类指令二、算术运算类指令
1 .加法运算指令( 1 )加法指令( ADD )格式: ADD DSET , SRC功能: DEST ( SRC ) + ( DEST ),
影响 OF , SF , ZF , AF , PF 和 CF 标志位。
见教材 P141页,例 4-8注意各标志位的变化。
(1)(1) 加法指令加法指令 ADDADD
例: ADD DL , 0A4H
(( 22 )带进位加法指令()带进位加法指令( ADADCC ))格式: ADC DSET , SRC
功能: DEST ( SRC ) + ( DEST ) +CF ,即在完成两个操作数相加的同时,将标志位 CF 加上,求出的和数送入目的地址中。影响 OF , SF , ZF , AF , PF和 CF 标志位。
注意: ADC 主要用于大于 16 位数的相加运算。
例 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
(( 33 )加)加 11 指令(指令( INCINC ))格式: INC DSET
功能: DEST ( DEST ) +1 ,即目的操作数加 1 后送回目的地址中,影响 OF , SF , ZF ,AF 和 PF ,但不影响 CF 。
注意: 操作数只能在通用寄存器或存储单元中,不能是
立即数。 INC 指令主要用于计数器的计数或修改地址指针。
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
减法指令减法指令 SUBSUB
(( 22 )带借位减法指令()带借位减法指令( SBSBBB ))格式: SBB DEST , SRC功能: DEST ( DEST ) - ( SR
C ) -CF ,即在完成 2 个操作数相减的同时,还要减去借位 CF ,影响 OF , SF ,ZF , AF 和 PF ,但不影响 CF 。
注意:用于大于 16 位数的相减运算,将低位部分的相减的借位引入高位部分的减法。
(( 33 )减)减 11 指令(指令( DECDEC ))格式: DEC DSET
功能: DEST ( DEST ) -1 ,即目的操作数减 1 后送回目的地址中,影响 OF , SF , ZF ,AF 和 PF ,但不影响 CF 。
注意: 操作数只能在通用寄存器或存储单元中,不能是
立即数。 DEC 指令主要用于计数器的计数或修改地址指
针,但它的计数或修改方向与 INC 指令相反。
(( 44 )求负指令()求负指令( NEGNEG ))格式: NEG DSET
功能: DEST 0- ( DEST ),即用 0减去目的操作数,相减结果送回目的地址中。影响 OF , SF , ZF , AF 和 PF ,但不影响 CF 。
见教材 P143例 4-13例 4-14
(( 55 )比较指令()比较指令( CMPCMP ))格式: CMP DSET , SRC功能:( DEST ) - ( SRC ),两个操作
数相减后,仅按相减结果设置标志位 OF ,SF , ZF , AF , PF 和 CF ,但不保留差。
CMP 和 SUB 之间的区别:运算结果不送回目的地址中,因此 CMP
指令执行后,两个操作数都不变,只影响状态标志位。
CMP 主要是利用所设标志位的状态来反映两个操作数的大小。
3. 3. 乘法运算指令乘法运算指令( 1 )无符号数乘法指令( MUL )格式: MUL OPRD功能: 注意:( OPRD )是乘法运算的一个操作数,
只能在通用寄存器或存储单元中,另一个操作安息则隐含在 AL 或 AX 寄存器中。
( 2 )带符号数乘法指令( IMUL ) 该指令中的操作数及积均为带符号且用补码表示。
字节无称号数相乘: AX ( OPRD ) * ( AL )字无称号数相乘: AX ( OPRD ) * ( AX )
4. 4. 除法运算指令除法运算指令( 1 )无符号数除法指令( DIV )格式: DIV OPRD功能:
注意: DIV 指令对标志寄存器无有效标志结果,有两种情况将产生 0 型中断,转入除法出错中断处理。(除数为 0 或商溢出)
字节除法: AL ( AX ) / ( OPRD )字无称号数相除: AX ( DX : AX ) / ( OPRD )
( 2 )带符号数除法指令( IDIV )格式: IDIV OPRD功能:该指令中的操作数、商及余数均带符且用补码表示,其余均与 DIV 操作相同。
( 3 )字节 / 字符号扩展指令格式: CBW ;扩展 AL 中的符号位至 AH
中 CWD ;扩展 AX 中的符号位至 DX 中两个指令主要用在除法指令前,形成双倍长
度的被除数,对标志寄存器均无影响。
5. BCD5. BCD 码校正指令码校正指令
( 1 )非组合型加法校正指令 AAA
( 2 )组合型加法校正指令 DAA
( 3 )非组合型减法校正指令 AAS
( 4 )组合型减法校正指令 DAS
BCD— 十进制:先用二进制数的加减、乘除指令对 BCD 码进行运算,接着用 BCD 码校正指令对运算结果进行校正。
例题请参见教材 P147 。
三、位操作类指令三、位操作类指令
1. 逻辑运算指令( 1 )逻辑与指令(二 1 为 1 )格式: AND DEST , SRC功能: DEST ( SRC )∧( DEST )( 2 )逻辑或指令(有 1 为 1 )格式: OR DEST , SRC功能: DEST ( SRC ) ∨ ( DEST )
这些指令常用于对操作数的某些位进行分离、组合或设置
三、位操作类指令三、位操作类指令( 3 )逻辑异或指令(同为 0 ,异为 1 )格式: XOR DEST , SRC功能: DEST ( SRC ) O ( DEST )
( 4 )逻辑非指令格式: NOT DEST功能: DEST ( DEST )
例 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
;通过堆栈将修改的结果送回标志寄存器中
2. 2. 测试指令( 测试指令( TestTest ))
格式: TEST DEST , SRC功能:( SRC )∧( DEST ) ; 将源操
作数与目的操作数进行按位逻辑与运算,仅按结果设置标志位 SF , ZF , PF ,相与的结果不保存。
3. 3. 移位移位 // 循环移位指令循环移位指令移位指令分算术移位、逻辑移位和循环移
位,共 8 条指令,其特点是:具有相同的指令格式: OPR DESR , COUN
T每条指令都是单操作数指令,即只需一个
操作数 DESTDEST 只能是 8/16 位通用寄存器或存储器
操作数,不能是立即数COUNT表示移位的次数,移位一次,为 1 ;
移位多次,则须有 CL替代, CL 中存放移位的次数。
(( 11 )算术移位指令)算术移位指令 格式:算术左移指令 SAL DEST , COUNT ;将 DEST 指定的
操作数左移 COUNT ,最高位移入 CF 中,最低位补 0
算术右移指令 SAR DEST , COUNT ;将 DEST 指定的操作数右移 COUNT ,最高符号位保持不变,连同符号位依次右移,最低位移入 CF 中
算术移位指令主要用于对带符号数的移位,左移一位相当于乘 2 ;右移一位相当于除 2 。
(( 22 )逻辑移位指令)逻辑移位指令格式:逻辑左移指令 SHL DEST , COUNT逻辑右移指令 SHR DEST , COUNT 功能:将 DEST 指定的 8/16 位寄存器或存储器操
作数移位 COUNT 。SHL—— 最高位移入 CF 中,最低位补 0SHR—— 最低位移入 CF 中,最高位补 0
(( 33 )循环移位指令)循环移位指令格式:循环左移指令 ROL DEST , COUNT循环右移指令 ROR DEST , COUNT带进位循环左移指令 RCL DEST , COUNT带进位循环右移指令 RCR DEST , COUNT
功能:将 DEST 指定的 8/16 位寄存器或存储器操作数移位 COUNT 。
ROL/ROR—— 将操作数循环左移 /右移RCL/RCR—— 将操作数和 CF 一起循环左移 /右移 见示意图 4-39
(( 33 )循环移位指令)循环移位指令
循环
带进位循环
例:要求把 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
四、串操作类指令四、串操作类指令“串”是指存储器中一序列字或字节单
元,其内容是字符或数据。串操作是对这一序列或字单元的内容进
行某种操作。
1 . 1 . 取串指令取串指令指令格式: LODS 源串指令功能:( 1 ) AX/AL ( DS :( SI ))( 2 ) SI ( SI ) ±1 或 2
( 3 )对标志寄存器无影响
2 . 2 . 存串指令存串指令指令格式: STOS目的串 /STOSB/STOS
W指令功能:( 1 ) ES :( DI ) ( AX ) / ( A
L )( 2 ) DI ( DI ) ±1 或 2
( 3 )对标志寄存器无影响
3 .3 .串比较指令串比较指令指令格式: MOVS目的串、源串 /MOVSB
/MOVSW指令功能:( 1 )( ES :( DI )) ( DS :( S
I ))( 2 ) SI ( SI ) ±1 或 2 , DI ( D
I ) ±1 或 2
( 3 )对标志寄存器无影响
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
5 .5 .串搜索指令串搜索指令指令格式: SCAS目的串 /SCASB/SCASW指令功能:( 1 )( AX/AL )—( ES :( DI ))( 2 ) DI ( DI ) ±1 或 2
( 3 )影响标志位 OF , SF , ZF , AF ,PF , CF
6. 6. 重复前缀指令(重复前缀指令( 33 条)条) 指令格式: REP 重复执行串操作指令的条件是:( CX )≠ 0 指令格式: REPE/REPZ 重复执行串操作指令的条件是:( CX )≠ 0AND
ZF=1
指令格式: REPNE/REPNZ 重复执行串操作指令的条件是:( CX )≠ 0 AND
ZF=1
五、处理器控制指令五、处理器控制指令1. 标志位操作指令2. 与外部事件同步的指令3. 空操作指令
§4.5 §4.5 提高提高 CPUCPU 性能的一些措性能的一些措施施了解自学
作业作业 ::
见教材 P164 , T3----27做在书上
作业:做在作业本上 1 、编写一程序段,将 AL 的低 4 位与 BL 的低
4 位互换, AL 和 BL 的高 4 位保持不变。 2 、编写计算 5X-Y+10 多项式值的程序段。说明:多项式值存于 AX 中, X 、 Y 是无符号数,设中间和最后结果不超过 16 位二进制数。