870 likes | 1.37k Views
第 2 章 8086/8088 微处理器. 教学重点: 1 、 8086/8 微处理器的编程结构,处理器状 态字 PSW 各个标志位 2 、 8086/8 微机系统的存储器组织 。. 第一节 8086/8 的编程结构及存储器组织. 8086 微处理器的一般性能特点: 16 位的内部结构, 16 位双向数据信号线; 20 位地址信号线,可寻址 1M 字节存储单元; 具有较强的指令系统. 2.1 8088/8086 的编程结构. 8088 的 编程结构 从功能分成两个单元
E N D
第2章 8086/8088微处理器 教学重点: 1、8086/8微处理器的编程结构,处理器状 态字PSW各个标志位 2、8086/8微机系统的存储器组织。 第一节8086/8的编程结构及存储器组织
8086微处理器的一般性能特点: 16位的内部结构,16位双向数据信号线; 20位地址信号线,可寻址1M字节存储单元; 具有较强的指令系统.
2.1 8088/8086的编程结构 8088的编程结构从功能分成两个单元 (1)总线接口单元BIU——管理8088与系统总线的接口,负责CPU对存储器和外设进行访问 (2)执行单元EU——负责指令的译码、执行和数据的运算 • 两个单元相互独立,分别完成各自操作 • 两个单元可以并行执行,实现指令取指和执行的流水线操作
8086/8088的编程结构 地址加法器 20位 ∑ AH AL BH BL CH CL 16/8位 CS 通用 寄存器 DH DL DS SP SS 输入/输出控制电路 BP ES SI IP 外部总线 DI 内部暂存器 16位 执行部分控制电路 1 2 3 4 ALU 8位 指令队列 标志寄存器 总线接口部件 (BIU) 返回 执行部件 (EU)
8088的指令执行过程 返回
(3) 8086/8088BIU的特点 ①8086/8088的指令队列分别为6/4个字节,在执行指令的同时,可从内存中取出后续的指令代码,放在指令队列中。 ②地址加法器用来产生20位物理地址。8086/8088可用20位地址寻址1M字节的内存空间,而CPU内部的寄存器都是16 位,需要由20位的地址加法器完成地址运算。 如:CS=0FE00H,IP=0400H,则表示要取指令代码的物理地址为0FE400H。
(4) BIU与EU的动作协调原则 ①每当8086的指令队列中有两个空字节,或8088的指令队列中有一个空字节时,BIU就会自动把指令取到指令队列中。其取指的顺序是按指令在程序中出现的前后顺序。
(4) BIU与EU的动作协调原则 ②每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令的代码,执行指令的过程中,如果必须访问存储器或者I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或者I/O端口的操作 ;如果BIU正处于空闲状态,立即响应EU的总线请求。如BIU正取指令,则BIU完成取指总线周期,再响应EU的访问总线请求。
(4) BIU与EU的动作协调原则 ③当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态。 ④在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,BIU会接着往指令队列装入转向的另一程序段中的指令代码。
(4) BIU与EU的动作协调原则 将8086/8088 CPU分成二个独立的功能部件使二者能够并行工作,把取指令工作和分析指令、执行指令工作重叠进行,从而提高CPU的工作效率,加快指令的执行速度。指令队列可以被看成是一个特殊的RAM,它的工作原理是"先进先出",写入的指令只能存放在队列尾,读出的指令是队列头存放的指令。EU和BIU之间就是通过指令队列联系起来,多数情况下,BIU在不停地向队列写入指令,而EU每执行完一条指令后,就向队列读取下一条指令。二者的动作既独立,又协调。
(5) 8086/8088CPU内部寄存器 8086内部寄存器有: • 4个通用寄存器 • 4个专用寄存器 • 4个段寄存器 • 1个指令指针寄存器 • 1个标志寄存器
①8086的通用寄存器 • 8086的16位通用寄存器是: AX BX CX DX 其中AX称为累加器,BX称为基址寄存器, CX称为计数寄存器,DX称为数据寄存器 • 8086的8位通用寄存器是: AH BH CH DH AL BL CL DL • 对其中某8位的操作,并不影响另外对应8位的数据。
数据寄存器 • 数据寄存器用来存放计算的结果和操作数,也可以存放地址。 • 每个寄存器又有它们各自的专用目的: • AX--累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等; • BX--基址寄存器,常用做存放存储器地址; • CX--计数器,作为循环和串操作等指令中的隐含计数器; • DX--数据寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。
② 8086的专用寄存器 • 指针寄存器SP和BP • SP是堆栈指针寄存器,它和堆栈段寄存器SS一起来确定堆栈在内存中的位置; • BP是基数指针寄存器,用于存放基地址。 • 变址寄存器SI和DI • SI是源变址寄存器 • DI是目的变址寄存器,用于指令的变址寻址方式。
③ 段寄存器 DS 数据段寄存器 (Data Segment) CS 代码段寄存器 (Code Segment) ES 附加段寄存器 (Extra Segment) SS 堆栈段寄存器 (Stack Segment) 这些段寄存器的内容与有效的地址一起,用于确定内存的物理地址。通常用CS、DS、ES以及SS用于确定代码段、数据段、附加段以及堆栈段的基地址。
④指令指针IP • 指令指针寄存器IP,指示代码段中指令的偏移地址。 • 它与代码段寄存器CS联用,确定下一条指令的物理地址。 • 计算机通过CS : IP寄存器来控制指令序列的执行流程。 • IP寄存器是一个专用寄存器。
15 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF ⑤标志寄存器 • 标志(Flag)用于反映指令执行结果或控制指令执行形式。 • 8086处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器)。 程序设计需要利用标志的状态
标志的分类 • 6个状态标志:用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它的状态。共有6个状态标志位: CF ZF SF PF OF AF • 3个控制标志:可由程序根据需要用指令设置,用于控制处理器执行指令的方式 DF IF TF
进位标志CF(Carry Flag) • 当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。 49H + 6DH=B6H, 没有进位:CF = 0 BBH + 6AH=(1)25H,有进位:CF = 1
零标志ZF(Zero Flag) • 若运算结果为0,则ZF = 1; 否则ZF = 0 注意: ZF为1表示的结果是0 49H + 6DH=B6H,结果不是零:ZF = 0 75H + 8BH=(1)00H,结果是零:ZF = 1
符号标志SF(Sign Flag) • 运算结果最高位为1,则SF = 1;否则SF = 0 有符号数据用最高有效位表示数据的符号 所以,最高有效位就是符号标志的状态 49H + 6DH=B6H,最高位是1:SF = 1 75H + 8BH=(1)00H,最高位是零:SF = 0
奇偶标志PF(Parity Flag) • 当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 0 PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作 3AH + 7CH=B6H=10110110B 结果中有5个1,是奇数:PF = 0
溢出标志OF(Overflow Flag) • 若算术运算的结果有溢出, 则OF=1;否则 OF=0 49H + 6DH=B6H,产生溢出:OF = 1 75H + 8BH =(1)26H,没有溢出:OF = 0
什么是溢出? • 处理器内部以补码表示有符号数 • 8位补码表达的整数范围是:+127~-128 • 16位补码表达的范围是:+32767~-32768 • 如果运算结果超出这个范围,就产生了溢出 • 有溢出,说明有符号数的运算结果不正确 49H+6DH=B6H,就是73+109=182, 已经超出-128~+127范围,产生溢出,故OF=1; 另一方面,补码B6H表达真值是-74,显然运算结果也不正确。
溢出和进位 • 溢出标志OF和进位标志CF是两个意义不同的标志。 • 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确。 • 溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
溢出和进位的对比 例1:49H + 6DH=B6H 无符号数运算: 73+109=182 范围内,无进位 有符号数运算: 73+109=182 范围外,有溢出 例2:BBH + 6AH=(1)25H 无符号数运算: 187+106=293 范围外,有进位 有符号数运算: -69+106=37 范围内,无溢出
溢出的判断 • 判断运算结果是否溢出有一个简单的规则: • 只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出,因为,此时的运算结果显然不正确。 • 其他情况下,则不会产生溢出
辅助进位标志AF(Auxiliary Carry Flag) • 运算时D3位(低半字节)有进位或借位时,AF = 1;否则AF = 0。 这个标志主要由处理器内部使用,用于十进制算术运算调整指令中,用户一般不必关心。 49H + 6DH=B6H,D3有进位:AF = 1
方向标志DF(Direction Flag) • 用于串操作指令中,控制地址的变化方向: • 设置DF=0,存储器地址自动增加; • 设置DF=1,存储器地址自动减少。 • CLD指令复位方向标志:DF=0 • STD指令置位方向标志:DF=1
中断允许标志IF(Interrupt-enable Flag) • 用于控制外部可屏蔽中断是否可以被处理器响应: • 设置IF=1,则允许中断; • 设置IF=0,则禁止中断。 • CLI指令复位中断标志:IF=0 • STI指令置位中断标志:IF=1
陷阱标志TF(Trap Flag) • 用于控制处理器进入单步操作方式: • 设置TF=0,处理器正常工作; • 设置TF=1,处理器单步执行指令。 • 单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断 • 这种内部中断称为单步中断 • 所以TF也称为单步标志 • 利用单步中断可对程序进行逐条指令的调试 • 这种逐条指令调试程序的方法就是单步调试
标志位名 置位符号(=1) 复位符号(=0) 溢出标志OF OV NV 方向标志DF DN UP 中断标志IF EI DI 符号标志SF NG PL 零标志ZF ZR NZ 辅助标志AF AC NA 奇偶标志PF PE PO 进位标志CF CY NC DEBUG中各标志位的符号表示
2.2 存储器组织 8088/8086有20根地址总线,因此,它可以直接寻址的存储器单元数为:220=1MB 如何实现16位的存储单元存放20位的地址空间? 由于CPU内部的寄存器都是16位的,为了能够提供20位的物理地址,系统中采用了存储器分段的方法。规定存储器的一个段为64KB,由段寄存器来确定存储单元的段地址,由指令提供该单元相对于相应段起始地址的16位偏移量。这样,系统的整个存储空间可分为16个互不重叠的逻辑段。存储器的每个段的容量为64KB,并允许在整个存储空间内浮动,即段与段之间可以部分重叠、完全重叠、连续排列,非常灵活。
2.与存储单元地址相关的几个概念 物理地址: 一个存储单元的实际地址(20位)。物理地址与存储单元是一一对应关系。(20202H) 逻辑地址: 是指段地址和偏移地址,是指令中引用的形式地址。一个逻辑地址只能对应一个物理地址,而一个物理地址可以对应多个逻辑地址。(2000:0202H)
2.与存储单元地址相关的几个概念 段地址: 是指一个段的起始地址,最低4位为零,一般将其有效数字16位存放在段寄存器中。(2000H) 偏移地址: 段内存储单元相对段地址的距离(16位)。同一个段内,各个存储单元的段地址是相同的,偏移地址是不同的。(0202H)
3.物理地址的计算方法 物理地址=段地址+偏移地址 =段寄存器内容×10H+偏移地址 取指令物理地址=(CS)×10H+(IP) 堆栈操作物理地址=(SS)×10H+(SP)/(BP的表达式) 存储器操作数物理地址=(DS)/(ES)×10H+偏移地址
程序代码、数据量不大时,可把它们放在同一段内(64KB的范围内),以减少指令的长度,提高运行速度。程序代码、数据量不大时,可把它们放在同一段内(64KB的范围内),以减少指令的长度,提高运行速度。 内存分段为程序的浮动装配创造了条件 物理地址与形式地址不一一对应 各个分段之间可以重叠。 4.存储器分段组织的特点
5.特殊的内存区域 中断矢量区: 00000H—003FFH共1K字节,用于存放256种中断类型的中断矢量,每个中断矢量占4个字节,共256×4=1024=1K
5.特殊的内存区域 显示缓冲区: B0000H—B0F9FH约4000(25×80×2)字节,是单色显示器的显示缓冲区,存放文本方式下,所显示字符的ASCII码及属性码;B8000H —BBF3FH约16K字节,是彩色显示器的显示缓冲区,存放图形方式下,屏幕显示象素的代码。
5.特殊的内存区域 启动区: FFFF0H—FFFFFH共16个单元,用于存放一条无条件转移指令的代码,转移到系统的初始化部分。
6.CS、DS、SS和其他寄存器组合 指向存储单元的示意图
习题 1、8086/8088 CPU由哪两部分组成?它们的 主要功能各是什么?它们之间是如何协调 工作的? 2、8086/8088 CPU中有哪些寄存器?各有 什么用途?标志寄存器F有哪些标志位? 各在什么情况下置位? 3、8086/8088系统中储存器的逻辑地址和 物理地址之间有什么关系?表示的范围 各为多少?
习题 4、已知当前数据段位于储存器的 A1000H到B0FFFH范围内,问DS=? 5、某程序数据段中存有两个数据字 1234H和5A6BH,若已知DS=5AA0H,它们的偏移地址分别为245AH和3245H,试画出它们在储存器中的存放情况。
第二节 8086/8088微处理器外部结构及工作模式 重点:8086/8088CPU的外部结构,即引脚信号及其功能 8086/8088CPU的两种工作模式
1、8086/8088CPU的两种工作模式 最小模式:系统中只有一个微处理器,所有的总线控制信号直接由8086/8088CPU产生,系统中的总线控制电路被减到最少 最大模式:系统中至少包含两个微处理器,其中一个为主处理器8086/8088CPU,其它微处理器为协处理器,协助主处理器工作
8087:数值运算协处理器,实现多种类型的数值运算(整型、浮点型数值),超越函数(三角函数、对数函数)的计算等8087:数值运算协处理器,实现多种类型的数值运算(整型、浮点型数值),超越函数(三角函数、对数函数)的计算等 8089协处理器:有专门用于输入/输出操作的指令系统,可直接为输入/输出设备服务,使主处理器不再承担这类工作。常用在输入/输出操作比较频繁的系统中
2、8086/8088CPU的引脚信号和功能 8086/8088CPU芯片都是双列直插式集成电路芯片,40个引脚,其中32个引脚在两种工作模式下的名称和功能相同,8个引脚在不同的工作模式下具有不同的名称和功能