第四章 典型 cpu 及指令系统举例
DESCRIPTION
第四章 典型 CPU 及指令系统举例. 学习内容. 理解 8086/8088CPU 的寄存器结构、主存储器、堆栈结构。 掌握 8086/8088 指令系统的寻址方式。 (本章的重点内容) 理解 8086/8088 指令类型。 了解提高 CPU 性能的一些措施与当前常用的实际 CPU 基本组成。. §4.1 8086/8088CPU. §4.1.1 8086/8088CPU 的结构 1. 8086/8088 内部结构: 8086/8088CPU 采用 指令流水线结构 ,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现, - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/1.jpg)
第四章 典型 CPU 及指令系统举例
![Page 2: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/2.jpg)
学习内容
理解 8086/8088CPU 的寄存器结构、主存储器、堆栈结构。掌握 8086/8088 指令系统的寻址方式。(本章的重点内容)理解 8086/8088 指令类型。了解提高 CPU 性能的一些措施与当前常用的实际 CPU 基本组成。
![Page 3: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/3.jpg)
§4.1 8086/8088CPU§4.1.1 8086/8088CPU 的结构1. 8086/8088 内部结构:
8086/8088CPU 采用指令流水线结构,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现,即总线接口部件 BIU 与执行部件 EU
主要任务是完成 CPU与主存储器或 I/O 之间的信息传送。
主要任务是执行指令
![Page 4: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/4.jpg)
总线接口部件 BIU 与执行部件 EU 功能见教材 P114 。
![Page 5: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/5.jpg)
2. 8086/8088 主存地址的形成
段基值:在 BIU 中设置段寄存器,用以存放 20 位段起始地址的高 16 位,称为段基值。
偏移量:由 EU 或指令指针 IP 提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。
![Page 6: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/6.jpg)
§4.1. 8086/8088 寄存器1. 段寄存器:CS (代码段寄存器)——用来存放程序的指令代码序列,用来存放当前代码段段首址的高16 位,即段基值。DS (数据段寄存器)——存放程序的有关数据,用来存放当前数据段的段基值。SS (堆栈段寄存器)——用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。ES (附加段寄存器)——存放运算结果或辅助数据,存放当前附加段的段基值。
![Page 7: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/7.jpg)
2 . 通用寄存器( 1 )地址指针寄存( 2 )数据寄存器3. 用于控制的寄存器( 1 )指令指针 IP :( 2 )标志寄存器 FR
进位标志位 CF 奇偶标志位 PF辅助进位标志位 AF 零值标志位 ZF符号标志位 SF 溢出标志位 OF单步(或跟踪)标志位 TF 中断标志位 IF方向标志位 DF
作用类似于 PC ,当现行指令执行完毕,由 IP 提供下一条指令地址
![Page 8: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/8.jpg)
§4.2 主存储器§4.2.1 8086/8088§4.2.1 8086/8088 主存储器的特点主存储器的特点§4.2.2 §4.2.2 主存储器的段结构主存储器的段结构
§4.2.3 §4.2.3 逻辑地址与物理地址逻辑地址与物理地址1. 逻辑地址:段基值和偏移量2. 物理地址3. 逻辑地址的来源
![Page 9: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/9.jpg)
§4.3 8086/8088 堆栈
§4.3.1 §4.3.1 堆栈组织堆栈组织8086/80888086/8088 的堆栈是由的堆栈是由 SSSS 指定的一段存指定的一段存储区(≤储区(≤ 64KB64KB )构成,并采用向上)构成,并采用向上(地址码减小)生成方式,由堆栈指针(地址码减小)生成方式,由堆栈指针SPSP 指向栈顶。指向栈顶。SSSS 提供堆栈段的段基值,提供堆栈段的段基值, SPSP 的内容为的内容为栈顶单元相对堆栈段段基址的字节距离栈顶单元相对堆栈段段基址的字节距离(偏移量)。(偏移量)。8086/80888086/8088 堆栈规定以字(堆栈规定以字( 22 个字节)个字节)为单位进行存取。为单位进行存取。
![Page 10: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/10.jpg)
§4.3.2 §4.3.2 堆栈操作堆栈操作 先设置堆栈,主要是对堆栈段寄存器先设置堆栈,主要是对堆栈段寄存器 SS
SS 物堆栈指针物堆栈指针 SPSP 赋初值。赋初值。 对堆栈的操作均在栈顶进行的,其基本对堆栈的操作均在栈顶进行的,其基本
操作的:操作的:1.1. 压栈:用压栈指令压栈:用压栈指令 PUSHPUSH 可以将通用寄可以将通用寄
存器、段寄存器或字存储单元内容压入存器、段寄存器或字存储单元内容压入堆栈。堆栈。
2. 2. 出栈:用弹出指令出栈:用弹出指令 POPPOP 可以将当前栈可以将当前栈顶字单元内容取出送到通用寄存器、段顶字单元内容取出送到通用寄存器、段寄存器或字存储单元中。寄存器或字存储单元中。
![Page 11: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/11.jpg)
§4.4 8086/8088 指令系统
§4.4.1 8086/8088§4.4.1 8086/8088 寻址方式寻址方式1 . 寄存器寻址方式:指令所需的操
作数存放在 CPU 的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。
![Page 12: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/12.jpg)
寻址过程:
例:( BX ) =1234H MOV AX , BX :将 BX 中的内 容送到 AX 中 ( AX ) =1234H
操作码 REC
操作数S
Ri
是指令代码中的寻址字段,表示操作数的寄存器地址
![Page 13: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/13.jpg)
2. 立即数寻址方式
立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到 BIU 的指令队列中。
操作码 操作码F5H
12H
34H一条指令一条指令
AH ALAX AH ALAX
( A ) MOV AX , 1234H ( B ) MOV AL , 0F5H
![Page 14: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/14.jpg)
3. 存储器寻址方式
在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量)段基值:是由某个段寄存器提供,由指令隐含给出。偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由 CPU 的 EU按指令中操作数的寻址方式计算而得到,又称为有效地址 EA 。有效地址 EA :由位移量、基地址、变址量三个地址分量的某种组合求得。
![Page 15: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/15.jpg)
( 1 )直接寻址方式定义:指令所需的操作数存放在存储单元中,操作数的有效地址 EA 直接由指令代码中的位移量提供。寻址过程:
在源程序中,直接寻址方式可用数值地址或符号地址来表示。
操作码 … 位移量
EA
![Page 16: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/16.jpg)
用数值地址表示:在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。
MOV BX , DS : [1000H]
完成将当前数据段偏移 1000H 个字节的字单元内容1234H 送入 BX 中。
![Page 17: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/17.jpg)
用符号地址表示:在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。例题: 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 18: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/18.jpg)
( 2 )寄存器间接寻址方式
寄存器间接寻址方式:指令所需的操作数在存储单元中,操作数的有效地址 EA直接从基址寄存器( BP 或 BX )或变址寄存器( SI 或 DI )中获得。见 P131 的图 4-22 寄存器间接寻址方式
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 19: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/19.jpg)
( 2 )寄存器间接寻址方式
操作码 MOD R/M
SI
DI
BX
BP
OR
OR
OR EA
寻址过程
是指令代码中的寻址字段
寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。
![Page 20: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/20.jpg)
( 3 )变址寻址和基址寻址方式 变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA 是基址寄存器( BP 或 BX )或变址寄存器( SI 或 DI )的内容与指令中给出的位移量( 8 位或 16 或)两个地址分量之和。使用 SI 或 DI 称为变址寻址。使用 BX 或 BP 称为基址寻址。
![Page 21: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/21.jpg)
变址寻址和基址寻址方式
操作码 MOD R/M 位移量
SI
DI
BX
BP
OR
OR
OR + EA
![Page 22: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/22.jpg)
寻址方式的使用格式:
变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量例题 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 23: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/23.jpg)
( 4 )基址变址寻址方式
操作码 MOD R/M 位移量
SI
DI
BP
BX
OR
OR
+ EA
寻址过程
![Page 24: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/24.jpg)
寻址方式的使用格式:
基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改)例题 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 25: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/25.jpg)
4. 串操作寻址方式串操作寻址方式:
串操作指令规定:隐含使用 SI 作为在数据段中的源串(即源操作数)的地址指针隐含使用 DI 作为在附加段中的目的串的地址指针。
SI
DI
源串有效地址 EA
目的串有效地址 EA
![Page 26: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/26.jpg)
§4.4.2 8086/8088 指令 8086/8088 指令按操作数地址划分:
双操作数指令: OPR DEST , SRC 单操作数指令: OPR DEST 无操作数指令: OPR
![Page 27: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/27.jpg)
8086/8088 指令按功能划分:
传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令
具体内容见课件
![Page 28: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/28.jpg)
四、串操作类指令
“串”是指存储器中一序列字或字节单元,其内容是字符或数据。串操作是对这一序列或字单元的内容进行某种操作。
![Page 29: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/29.jpg)
1 . 取串指令指令格式: LODS 源串指令功能:( 1 ) AX/AL ( DS :( SI ))( 2 ) SI ( SI )±1 或 2( 3 )对标志寄存器无影响
2 . 存串指令指令格式: STOS目的串 /STOSB/STOSW指令功能:( 1 ) ES :( DI ) ( AX ) / ( AL)( 2 ) DI ( DI )±1 或 2( 3 )对标志寄存器无影响
![Page 30: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/30.jpg)
3 .串比较指令指令格式: MOVS目的串、源串 /MOVSB/MOVSW指令功能:( 1 )( ES :( DI )) ( DS :( SI ))( 2 ) SI ( SI )±1 或 2 , DI ( DI )±1 或 2( 3 )对标志寄存器无影响
4. 串比较指令指令格式: CMPSI 源串,目的串 /CMPSB/CMPSW指令功能:( 1 )( DS :( SI )—( ES :( DI ))( 2 ) SI ( SI )±1 或 2 , DI ( DI )±1 或 2( 3 )影响标志位 OF , SF , ZF , AF , PF , CF
![Page 31: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/31.jpg)
5 .串搜索指令指令格式: SCAS目的串 /SCASB/SCASW指令功能:( 1 )( AX/AL)—( ES :( DI ))( 2 ) DI ( DI )±1 或 2( 3 )影响标志位 OF , SF , ZF , AF , PF , CF
6. 重复前缀指令( 3 条)指令格式: REP重复执行串操作指令的条件是:( CX )≠ 0指令格式: REPE/REPZ重复执行串操作指令的条件是:( CX )≠ 0AND ZF=1指令格式: REPNE/REPNZ重复执行串操作指令的条件是:( CX )≠ 0 AND ZF=1
![Page 32: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/32.jpg)
五、处理器控制指令
1. 标志位操作指令2. 与外部事件同步的指令3. 空操作指令
![Page 33: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/33.jpg)
§4.5 提高 CPU 性能的一些措施
了解自学
![Page 34: 第四章 典型 CPU 及指令系统举例](https://reader033.vdocuments.pub/reader033/viewer/2022061423/5681348c550346895d9b737e/html5/thumbnails/34.jpg)
作业 :
见教材 P164 , T3----27做在书上
作业:做在作业本上1 、编写一程序段,将 AL的低 4 位与 BL的低4 位互换, AL和 BL的高 4 位保持不变。2 、编写计算 5X-Y+10多项式值的程序段。说明:多项式值存于 AX 中, X 、 Y是无符号数,设中间和最后结果不超过 16 位二进制数。