目录
8088内部寄存器
含有14个16为寄存器,按照功能可以分为三类
8个通用寄存器、4个段寄存器、2个控制寄存器
通用寄存器
数据寄存器(AX,BX,CX,DX)
8088/808含四个16位数据寄存器,它们可以分为8个8位寄存器 拆开后彼此相互独立没有高八位,低八位之分。但是当两个寄存器合起来时AH一定是高八位,AL一定是低八位。
AX---->AH,AL
BX----->BH,BL
CX----->CH,CL
DX----->DH,DL
数据寄存器的专用方法
AX:累加器 所有I/O接口都通过AX与接口传送信息,多用于存放中间运算结果
BX:基址寄存器 间接寻址中用于存放基地址
CX:计数寄存器 用于循环或串操作中存放计数值
DX:数据寄存器 间接寻址的I/O指令中存放I/O端口地址 在32位乘除法运算时,存放高16位
地址指针寄存器(SP,BP)
SP堆栈指针寄存器,其内容为栈顶的偏移地址 (只要是堆栈存在,那么SP就作为专用寄存器,作为栈顶指针)
BP基址指针寄存器,常用作在访问内存时存放内存单元的偏移地址
变址寄存器(SI,DI)
SI 源变址寄存器
DI 目标变址寄存器
变址寄存器在指令中常用于存放数据在内存中的地址
控制寄存器
IP 指令指针寄存器,其内容为下一条要取指令的偏移地址
FLAGS 标志寄存器 存放运算结果的特征
6个状态标志位 (CF SF AF PF OF ZF)
CF (Carry Flag): 进位标志位,加减法时最高位有进位(借位)则 CF=1
OF (Overflow Flag): 溢出标志位,当算数超出了有符号数的可表达范围时 OF=1
ZF (Zero Flag): 零标志位,当运算结果为零时 ZF=1
SF (Sign Flag): 符号标志位,当运算结果最高位为1时 SF=1
PF (Parity Flag): 奇偶标志位,运算结果低8位中"1"的个数为偶数时 PF=1
AF (Auxiliary Carry Flag): 辅助进位标志位,加减操作,若bit3向bit4有进位(借位) AF=1
3个控制标志位 (IF TF DF)
TF (Trap Flag): 陷阱标志位, TF=1 时使CPU处于单步执行指令的工作方式
IF (Interrupt Enable Flag): 中断允许标志位, IF=1 时使CPU可以响应可屏蔽中断请求
DF (Direction Flag): 方向标志位,在数据串操作时确定操作方向
段寄存器
用于存放相应逻辑的段基地址
代码段:存放指令代码
CS(寄存器): 代码段寄存器,存放代码段的段基地址
数据段:存放操作的数据
DS(寄存器): 数据段寄存器,存放数据段的段基地址
附加段:存放操作的数据
ES(寄存器): 附加段寄存器,存放数据段的段基地址
堆栈段:存放暂时不用但是需要保存的数据
SS(寄存器):堆栈段寄存器,存放堆栈段的段基地址
内存储器管理
8088CPU是16位体系结构的微处理器
可以同时处理(产生)16位二进制码 可以产生64K个编码
8088CPU需要管理1MB内存 需要能够产生1M个地址编码(16×64K)
内存地址变换
欲实现对1MB内存空间的正确访问,每个内存单元在整个内存空间中必须具有唯一地址 ->物理地址 内存地址变换:如何将直接产生的16位编码变换为20位物理地址
内存每个单位的地址在逻辑上都由两部分组成:
段(基)地址:指示存储单元在整个内存空间中处于哪个区域(段)
段内地址(相对地址/偏移地址):指示存储单元在段内中的相对位置(与段内第一个单元的距离)
8088为16位结构,所以段地址和偏移地址均为16位
段地址(16位) | 偏移地址(16位) |
内存地址变换的目的就是如何将这个32位的地址变换成20位的物理地址
段首的偏移地址为0000H 16位的0和4位的零是一样的,据此我们可以将32位的地址转换为20位的地址 所以段首的物理地址为:
段地址(16位) | 0000 |
内存物理地址由段基地址和偏移地址组成:物理地址=段基地址×16+偏移地址
物理分段的缺点是将内存按照一定的大小进行分块,在实际的使用中可能产生内存浪费,使用效率低的情况所以在实际过程中一般不使用物理分段的方法。
段寄存器
作用:用于存放相应逻辑段的段基地址
8086/8088内存中逻辑段的类型:
代码段:存放指令代码
数据段:存放操作的数据
附加段:存放操作的数据
堆栈段:存放暂时不用但需要保存的数据
8086