920 likes | 1.18k Views
第四章 典型 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 基本组成。. 重点难点:
E N D
学习内容: • 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.1 8086/8088CPU的结构 1. 8086/8088内部结构: • 8086/8088CPU采用指令流水线结构,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现, • 即总线接口部件BIU与执行部件EU 主要任务是完成CPU与主存储器或I/O之间的信息传送。 主要任务是执行指令
1、执行部件EU:包括一个16位算术逻辑部件ALU、一组通用寄存器、暂存器、标志寄存器和EU控制器。1、执行部件EU:包括一个16位算术逻辑部件ALU、一组通用寄存器、暂存器、标志寄存器和EU控制器。 2、EU主要任务是执行指令。 3、执行部件EU功能见教材P114。
1、总线接口部件BIU:包括一段寄存器、指令指针、6字节的指令队列、20位总线地址形成部件和总线控制逻辑。1、总线接口部件BIU:包括一段寄存器、指令指针、6字节的指令队列、20位总线地址形成部件和总线控制逻辑。 2、BIU主要任务是完成CPU与主存储器或I/O端口之间的信息传送。 3、总线接口BIU功能见教材P115。 • 总线接口部件BIU见教材P115。
2. 8086/8088主存地址的形成 段基值:在BIU中设置段寄存器,用以存放20位段起始地址的高16位,称为段基值。 偏移量:由EU或指令指针IP提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。(16位) 段基址:由段基值左移4位后,得到一个物理地址。 二者相加形成20位主存单元的物理地址。
2. 8086/8088主存地址的形成 我们把提供一个20位地址的两个寄存器中的值分别称之为: 20位寄存器中的值称之为段基址(Segment base value) 16位寄存器中的值称之为偏移量(Offset)或有效地址(Effective address) 段基址是由四个段寄存器提供20位的高16位,低四位补0形成的 偏移量是由CPU内的EU部分提供的
§4.1. 8086/8088寄存器 • 1. 段寄存器: • CS(代码段寄存器)——用来存放程序的指令代码序列,用来存放当前代码段段首址的高16位,即段基值。 • DS(数据段寄存器)——存放程序的有关数据,用来存放当前数据段的段基值。 • SS(堆栈段寄存器)——用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。 • ES(附加段寄存器)——存放运算结果或辅助数据,存放当前附加段的段基值。
————8086/8088CPU 1.段寄存器
2 . 通用寄存器 (1)地址指针寄存 (2)数据寄存器 3. 用于控制的寄存器 (1)指令指针IP: (2)标志寄存器FR 作用类似于PC,当现行指令执行完毕,由IP提供下一条指令地址
§4.2 主存储器§4.2.1 8086/8088主存储器的特点 • 8086/8088CPU有20条地址引出线,因此具有1M字节(210*210=220)的寻址能力,即可以在1M个字节单元中寻找出所需的一个存储单元。 • 在8086/8088主存中,一个字节数据占用一个存储单元。一个字(Word)数据(16位)则占用二个相邻的存储单元,数的低8位(低字节)存放在低地址单元;高8位(高字节)存放在高地址单元,并以低字节所在存储单元地址作为字数据的单元地址。
§4.2.2 主存储器的段结构 • 8086/8088把1MB主存空间按需要划分为若干段(segment)。每个段都由连续的字节单元组成,最大长度为64K(即65536),可作为独立寻址的逻辑单位。 • 一个段起始单元的地址,称为对应段的段基址(20位)。
§4.2.2 主存储器的段结构 • 在程序中设置的段称为逻辑段。 • 主存可分成任意多个段,但在某一时刻,一个程序只能访问4个段寄存器指向的当前段的内容。4个段寄存器CS、DS、SS和ES,分别保存代码段、数据段、堆栈段和附加段这4个当前段的段基址的高16位——段基值。
§4.2.3 逻辑地址与物理地址 • 逻辑地址——段基值:偏移量(书写形式) (1) 段基值:由某个段寄存器(CS,DS,SS,ES)给出,它是段基址的高16位。 (2) 偏移量:(也称偏移地址)由IP或EU按寻址方式产生的有效地址提供,它是段内某存储单元与段基址之间的字节距离。 • 物理地址——是指实际的20位主存单元地址,1MB主存空间的每个存储单元只对应惟一的物理地址,其范围为00000H—FFFFFH。
逻辑地址——物理地址的转换方式: 将段基值左移4位形成20位段基址,再加上偏移量,产生20位物理地址。 • 逻辑地址的来源 • CPU在执行指令时,是按指令所需的操作类型从不同的来源获得存储单元的逻辑地址,然后形成对应的物理地址以访问主存。(具体内容见教材的P124表4-2逻辑地址的来源)
§4.3 8086/8088堆栈 §4.3.1 堆栈组织 • 8086/8088的堆栈是由SS指定的一段存储区(≤64KB)构成,并采用向上(地址码减小)生成方式,由堆栈指针SP指向栈顶。 • SS提供堆栈段的段基值,SP的内容为栈顶单元相对堆栈段段基址的字节距离(偏移量)。 • 8086/8088堆栈规定以字(2个字节)为单位进行存取。
§4.3.2 堆栈操作 堆栈组织
§4.3.2 堆栈操作 • 先设置堆栈,主要是对堆栈段寄存器SS物堆栈指针SP赋初值。 • 对堆栈的操作均在栈顶进行的,其基本操作的 • 压栈 • 出栈
压 栈 • 压栈----用压栈指令PUSH可以将通用寄存器、段寄存器或字存储单元内容压入堆栈。 • 执行压栈指令PUSH的操作过程分二步进行: (1)(SP)-2——SP;首先修改栈顶指针,SP减2以指向空字单元(即新栈顶) (2)数据——(SP);将寄存器或存储单元内容送入SP指向的空字单元中
压栈指令 (BL)=78H (BH)=56H (SP)-2→SP; (BX) →(SP) BX 56 78 (AL)=34H (SP)-2→SP; (AX) →(SP) AX 12 34 (AH)=12H 压栈之前(SP)
出栈 • 出栈----用弹出指令POP可以将当前栈顶字单元内容取出送到通用寄存器、段寄存器或字存储单元中。 • 执行出栈指令POP的操作过程分二步进行: (1)((SP))——寄存器/字单元;将栈顶单元内容送到指定的寄存器或字单元 (2)(SP)+2——SP;修改栈顶指针,SP加2以指向新栈顶
(SP) →BX; (SP)+2→SP (BL)=78H BX 56 78 (BH)=56H (AL)=34H (SP) →AX; (SP)+2→SP AX 12 34 (AH)=12H BX 出栈之后(SP) AX
§4.4 8086/8088指令系统 • §4.4.1 8086/8088寻址方式 1 . 寄存器寻址方式:指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。
操作码 REC Ri 操作数S 是指令代码中的寻址字段,表示操作数的寄存器地址 • 寻址过程: 例:(BX) =1234H MOV AX,BX :将BX中的内 容送到AX中 (AX) =1234H
2. 立即数寻址方式 • 立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到BIU的指令队列中。 操作码 操作码 一条指令 AX AX 一条指令 34H F5H 12H (A)MOV AX,1234H (B)MOV AL,0F5H
3. 存储器寻址方式 • 在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量) • 段基值:是由某个段寄存器提供,由指令隐含给出。 • 偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由CPU的EU按指令中操作数的寻址方式计算而得到,又称为有效地址EA。 • 有效地址EA:由位移量、基地址、变址量三个地址分量的某种组合求得。
段基值左移四位 段基址 段基值
(1)直接寻址方式 • 定义:指令所需的操作数存放在存储单元中,操作数的有效地址EA直接由指令代码中的位移量提供。 • 寻址过程: • 在源程序中,直接寻址方式可用数值地址或符号地址来表示。 EA
用数值地址表示: • 在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。 • MOV BX,DS:[1000H] • 完成将当前数据段偏移1000H个字节的字单元内容1234H送入BX中。
用符号地址表示: • 在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。 • 若指令中不必给出数据段寄存器名,即隐含使用DS;其他须指定。 • 例题:P130
(2)寄存器间接寻址方式 • 寄存器间接寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA直接从基址寄存器(BP或BX)或变址寄存器(SI或DI)中获得。 • 见P131的图4-22 寄存器间接寻址方式。 • 若以BX,SI或DI间接寻址时,隐含使用的段寄存器是DS,若以BP间接寻址时,隐含使用的段寄存器是SS。
(2)寄存器间接寻址方式 是指令代码中的寻址字段 寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。 SI OR DI EA OR BX OR BP 寻址过程
(3)变址寻址和基址寻址方式 • 变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA是基址寄存器(BP或BX)或变址寄存器(SI或DI)的内容与指令中给出的位移量(8位或16或)两个地址分量之和。 • 使用SI或DI称为变址寻址。 • 使用BX或BP称为基址寻址。
变址寻址和基址寻址方式 SI OR DI OR EA + BX OR BP
寻址方式的使用格式: • 变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。 • 典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量 • 例题4-1:见教材132页。
(4)基址变址寻址方式 SI OR EA + DI BX OR BP 寻址过程
寻址方式的使用格式: • 基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改) • 例题4-2:见教材133-134页。
上半部分表示由CPU的执行部件EU根据寻址方式计算有效地址EA。上半部分表示由CPU的执行部件EU根据寻址方式计算有效地址EA。 下半部分表示由总线接口部件BIU形成操作数的物理地址。按操作数的物理地址就可直接访问操作数的存储单元。
4. 串操作寻址方式 • 串操作寻址方式: • 串操作指令规定: • 隐含使用SI作为在数据段中的源串(即源操作数)的地址指针 • 隐含使用DI作为在附加段中的目的串的地址指针。 SI 源串有效地址EA DI 目的串有效地址EA
5. I/O端口寻址 • 了解
§4.4.2 8086/8088指令 • 8086/8088指令按操作数地址划分: 双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
8086/8088指令按功能划分: 传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令
一、传送类指令 • 分类:(仅存标志指令SAHF、标志出栈指令POPF对标位有影响) 数据传送类指令 交换指令 标志位传送指令 地址传送指令
1.数据传送类指令(Move) • 格式:MOV DEST,SRC • 功能: DEST (SRC) 将源地址的内容(源操作数)传送到目的地址中。传送指令执行后源操作数保持不变。
1.数据传送类指令(Move) • 注意: • MOV指令中的两个操作数可同为字或字节,但两者位数必须一致。 • 目的操作数不能为立即数。 • 两个操作数不能同时为存储器操作数。 • MOV指令中立即数不能直接传送给段寄存器,而且段寄存器之间也不能直接传送数据,但可以通过寄存器实现间接传送。 • 一条MOV指令不能完成两个存储单元之间的数据传送,但可以用两条指令来实现。
数据传送指令(Move)(指令中只允许两个操作数的其中一个在主存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送)数据传送指令(Move)(指令中只允许两个操作数的其中一个在主存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送)