一.8086/8088CPU的功能结构
8086/8088cpu具有20根地址线,所以直接寻址能力达到
BIU的任务是执行总线周期,完成CPU与存储器I/O设备之间的信息传送。它包括4个段寄存器,指令指针IP,指令队列寄存器,完成于EU通信的内部寄存器,加法器和总线控制逻辑。
其中加法器将指令指定的段寄存器中保存的16位段地址左移四位,再与IP或者EU部件提供的逻辑地址相加得到物理地址。
EU由逻辑运算单元ALU,暂存器,标志寄存器,通用寄存器,以及EU控制器构成。任务是执行指令,进行全部的算术逻辑运算,完成偏移地址的运算,并对通用寄存器以及标志寄存器进行管理。
二.8086/8088CPU寄存器结构
1.通用寄存器组
通用寄存器中有8个寄存器,可分为两组,一组是数据寄存器,一组是地址指针和变址寄存器。
(1)数据寄存器
包括AX(Accumulator Register)累加器,使用频率最高,是算术运算的主要数据寄存器。主要用于算术,逻辑运算以及与外设传送消息时,在乘法指令中存放乘数或者乘积,在除法运算中存放被除数或者商,另外CPU在与外界进行数据交换时,所有的输入/输出数据必须经过累加器.
BX(Base Register)基址寄存器,在间接寻址中常用作存放存储器偏移地址。
CX(Count)计数器 一般在串操作指令以及循环指令中做计数器。
DX(Date Register)数据寄存器 在乘法运算中,存放乘积的高16位,在除法运算中存放被除数的高16位或者余数,在间接寻址的输入/输出指令中做地址寄存器。
(2)地址指针和变址寄存器
这组寄存器在功能上的共同点是,在对存储器操作数寻址时,用于形成20位物理地址码的组成部分。访问存储器的地址码由段地址(放在段寄存器中)和段内偏移地址两部分组成。
SP(Stack Pointer)堆栈指针。用于存放堆栈操作(压入和弹出)地址的段内偏移地址。段地址由段寄存器SP提供。
BP(Base Pointer)基址指针,凡是包含BP的寻址方式中如果无特别说明,其段地址有段寄存器SS提供,也就是说该寻址方式是对堆栈区的存储单元寻址的。
SI(Source Index),DI(Destination Index)变址寄存器,在字符串操作中,SI用作源变址寄存器,DI用作目的变址寄存器
2.控制寄存器组
(1)指令指针(Instruction Pointer)IP,保存下一次要取出的指令的偏移地址。在用户程序中不能使用该寄存器!
(2)标志寄存器FLAG(两个字节)
标志寄存器共有9个 标志,其中有六个是状态标志位反映前一次涉及ALU操作结果,还有三个是控制标志位
S(Sign Flag)符号标志,如果指令执行结果最高位为1符号标志为1,否则为零
C(Carry Flag)进位标志,当指令执行的最高位发生进位或者借位时C=1,否则为零,可任意理解为无符号数如果超出一个字节或者一个字所能表示的范围,进位标志C=1
O(Overflow FLag)溢出标志 如果带符号数运算结果超出了表示范围则O=1
A(Auxiliary Carry Flag)辅助进位标志 如果最低半字节向前一位有借位或者进位则A=1
Z(Zero Flag)如果结果为0,则Z=1
P(Parity Flag)在字节操作中,如果结果中的“1”的个数为偶数则P=1,在字操作中,如果结果的低字节中的“1”个数为偶数,则P=1,高字节并不影响奇偶标志位。
D(Direction Flag) 方向标志位主要对串操作指令产生影响,当D=1时,串操作从高地址开始向低地址处理串,并使串指针自动增加。
T(Trace Flag)当追踪标志为T=1时,CPU进入单步运行状态,每执行一条指令,就会产生一个内部中断,使程序暂停。
I(Interrupt-enable Flag)当I=1时,允许CPU接受外界可屏蔽的中断请求,0时则屏蔽这些请求,需要注意的是对于外部非屏蔽中断以及CPU内部中断都无效。
3.段寄存器组
CPU访问存储器的逻辑地址由段地址以及偏移地址两部分构成,段寄存器用来放对段地址,总线单元接口BIU设置了四个段寄存器,每段64K
(1)代码段寄存器 CS(Code Segment) 存放当前执行程序所在段的段地址,CS的内容左移四位加上IP的内容就是下一条要执行的指令的物理地址。
(2)数据段寄存器DS(Date Segment) 存放当前数据段地段地址,其中的内容左移四位再加上按指令中存储器寻址方式计算出的偏移地址,就是对数据段指令单元进行读写的物理地址。
(3)堆栈段寄存器SS(Stack Segment)存放当前堆栈段的段地址,对堆栈进行操作的物理地址是由SS的内容左移四位加上SP的内容得到的。
(4)附加段寄存器ES(Extra Segment)DI存放目的区的偏移地址
注:DS,ES都要由用户用程序设置初始值,如果初始值相同,那么数据段和附加段重合。
段寄存器的分工是CS划定并控制着程序区,DS,ES控制着数据区,堆栈段寄存器对应着堆栈段存储区。
注意有些操作类型访问存储器时不用需指定另外的段存储器,取指令访问内存时,段存储器一定是cs,堆栈操作时一定是ss,字符串处理指令的目的地址时一定是es.另外,DS,ES,SS,的内容都是通过传送指令置入的,而CS不能由任何传送型指令置入数。同样的还有取指令访问内存时,段内偏移地址只能由IP提供,具体看下表!需要熟记!
三.8086/8088的存储器组织结构
偏移地址:相对于段起始地址的偏移量,也成为有效地址EA,偏移地址也是16位的
物理地址:就是存储单元的实际地址编码。在CPU与存储器之间进行任何信息交换的时候,需要利用物理地址来查找所需要访问的存储单元。逻辑地址有段地址和偏移地址两部分组成。段地址和偏移地址都是无符号的16位二进制数。
逻辑地址的表示格式为: 段地址:偏移地址
物理地址=段地址*10H+偏移地址