第二章 微处理器与总线
2.1 8086/8088微处理器的特性
- 8086为16位CPU,8088为准16位CPU(内十六外八)
- 8086/8088的时钟频率为5MHz
- DB、AB总线分时复用
- 内存容量为1MB,即共有20条总线
- 基本寻址方式有八种
- 指令系统包含99条基本汇编指令
- 16位I/O端口地址最多可寻址64K个端口地址
- 可处理内部软件中断(程序员自己安排好的)和外部硬件中断(随机的),中断源多达256个
- 支持单片CPU和多片CPU系统工作
2.2 8086/8088微处理器结构及寄存器
内部结构分为执行部件EU(execution unit)和总线接口部件BIU(bus interface unit)
EU:负责指令的译码、执行和数据的运算
BIU:管理CPU和系统总线的接口;负责CPU对存储器和外设进行访问
**两个CPU在大多数情况下独立操作,但也可以并行执行【只要执指时不需要总线就可以并行执行,需要占用总线就无法执行】,实行指令预取
**8086和8088的EU完全相同,BIU略有不同,8086的指令队列是6个字节,8088的指令队列是4个字节
**指令队列被清空的三种情况:
①出错
②遇到转移/跳转指令
③中断
8086/8088寄存器组(register array)【总共14个,均为16位】
Ⅰ通用寄存器8个
①数据寄存器:AX、BX、CX、DX
AX:累加器【accumulator】,使用频率最高,用于算术、逻辑运算以及与外设传送消息等(AL为8位累加器)
BX:基址寄存器【base address register】,常用来存放存储器地址【内存】
CX:计数器【counter】,作为循环和串操作等指令的隐含计数器
DX:数据寄存器【data register】,常用来存放双字长数据的高16位或者外设端口地址
**每个数据寄存器还可以分为高八位和低八位2个独立的寄存器
②变址寄存器:SI、DI,常用于寄存器变址寻址时提供地址
SI:源地址寄存器(source index)
DI:目的地址寄存器(destination index)
在串操作指令中,只能是由SI到DI
③指针寄存器:指针寄存器用于寻址内存堆栈内的数据
SP:堆栈指针寄存器(stack pointer),指示堆栈栈顶的位置
BP:基址指针寄存器(base pointer),表示数据在堆栈段内的基地址
SP和BP与SS联合使用来确定堆栈段中的存储单元地址
**stack是内存中一个特殊的区域,采用“先进后出”或“后进先出”的存取方式
Ⅱ 一个指令寄存器IP(instruction pointer)
①指示主存储器指令的位置
②随着指令的执行,IP将自动修改以指示下一条指令所在的存储器位置
③IP是一个专用寄存器
**IP与CS联用确定下一条指令的存储单元地址
**编程序时,不能直接使用IP
Ⅲ 一个标志寄存器
Flag用于反映指令执行结果或控制指令执行形式
Flag是十六位寄存器,8086/8088用了其中九位,六位记录状态,三位控制指令执行形式
进位标志CF(carry flag):有进位或借位时,为1
辅助进位标志AF(auxiliary parity flag):位3向位4有进位时,置一
零标志ZF(zero flag):结果为0时,置一
符号标志SF(sign flag):与结果第一位的值相同
奇偶标志PF(parity flag):运算结果最低字节中1的个数为偶数时,置1
溢出标志OF(overflow):若算术运算的结果有溢出,则置一
**溢出的快速判断方法:
①同符号数相加才有可能发生溢出(因此异号相加不用考虑),若同号相加后,结果与加数的符号不同则溢出
②若次高位进位和最高位进位异或为1,则溢出
方向标志DF(direction flag):用于串操作指令,控制地址的变化方向,设置DF为一时,自减,有快捷指令CLD和STD,让DF置一或置零
中断允许标志IF(interrupt-enable flag):控制可屏蔽中断是否可以被处理器响应,IF为1时,允许中断;有快捷指令CLI和STI
陷阱标志TF(trap flag):用于控制处理器进入单步操作方式,设置TF为一时,处理器单步执行指令;没有快捷指令
Ⅳ 4个段寄存器
CS:代码段寄存器(code segment):指明当前代码段的起始地址【与IP求和】
DS:数据段寄存器(data segment):指明当前数据段的起始地址
ES:附加段寄存器(extra segment):指明当前附加段的起始地址
SS:堆栈段寄存器(stack segment):指明当前堆栈段的起始地址
**内存中从低字节到高字节依次为:ES、SS、CS、DS