汇编语言第2章微型计算机系统结构



《汇编语言第2章微型计算机系统结构》由会员分享,可在线阅读,更多相关《汇编语言第2章微型计算机系统结构(68页珍藏版)》请在文档大全上搜索。
1、第2章 微型计算机系统结构本章学习目标 了解汇编语言程序设计的源程序总体结构和指令的执行过程。 理解微型计算机8086/8088 CPU的内部结构和外部引脚的含义。 充分理解微型计算机8086/8088 CPU的工作模式和适用的范围。 理解8086/8088 CPU系统总线时序、总线周期的组成和完成的目标任务。 掌握8086/8088 CPU内部段寄存器和通用寄存器的隐含及替代使用方法。 熟练掌握8086/8088 CPU标志寄存器中的各标志位所表示的具体意义 和产生的条件。2.1 8086/8088微处理器n2.1.1 CPU结构n 为了说明8086 CPU的结构,需要先了解CPU的功能,然
2、后考虑需要什么样的结构才能够实现这种功能。这样的一种学习思路可以使读者更容易理解CPU的各个组成结构。n CPU的功能概括起来就是“执行指令”。一个程序有很多条指令,放在内存中的。那么把它取出来送给CPU就是“取指”过程。n 指令本身的执行在CPU内部,“执行过程”跟接口没有关系。执行完毕,要将结果输出到内存或者端口,这就是“输出结果”过程。n 将上述指令执行的过程概括一下,可以分为3个步骤:“取指”过程;“执行”过程;“输出结果”过程。执行过程在CPU内部完成,部件称为执行部件EU;“取指”和“输出结果”过程则是由总线接口部件BIU来完成的。n 8086 CPU内部结构如图2-1所示。n从功
3、能上可将8086分为两个部分,即总线接口单元BIU (Bus Interface Unit)和执行单元EU (Execution Unit).n1总线接口单元BIUn 总线接口单元的功能是负责完成与存储器或I/O设备之间的数据传送。其具体任务是:BIU要从内存取指令送到指令队列缓冲器;CPU执行指令时,总线接口单元要配合执行单元从指定的内存单元或外设端口中取数据,将数据传送给执行单元,或者把执行单元的操作结果传送到指定的内存单元或外设端口中。n BIU内有4个16位段地址寄存器CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器),16位指令指针IP (Inst
4、ruction Pointer), 6字节指令队列缓冲器,20位地址加法器和总线控制电路。下面对总线接口单元作3点说明。n (1)指令队列缓冲器n 8086的指令队列为6个字节,而8088的指令队列为4个字节。不管是8086还是8088,都会在执行指令的同时,从内存中取下面一条或几条指令,取来的指令就依次放在指令队列中。它们采用“先进先出”的原则,按顺序存放,并顺序到EU中去执行,且遵循下列原则。n 1)取指时,每当指令队列缓冲器中存满一条指令时,EU就立即开始执行。n 2)指令队列缓冲器中只要空出两个字节,BIU便自动执行取指操作,直到填满为止。n 3)在EU执行指令的过程中,指令需要对存储
5、器或I/O设备存取数据时,BIU将在执行完现行取指的存储器周期后的下一个存储器周期时,对指定的内存单元或I/O设备进行存取操作,交换的数据经BIU由EU进行处理。n 4)当EU执行完转移、调用和返回指令时,则要清除指令队列缓冲器,并要求BIU从新的地址重新开始取指令,新取的第一条指令将直接经指令队列送到EU去执行,随后取来的指令将填入指令队列缓冲器。由于BIU和EU是分开并独立工作的,因此,在一般情况下,CPU执行完一条指令后就可以执行下一条指令,而不需要像以往8位CPU那样重复地进行先取指令、后执行指令的串行操作。16位CPU这种并行重叠操作的特点,提高了总线的信息传输效率和整个系统的执行速
6、度。如图2-2所示为8086/8088 CPU程序的执行过程。 n(2)地址加法器和段寄存器n 8086有20条地址线,但CPU内部寄存器只有16位,那么如何用16位寄存器实现20位地址的寻址呢?分别用16位的段寄存器与16位的偏移量巧妙地解决了这一矛盾。n 即各个段寄存器分别用来存放各段的起始地址。由IP提供或由EU按寻址方式计算出寻址单元的16位偏移地址(又位偏移地址(又称为逻辑地址)后,将与左移称为逻辑地址)后,将与左移4位后的段寄存器的内容同时位后的段寄存器的内容同时送到地址加法器进行相加,形成一个送到地址加法器进行相加,形成一个20位的实际地址位的实际地址(又称为物理地址),以对存储
7、单元寻址。n 实际地址的产生过程如图2-3所示。n 例如,要形成某指令码的实际地址,就需将IP的值与代码段寄存器CS (Code Segment)左移4位后的内容相加。假设CS=ECOOH, IP=0800H,此时指令的物理地址为EC800H。(3) 16位指令指针IP IP的功能与8位CPU类似。正常运行时,IP中含有BIU要取的下一条指令(字节)的偏移地址。IP在程序运行中能自动加1修正,使之指向要执行的下一条指令。有些指令能使IP值改变或使IP值压入堆栈,或由堆栈弹出恢复原值。n2执行单元EUn 执行单元不与系统直接相连,它的功能只是负责执行指令;执行的指令从BIU的指令队列缓冲器中取得
8、,而且执行指令的结果或执行指令所需要的数据都由EU向BIU发出请求,再由BIU对存储器或外设存取。EU由下列部分组成。n 1) 16位算术逻辑单元(ALU):它可以用于进行算术、逻辑运算,也可以按指令寻址方式计算出寻址单元的16位偏移量。n 2) 16位标志寄存器F:它用来反映CPU运算的状态特征或存放控制标志。n 3)数据暂存寄存器:它协助ALU完成运算,暂存参加运算的数据。n 4)通用寄存器组:它包括4个16位数据寄存器AX, BX, CX, DX和4个16位指针与变址寄存器SP, BP, SI, DI.n 5) EU控制电路:它是控制、定时各种状态逻辑电路,接收从BIU中指令队列取来的指
9、令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。n EU中所有的寄存器和数据通道(除队列总线为8位外)都是16位的宽度,可实现数据的快速传递。n2.1.2寄存器结构n 寄存器是CPU在运算时一些中间数据的暂存地址,按照其用途的不同可以分为通用寄存器、指令指针寄存器、标志寄存器和段寄存器4类。8086/8088的内部寄存器编程结n构如图2-4所示。它共有14个16位寄存器,其中标志寄存器只用了9位。n 下面根据寄存器用途的不同对各种寄存器进行详细介绍。n 1通用寄存器n 8086/8088的通用寄存器分为两组。n (1)数据寄存器n EU中有4个16位数据寄存器AX,
10、BX, ON和DX。每个数据寄存器分为高字节H和低字节L,它们均可作为8位数据寄存器独立寻址、独立使用。n 多数情况下,这些数据寄存器用在算术运算或逻辑运算指令中,用来进行算术逻辑运算。而在有些指令中,它们则有特定的用途:如AX作累加器;BX作基址寄存器,在查表指令XLAT中存放表的起始地址;CX作计数寄存器,在数据串操作指令的REP中存放数据串元素的个数;DX作数据寄存器,在字的除法运算指令DIV中存放余数。这些寄存器在指令中隐含使用。n有关数据寄存器的隐含使用操作如表2-1所示。n (2)指针寄存器和变址寄存器n 指针寄存器SP和BP称为P组,变址寄存器SI和DI称为I组,它们都是16位寄
11、存器,一般用来存放地址的偏移量(即相对于段起始地址的距离)。偏移量在BIU的地址加法器中和左移4位的段寄存器内容相加产生20位的物理地址。n 指针寄存器SP和BP用来指示存取位于当前堆栈段中的数据所在的地址,但SP和BP在使用上有区别。入栈(PUSH)和出栈((POP)指令是由SP给出栈顶的偏移地址,故称为堆栈指针,BP则是存放位于堆栈段中一个数据区的基地址,故称为基址指针寄存器(数据区首地址的偏移量)。n 变址寄存器SI和DI是存放当前数据段的偏移地址的。源操作数地址的偏移放于SI中,所以SI称为源变址寄存器;目的操作数地址的偏移地址放于DI中,故DI称为目的变址寄存器。例如在数据串操作指令