670 likes | 813 Views
涉及的知识范围. CPU 体系结构 软件(汇编语言设计) 接口电路. 汇编语言程序主要特性及应用领域. 主要特性 与机器相关性 执行的高效率 编写程序的复杂性 调试的复杂性 适用的领域 要求执行效率高、反应快的领域,如:操作系统内核,工业控制,实时系统等; 系统性能的瓶颈,或频繁被使用子程序或程序段; 与硬件资源密切相关的软件开发,如:设备驱动程序等; 受存储容量限制的应用领域,如:家用电器的计算机控制功能等; 没有适当的高级语言开发环境。 不宜使用的领域 大型软件的整体开发; 没有特殊要求的一般应用系统的开发等。.
E N D
涉及的知识范围 • CPU体系结构 • 软件(汇编语言设计) • 接口电路
汇编语言程序主要特性及应用领域 • 主要特性 • 与机器相关性 • 执行的高效率 • 编写程序的复杂性 • 调试的复杂性 • 适用的领域 • 要求执行效率高、反应快的领域,如:操作系统内核,工业控制,实时系统等; • 系统性能的瓶颈,或频繁被使用子程序或程序段; • 与硬件资源密切相关的软件开发,如:设备驱动程序等; • 受存储容量限制的应用领域,如:家用电器的计算机控制功能等; • 没有适当的高级语言开发环境。 • 不宜使用的领域 • 大型软件的整体开发; • 没有特殊要求的一般应用系统的开发等。
可编程接口与应用 • 可编程并输入/输出接口 8255A • 可编程定时器/计数器 8253 • DMA控制器 8273 A • 串行通信和串行接口 • 数/模,模/数转换
教学重点 • 寄存器的结构 • 存储器组织 • 逻辑地址到物理地址的变换 • 8086的两种工作模式及其配置
教学难点 • 8086 CPU在最小模式和最大模式下的引脚功能
2.1 8086/8088 微处理器的结构 8086/8088微处理器是Intel公司推出的第三代CPU芯片。 8086微处理器的一般性能特点: • 16位的内部结构,16位双向数据信号线; • 20位地址信号线,可寻址1M字节存储单元; • 较强的指令系统(133条指令); • 利用第16位的地址总线来进行I/O端口寻址,可寻址64K个I/O端口; • 中断功能强,可处理内部软件中断和外部中断,中断源可达256个; • 单一的+5V电源,单相时钟5MHz。 8086/8088 CPU具有40个引脚, 8086 外部数据总线宽度16位, 8088的数据总线宽度8位,具有最大和最小两种工作模式。
2.1.1 8086/8088的功能结构 • 8086和8088结构极为相似,都是由两大部构成 • 总线接口单元BIU • 负责与存储器和I/O接口之间的信息传送 • 由寄存器、指令指针寄存器、指令队列、地址加法器以及总线控制逻辑组成。 • 8086指令队列长度6字节,8088指令队列长度4字节 • 执行单元EU • 负责指令的执行 • 由算术逻辑单元ALU、通用寄存器、标志寄存器和EU控制电路组成。
执行部件 通用寄存器 四个专用寄存器 SP:堆栈指针,其内容与堆栈段寄存器SS的 内容一起,提供堆栈操作地址。 BP:基址指针:构成段内偏移地址的一部分. SI:(Source Index):SI含有源地址意思,产 生有效地址或实际地址的偏移量。 DI:(Destination Index):DI含有目的意思, 产生有效地址或实际地址的偏移量。 算术逻辑单元ALU: 主要是加法器。大部分指令 的执行由加法器完成。 标志寄存器: 16位字利用了9位。 标志分两类: 状态标志(6位):反映刚刚完成的操作结果情况。 控制标志(3位):在某些指令操作中起控制作用。 总线接口部件
20位地址加法器 16位的指令指针寄存器IP: IP中的内容是下一条指令 对现行代码段基地址的偏移量, 6字节的指令队列 指令队列共六字节,总线接 口部件BIU从内存取指令, 取来的总是放在指令队列中; 执行部件EU从指令队列取指 令,并执行。 四个段寄存器:CS、DS、SS、ES CS管理代码段;DS管理数据段 SS管理堆栈段;ES管理附加段.
2.1.2 8086内部寄存器 累加器 AX 地址寄存器 控制寄存器 BX 计数器 CX IP 数据寄存器 通用寄存器 FLAGS DX SP CS 段寄存器 BP DS SS SI DI ES
2.1.2 8086内部寄存器 数据寄存器 • 4个数据寄存器:累加器AX、基址寄存器BX、计数寄存器CX、数据寄存器DX • 特点:可分为高8位(AH、BH、CH和DH)和低8位(AL、BL、CL和DL),这两组8位寄存器能分别寻址。这样,可以将数据寄存器当作一个16位寄存器,也可用作两个8位寄存器 • 可以用来存放8位或16位二进制操作数,这些操作数可以是参加操作数、中间结果、操作数地址 • 大多数算术和逻辑运算指令可以使用这些寄存器
2.1.2 8086内部寄存器 指针和变址寄存器 • 4个:堆栈指针SP、基址指针BP、源变址寄存器SI、目的变址寄存器DI • 这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数和有效地址 • SP、BP用于堆栈操作,SP用来确定堆栈在内存中的地址,BP用来存放现行堆栈段的一个数据区的“基址” • SI、DI用于变址操作,存放变址地址 • 这4个寄存器也可用作数据寄存器
2.1.2 8086内部寄存器 指令指针IP • 16位专用寄存器,IP指向当前需要取出的指令字节 • 当BIU从内存中取出一个指令字节后,IP自动加1,指向下一个字节 • IP指向的是指令地址的段内地址偏移量,又称偏移地址或有效地址 • 程序员不能对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 2.1.2 8086内部寄存器 标志寄存器FLAG • 16位,其中有6个状态位、3个控制位 • 6个状态位:CF、PF、AF、ZF、SF、OF • 3个控制位:IF、DF、TF
2.1.2 8086内部寄存器 标志寄存器FLAG(状态位) • 进位标志CF,反映算术运算后,最高位(字节操作为D7,字操作为D15)出现进位(或借位)的情况,有则为“1” • 奇偶标志PF,反映操作结果中“1”的个数情况,若为偶数,PF=1 • 辅助进位标志AF,反映一个8位量的低4位向高4位有无进位(或借位)的情况,有则置“1” 只判断AL中的结果
2.1.2 8086内部寄存器 标志寄存器FLAG (状态位) • 零标志ZF,反映运算结果是否为零的情况,结果为零,ZF置为“1” • 符号标志SF,反映运算结果的符号情况,若结果为负数,SF为“1”。SF的取值与运算结果最高位(字节操作为D7,字操作为D15)一致 • 溢出标记OF,反映带符号数运算结果是否超过机器所能表示的数值范围的情况,对字节运算为-128~+127,对字运算为-32768~+32767。若超过上述范围则称为“溢出”,OF=1
2.1.2 8086内部寄存器 • 溢出标志OF和进位标志CF是两个意义不同的标志 • 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确; • 溢出标志表示带符号数运算结果是否超出范围,运算结果已经不正确。 例1:49H + 6DH=B6H 无符号数运算:73+109=182 范围内,无进位 有符号数运算: 73+109=182 范围外,有溢出 例2:BBH + 6AH=(1)25H 无符号数运算:187+106=293 范围外,有进位 有符号数运算: -69+106=37 范围内,无溢出
2.1.2 8086内部寄存器 标志寄存器FLAG(控制位) • 方向标志DF,在进行字符串操作时,每执行一条串操作指令,对地址要进行一次调整,由DF决定地址是增还是减。若DF=1,则为减量;若DF=0则为增量 • 中断允许标志IF,表示系统是否允许外部的可屏蔽中断。若IF=1,表示允许中断。IF对非屏蔽中断及内部中断请求不起作用 • 跟踪标志TF,当TF=1时,CPU每执行完一条指令,便自动产生一个内部中断,对程序进行逐条检查,常用于程序的调试
2.1.2 8086内部寄存器 段寄存器 • 内存中通常存放三种信息: • 代码(指令):计算机执行何种操作 • 数据(字符、数值):程序处理的对象 • 堆栈信息:保存返回地址和中间结果 • 为清晰起见,这三类信息通常分别存放在各自的存贮区域内(存贮系统中的不同存贮段) • 8086/8088系统中把可直接寻址的1兆字节内存空间分为称作“段”的逻辑区域,每个段的物理长度为64K字节。每个段的起始地址的有关值存放在称为段寄存器的4个16位寄存器中
2.1.2 8086内部寄存器 段寄存器 • 内存中通常存放三种信息: • 代码(指令):计算机执行何种操作 • 数据(字符、数值):程序处理的对象 • 堆栈信息:保存返回地址和中间结果 • 为清晰起见,这三类信息通常分别存放在各自的存贮区域内(存贮系统中的不同存贮段) • 8086/8088系统中把可直接寻址的1兆字节内存空间分为称作“段”的逻辑区域,每个段的物理长度为64K字节。每个段的起始地址的有关值存放在称为段寄存器的4个16位寄存器中
2.1.2 8086内部寄存器 段寄存器 4个段寄存器为: • 代码段寄存器CS,指向当前的代码段,指令由此段取出 • 堆栈段寄存器SS,指向当前的堆栈段,堆栈操作所需的就是该段存贮单元的内容 • 数据段寄存器DS,指向当前数据段,通常用来存放程序变量 • 附加段寄存器ES,指向当前附加段,通常也用来存贮数据
2.1.3 8086/8088的存储器组织 存储器分段 • 8086 CPU寄存器皆为16位,内部ALU只能进行16位运算,因为8086 CPU对地址只能进行16位运算,寻址范围仅216=65536(64K)字节。所以引入“分段”概念,以获得20位地址 • 一个段是存储器的一个逻辑单位,其长度可达64KB,每个段都由连续的存储单元构成,是存储器中独立的可分别寻址的单位 • 每段第一个字节的位置称为“段起始地址”,可由软件指定 • 段起始地址:必须能被16整除(即XXXX0H) • 几个段可以相互重叠,也可以指向同一个空间
2.1.3 8086/8088的存储器组织 存储器组织 • 8086/8088 CPU有20条地址线,可以配置1MB的存储器,地址编号为00000H~FFFFFH • 存储空间按8位字节进行组织,每个存储单元存储一个字节数据,若存放“字”数据(16位),则存放在相邻两个存贮单元之中,高字节存放在高地址单元,低字节存放在低地址单元 • 指令字节数据和字数据可以自由地存放在任何字节地址中
2.1.3 8086/8088的存储器组织 小结 • 8086CPU有20条地址线 • 最大可寻址空间为220=1MB • 物理地址范围从00000H~FFFFFH • 8086CPU将1MB空间分成许多逻辑段(Segment) • 每个段最大限制为64KB • 段地址的低4位为0000B • 1MB内存最多可分为64K个段,即65536个段(段之间可相互重叠),至少可分成16个相互不重叠的段 • 这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址
2.1.3 8086/8088的存储器组织 逻辑地址和物理地址 • 在具有地址变换机构的计算机中,有两种存储器地址: • 逻辑地址(Physical Address):允许在程序中编排的地址 • 物理地址(Physical Address):信息在存储器中实际存放地址 • 在8086/8088系统中每个存储单元也都认为有这两类地址
2.1.3 8086/8088的存储器组织 段基址与段内偏移量 • 8086/8088与存储器之间所有信息交换都要使用20位的物理地址,而程序中所涉及的地址都是16位的逻辑地址,对所给定的任一存储单元而言有两部分逻辑地址: • “段基址”:决定该段第一个字节的位置 • “段内偏移量”:该存储单元相对于该段起始字节的距离 • 段基址存放在段寄存器CS、SS、DS和ES中 • 段内偏移量由SP、BP、SI、DI、IP以及相应寄存器的组合而组成
2.1.3 8086/8088的存储器组织 物理地址和逻辑地址的转换 • 将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址,即:物理地址=段基址*10H+段内偏移量 • 一个物理地址可以有多个逻辑地址 • 8086/8088CPU中BIU单元的加法器可用来完成物理地址的计算 16位段地址:16位的段内偏移 段地址0000 段内偏移 + 0000 物理地址(20位) 16位段地址 16位段内偏移 20位物理地址
2.1.3 8086/8088的存储器组织 段寄存器的使用约定 • 8086/8088对访问不同的内存段所使用的段寄存器和相应的偏移地址的来源有一些具体的约定
2.1.4 堆栈的概念 • 堆栈是利用RAM区中某一指定区域(由用户规定),用来暂存数据或地址的存储区。堆栈段是由段定义语句在内存中定义的一个段,段基址由SS指定。 • 堆栈存取数据的原则是“先进后出”,存取数据的方法是压入(PUSH)和弹出(POP)。 • 堆栈区的栈底是固定的最高地址,其栈顶根据堆栈数据的压入或取出的变化不断改变。栈顶是堆栈区的最低地址,用堆栈指针SP指示。 • 每执行一条PUSH指令,SP=(SP)-2,向堆栈压入16bit数据。 • 每执行一条POP指令,SP=(SP)+2,从堆栈弹出16bit数据 。
2.2 8086/8088的引脚功能 • 8086和8088都是16位CPU,具有40条引脚,采用双列直插式封装。 • 为了减少芯片的引线,8086/8088的许多引脚具有双重定义和功能,采用分时复用方式工作,即在不同时刻,这些引线上的信号是不相同的 • 8086/8088的最大和最小两种工作模式可以通过引脚选择 • 引脚分类:地址总线、数据总线、控制总线、其它(时钟与电源)
地址/状态线 地址/数据线 2.2 8086/8088的引脚功能 最小最大模式控制 MN/MX=1,最小模式 MN/MX=0,最大模式 读信号 总线保持请求信号 总线保持相应信号 存储器/IO控制信号 M/IO=1,选中存储器 M/IO=0,选中IO接口 写信号 数据发送/接收信号 DT/R=1,发送 DT/R=0,接收 数据允许信号 地址允许信号 非屏蔽中断 中断响应信号 准备好信号:表示内存 或I/O设备准备好, 可以进行数据传输。 测试信号:执行WAIT指令, CPU处于空转等待; TEST有效时,结束等待状态。 可屏蔽中断请求 复位信号
2.2 8086/8088的引脚功能 • 8086的两种工作方式 • 最小模式(组态) • MN/MX接+5V • 构成小规模的应用系统,只有8086一个微处理器, • 所有的总线控制信号均为8086产生,系统中的总线控制逻辑电路,减少到最少。 • 最大模式(组态) • MN/MX接地。 • 用于大型(中型)8086/8088系统中,系统总是包含有两个或多个微处理器,其中一个主处理器就是8086或8088,其它的处理器称协处理器,协助主处理器工作。 • 需要总线控制器来变换和组合控制信号。
2.2 8086/8088的引脚功能 • 最小模式下的引脚说明 • 地址/数据总线 • AD15~AD0 (Address Data Bus) • 地址/数据分时复用信号,双向,三态。在T1状态(地址周期)AD15~AD0上为地址信号的低16位A15~A0;在T2 ~ T3状态(数据周期)AD15~AD0 上是数据信号D15~D0。
2.2 8086/8088的引脚功能 • 地址/状态线 • A19~A16/S6~S3 (Address/Status) • 地址/状态复用信号,三态输出。在总周期的T1状态A19/S6~A16/S3上是地址的高4位。在T2~T4状态,A19/S6~A16/S3上输出状态信息。 • 这些状态信息中,S6恒等于0,S5指示中断允许标志位IF的状态,S4、S3的组合指示CPU当前正在使用的段寄存器,其编码见表
S4 S3 当前正在使用的段寄存器 0 0 ES 0 1 SS 1 0 CS或未使用任何段寄存器 1 1 DS 2.2 8086/8088的引脚功能 • S4、S3的组合编码
2.2 8086/8088的引脚功能 • 控制总线 • (1)BHE/S7 (Bus High Enable/Status) • 数据总线高8位使能和状态复用信号,三态输出。在总线周期T1状态,BHE有效,表示数据线上高8位数据有效。在T2~T4状态BHE/S7 输出状态信息S7。S7在8086中未定义。
2.2 8086/8088的引脚功能 • (2) RD (Read) • 读信号,三态输出,此引脚输出为低电平时,表示CPU正在对存储或I/O端口进行读操作。 • (3) WR (Write) • 写信号,三态输出,此引脚输出为低电平时,表示CPU正在对存储或I/O端口进行写操作。 • (4)M/IO (Memory/IO ) • 存储器/IO端口控制信号,三态输出。用来区分当前操作是访问I/O端口还是存储器。M/IO为高电平时,表示当前CPU正在访问存储器,M/IO为低电平时,表示当前CPU正在访问I/O端口。
2.2 8086/8088的引脚功能 • (5)READY • 准备就绪信号。由外部输入,高电平有效,它是由被访问的内存或I/O设备发出的响应信号,当其有效时,表示CPU访问的存储器或I/O端口己准备好传送数据。当READY无效时,要求CPU插入一个或多个等待周期Tw,直到READY信号有效为止。 • (6)INTR( Interrupt Request) • 中断请求信号,由外部输入,电平触发,高电平有效。INTR有效时,表示外部设备向CPU发出中断请求,CPU在每条指令的最后一个时钟周期对INTR进行测试,一旦测试到有中断请求,并且当中断允许标志IF=1时,则暂停执行下条指令转入中断响应周期。
2.2 8086/8088的引脚功能 • (7)INTA (Interrupt Acknowledge) • 中断响应信号。向外部输出,低电平有效,表示CPU响应了外部发来的INTR信号。 • (8)NMI (Non—Maskable Interrupt Reques • 不可屏蔽中断请求信号。由外部输入,上升沿触发,正跳沿有效。CPU一旦测试到NMI请求信号,待当前指令执行完就自动从中断入口地址表中找到类型2中断服务程序的入口地址,并转去执行。
2.2 8086/8088的引脚功能 • (9)TEST • 测试信号。由外部输入,低电平有效。当CPU执行WAIT指令时(WAIT指令是用来使处理器与外部硬件同步),每隔5个时钟周期对TEST进行一次测试,若测试到该信号无效,则CPU继续执行WAIT指令,即处于空闲等待状态;当CPU测到TEST输入为低电平时,则转而执行WAIT的下一条指令。由此可见,TEST对WAIT指令起到了监视的作用。
2.2 8086/8088的引脚功能 • (10)RESET • 复位信号。由外部输入,高电平有效。RESET信号至少要保持4个时钟周期,CPU接收到该信号后,停止进行操作,并对标志寄存器(FR)、IP、DS、SS、ES及指令队列清零,而将CS设置为FFFFH。当复位信号变为低电平时,CPU从FFFF0H开始执行程序,由此可见,采用8086CPU计算机系统的启动程序就保持在开始的存储器中。
2.2 8086/8088的引脚功能 • (11)ALE(Address Latch Enable) • 地址锁存允许信号,三态输出,高电平有效。当它为高电平时,表明CPU地址线上有有效地址,用来作为地址锁存器的锁存控制信号。 • (12)DEN (Data Enable) • 数据允许信号,三态输出。该信号低电平有效,表示数据总线上有有效数据。它在每次访问内存或I/O端口以及在中断响应期间有效。它常用作数据总线驱动器的片选信号。
2.2 8086/8088的引脚功能 • (13)DT/R (Data Transmit/Receive) • 数据传送方向控制信号,三态输出。在8086系统中,通常采用8286或8287作为数据总线的驱动器,用DT/R信号来控制数据驱动器的数据传送方向。高电平时,CPU向存储器或I/O端口发送数据;低电平时,CPU从存储器或I/O端口接收数据。
2.2 8086/8088的引脚功能 • (14)HOLD(Hold Request) • 总线请求信号。由外部输入,高电平有效器向CPU请求使用总线。 • (15)HLDA(Hold Acknowledge) • 共享总线的处理总线请求响应信号。向外部输出,高电平有效。
2.2 8086/8088的引脚功能 • (16)MN/MX (Minimum/Maximum Mode Control) • 最大最小模式控制信号,输入。MN/MX=1(+5V),CPU工作在最小模式。MN/MX=0(接地), CPU则工作在最大模式。 • 其他 • (1)GND地 • (2)VCC电源,接+5V
2.2 8086/8088的引脚功能 • 最大模式下的引脚说明 • 当8086CPU工作在最大模式系统时,有8个管脚重新定义 。 • (1)S2、S1、S0(Bus Cycle Status,最小模式为M/IO、D/TR、DEN) • 总线周期状态信号,三态输出,低电平有效。在最大模式下,这三个信号连接到总线控制器8288的输入端,8288对它们进行译码后可以产生系统总线所需要的各种控制信号。三个信号的代码组合以及对应操作如下表: