第二章 8086系统结构一、 8086CPU 的内部结构1.总线接口部件BIU (Bus Interface Unit )组成:20位地址加法器,专用寄存器组,6字节指令队列,总线控制电路。
作用:负责从内存指定单元中取出指令,送入指令流队列中排队;取出指令所需的操作 数送EU 单元去执行。
工作过程:由段寄存器与IP 形成20位物理地址送地址总线,由总线控制电路发出存储器“读”信号,按给定的地址从存储器中取出指令,送到指令队列中等待执行。
*当指令队列有2个或2个以上的字节空余时,BIU 自动将指令取到指令队列中。
若遇到转移指令等,则将指令队列清空,BIU 重新取新地址中的指令代码,送入指令队列。
*指令指针IP 由BIU 自动修改,IP 总是指向下一条将要执行指令的地址。
2.指令执行部件EU (Exection Unit)组成:算术逻辑单元(ALU ),标志寄存器(FR ),通用寄存器,EU 控制系统等。
作用:负责指令的执行,完成指令的操作。
工作过程:从队列中取得指令,进行译码,根据指令要求向EU 内部各部件发出控制命令,完成执行指令的功能。
若执行指令需要访问存储器或I/O 端口,则EU 将操作数的偏移地址送给BIU ,由BIU 取得操作数送给EU 。
二、 8088/8086的寄存器结构标志寄存器ALUDIDH SP SI BP DLAL AH BL BH CL CH ESSS DS CS 内部暂存器输入 / 输出控制 电路1432EU 控制系统20位16位8086总线指令 队列总线 接口单元执行 单元6516位属第三代微处理器 运算能力: 数据总线:DB1.通用寄存器①4个16位的数据寄存器(AX,BX,CX,DX)除了可存放数据和地址作用外,各寄存器还有其特殊用途●AX(Accumulator register,累加器)一般用来存放参加运算的数据和结果,在乘除法运算、I/O操作、BCD数运算中有不可替代的作用●BX(Base register,基址寄存器)除可作为数据寄存器外,还可存放内存的逻辑偏移地址,而AX,CX,DX则不能●CX(Counter,数据寄存器)它既可作为数据寄存器,又可在串指令和移位指令中作为计数用●DX(Data register,数据寄存器)除可作为通用数据寄存器外,还在乘除法运算、带符号数的扩展指令中有特殊用途。
通用寄存器:既可作为16位寄存器也可作为8位寄存器(分为高八位AH,BH,CH,DH和低八位AL,BL,CL,DL)。
(例:AH,AL) 8bit寄存器只能存放数据。
*通用性强,对任何指令都具有相同的功能②另外4个16位寄存器主要用来存放存储器或I/O端口的地址●SI(Source Index,源变址寄存器)多用于存放内存的逻辑偏移地址(隐含的逻辑段地址在数据段寄存器中),也可存放数据。
●DI(Destination Index,目标变址寄存器)多用于存放内存的逻辑偏移地址(隐含的逻辑段地址在数据段寄存器中),也可存放数据。
●BP(Base Pointer,基址指针)用于存放内存的逻辑偏移地址(隐含的逻辑段地址在堆栈段寄存器中)。
●SP(Stack Pointer,堆栈指针)用于存放栈顶的逻辑偏移地址(隐含的逻辑段地址在堆栈段寄存器中)。
* BP,SP寄存器称为指针寄存器,与SS联用。
* DI,SI寄存器称为变址寄存器,与DS联用,在串指令中,SI,DI均为隐含寻址,此时,SI 与DS联用, DI与ES联用。
2.状态(标志)寄存器PSWPSW 是一个16位的专用寄存器(6位状态位,3位控制位)存放运算结果的特征。
D15 D14 OF DF IF TF SF ZF AF PF CFCF(Carry Flag,进位标志):当运算结果的最高位(D7/D15)出现进位(借位)时,CF=1;PF(Parity Flag,奇偶校验标志):当运算结果中“1”的个数为偶数时,PF=1;AF(Auxiliary Flag,辅助进位标志):当结果的D3向D4(低位字节)出现进位(借位)时,AF=1;ZF (Zwro Flag,零标志):当运算结果为零时,ZF=1;SF (Sign Flag,符号标志):当运算结果的最高位D7/D15为1时,SF=1;OF (Overflow Flag,溢出标志):当运算结果超过机器所能表示的范围时,OF=1;IF (Interrrupt Flag,中断允许标志): IF=1,允许CPU响应外部的可屏蔽中断;DF(Direction Flag,方向标志):在字符串操作时,决定操作数地址调整的方向,DF=1,为递减;TF (Trap Flag,陷阱标志):当TF=1,CPU每执行一条指令便自动产生一个内部中断,在中断服务程序中可检查指令执行情况。
3.段寄存器8086/8088按信息存储的不同性质分为四类,分别由四个段寄存器存放该段的首地址,或称为段地址。
*CS(Code Segment,代码段寄存器)存放程序代码段起始地址的高16位。
指向当前的代码段,指令由此段取出;*SS (Stack Segment,堆栈段寄存器)存放数据段起始地址的高16位。
指向当前的堆栈段,栈操作的对象是该段存储单元的内容;*DS(Data Segment,数据段寄存器)存放堆栈段起始地址的高16位。
指向当前的数据段,该段中存放程序的操作数;*ES (Extended Segment,附加段寄存器)存放扩展数据段起始地址的高16位。
指向当前的附加段,主要用于字符串数据的存放,也可以用于一般数据的存放。
4.指令指针指令指针( I P )是一个16位的专用寄存器。
当BIU从内存中取出一条指令,自动修改IP,始终指向下一条将要执行的指令在现行代码段中的偏移量。
8086/8088中的某些指令执行后会改变IP的内容,但用户不能编写指令直接改变IP 的内容。
* I P是指令地址在代码段内的偏移量(又称偏移地址),IP要与CS配合构成共同物理地址。
三、8088/8086的引脚及功能1、8086最小模式下的引脚定义●RD(三态Out) :读信号,低电平有效●WR (三态Out):写选通信号,低电平有效●INTR (In) :可屏蔽中断请求线,高电平有效●RESET (In) :复位信号,高电平有效(至少保持个时钟周期)。
●READY (In):准备好信号,高电平有效。
处理器与存储器及 I/O接口速度同步的控制信号●MN/MX(In):最大/最小工作模式选择信号。
硬件设计者用来决定8086工作模式, MN/MX# =1 8086为最小模式, MN/MX# =0 8086为最大模式。
●ALE (O) :地址锁存允许信号●INTA(O) :最小模式下的中断响应信号。
●Vcc GND(In): 处理器的电源引脚●CLK (In) : 时钟信号,处理器基本定时脉冲两种不同模式的主要区别体现在8086CPU的第24至31号管脚具有不同功能四、8086存储器组织1.存储器地址的分段矛盾:存储器地址空间1MB ,20bit 地址线;内部各寄存器和数据总线均为16bit 。
解决方法:将整个存储器分为若干个逻辑段,每段内地址16bit ,即最多 地址空间64KB 。
允许各逻辑段在整个存储空间浮动 。
每个段的首地址称为“段基值”, “段基值”必须能被16整除(XXXX0H )程序执行前,分别对相应的段寄存器CS ,DS ,SS ,ES 置“段基值”, 若程序长度大于64KB ,则可通过对CS 送新的“段基值” 将程序转移到新段中。
例如:8086复位后物理地址的形成:物理地址=段基址*16+段内偏移地址PC 启动地址=CS*16+IP=FFFF0H+0000H = FFFF0H2、8086存储器的分体结构存储器二个连续字节组成一个字,一个字中的每一个字节都有各自的字节地址。
存入时以低位字节在低地址,高位字节在高地址的次序存放,字单元的地址以低位地址表示。
若要求8086在一个总线周期访问一个整字(16位)时,则该字的地址为偶地址(“对准好”的字)。
如果则该字的地址为奇地址(“未对准好”的字),则8086要用两个连续的总线周期访问一个整字,每个周期访问一个字节。
BHE A0 操作 总线使用情况0 0 从偶地址开始读/写一个字 AD15--AD00 1 从奇地址开始读/写一个字节 AD15--AD81 0 从偶地址开始读/写一个字节 AD7--AD00 1 1 0 从奇地址开始读/写一个字(分两次读)1 1 无效 3、堆栈的概念① 堆栈是利用RAM 区中某一指定区域(由用户规定),用来暂存数据或地址的存储区。
堆栈段是由段定义语句在内存中定义的一个段,段基址由SS 指定。
② 堆栈存取数据的原则是“先进后出”,存取数据的方法是压入(PUSH)和弹出(POP)。
③ 堆栈区的栈底是固定的最高地址,其栈顶根据堆栈数据的压入或取出的变化不断改变。
栈顶是堆栈区的最低地址,用堆栈指针SP 指示。
④ 每执行一条PUSH 指令, SP =(SP)-2,向堆栈压入16bit 数据。
每执行一条POP 指令,从堆栈弹出16bit 数据, SP =(SP)+2。
第三章 8086/8088的指令系统段 1段 2段 16段 300000H0FFFFH 10000H1FFFFH20000H 2FFFFHF0000H FFFFFH一、8086的寻址方式●计算机的指令一般由操作码和操作数组成,操作码规定了指令的功能;而操作数则规定了指令操作的对象。
操作数可以以立即数的形式存放在指令中,但在大多数情况下,操作数是以地址的形式存放在指令(指示操作数在哪儿)。
用于说明操作数所在地址的方法称为寻址方式。
●在微机中,操作数存放在: 1、在指令中;2、在CPU的某一内部寄存器中;3、在内存的数据区中;4、I/O端口。
●在8086CPU中,内存地址是由数据段地址和段内偏移量组成。
而指令中规定的地址即为段内偏移量(逻辑地址)——有效地址EA,有效地址EA构成的方法不同,则为不同的寻址方式。
MOV 目的操作数,源操作数目的操作数和源操作数均可采用不同的寻址方式,但两个操作数的类型必须一致①立即寻址方式:操作数(8位或16的常数)直接包含在指令中,紧跟在操作码后面,与操作码一起放在代码段区域中。
操作数im既可是8位的,也可是16位的。
例:MOV AL,26H(把26H送到AL中)②寄存器寻址:操作数放在指令规定的寄存器中。
例 MOV DS,AX(把AX的内容传送到了DS)③直接寻址方式:操作数的有效地址EA是指令的一部分,它与操作码一起放在代码段区域中。
操作数的物理地址为数据段寄存器DS加上16位地址偏移量。