microcomputer_principle_02_通用寄存器
8088寄存器
8088内部含有14个 16位 寄存器
按功能可以分为三类:
- 8个通用寄存器
- 4个段寄存器
- 2个控制寄存器
深入理解:每个寄存器中数据的含义;
段寄存器和控制寄存器为 专用寄存器,16位码的含义非常清楚;
通用寄存器更加复杂投入更多时间学习。
通用寄存器
8个通用寄存器可以根据一下三个小类
- 数据寄存器(AX, BX, CX, DX)
- 地址指针寄存器(SP, BP)
- 变址寄存器(SI, DI)
也可以分为 数据寄存器和地址寄存器,两大类。
数据寄存器
- 8088/8086 含4个16位数据寄存器,又可以分为8个8位寄存器:
- AX –> AH, AL
- BX –> BH, BL
- ……
数据寄存器特有习惯用法
- AX: 累加器。
- 所有
I/O
指令都通过AX与接口传送信息,中间运算结果也多放于AX中;
(没有二义性,存放的全是数据。
- 所有
- BX: 基址寄存器。
- 在间接寻址中用于存放基地址
(可能是数据,可能是地址
- 在间接寻址中用于存放基地址
- CX: 计数寄存器。
- 用于在循环或串操作指令中存放计数值;
- DX: 数据寄存器。
- 在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位。
地址指针寄存器
- SP:
- 堆栈指针寄存器(stack pointer),内容为栈顶的偏移地址。
- BP:
- 基址指针寄存器,访问内存时,存放内存单元的偏移地址。
有堆栈操作的时候,SP一定会被占用,BP可能是地址/运算结果。
diff BX BP
- 作为通用寄存器,二者均可用于存放数据
- 作为基址寄存器,BX所寻找的数据在数据段,BP表示数据在堆栈段。
变址寄存器
- SI: 源变址寄存器
- DI: 目标变址寄存器
- 变址寄存器在指令中常用于存放数据在内存中的地址。
8个通用寄存器中,除了AX,CX之外,都有可能存放地址
AX,BX,CX,DX作为8个8位寄存器使用时,只能存放运算数据(不可能是地址
控制寄存器
- IP(同PC,intel取的别名)
- 指令指针寄存器,其内容位下一条要取的指令的偏移地址。
- FLAGS
- 标志寄存器,存放运算结果的特征
- 6个状态标志位(CF,SF,AF,PF,OF,ZF)
- 3个控制标志位(IF,TF,DF)
- 标志寄存器,存放运算结果的特征
状态标志位
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
控制标志位
- TF(Trap Flag)
- 陷阱标志位(跟踪标志位)。TF=1时,使DPU处于单步执行指令的工作方式。
- IF(Interrupt Enable Flag)
- 中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求。
- DF(Direction Flag)
- 方向标志位。在数据串操作时确定操作的方向。
段寄存器
作用
用于存放相应逻辑段的段基地址
内存逻辑段的类型
代码段–>存放指令代码
数据段–>存放操作的数据
附加段–>存放操作的数据
堆栈段–>存放暂时不用但需保存的数据
- CS
- 代码段寄存器,存放代码段的段基地址。
- DS
- 数据段寄存器,存放数据段的段基地址。
- ES
- 附加段寄存器,存放数据段的段基地址。
- SS
- 堆栈段寄存器,存放堆栈段的段基地址。
段寄存器的值比哦啊命相应逻辑段在内存中的位置
实模型下的存储器变换
内存分段管理思想
8088CPU是16位体系结构的微处理器
可以同时处理(产生)16位二进制码
- 可以产生64K个编码–>直接管理64K内存单元
8088CPU需要管理
1MB
内存- 需要20位
内存分段,管理方式
内存地址变换
欲实现对
1MB
内存空间对正确访问,每个内存单元在整个内存空间中必须具备唯一地址 —-> 物理地址
内存地址变换: 直接产生的16位编码—-> 20位物理地址
内存单元编址
也叫做实地址模式下,内存的管理。
- 内存单元的地址,逻辑上,由两部分组成:
- 段(基)地址
- 指示存储单元在整个内存空间中处于哪个区域(段)
- 段内地址(相对地址/偏移地址)
- 指示存储单元在段中的相对位置(与段中第1个单元的距离)
- 段(基)地址
8088为16位结构,所以段地址和偏移地址均为16位
内存变换,实际是寻找一个32位-> 20位的映射
- 内存物理地址由段基地址和偏移地址组成
物理地址 = 段地址
8088/86 同一时刻,最多只有4个/种段在运作(
段基地址是操作系统管理的。
逻辑段说明
- 同一程序模块装入主存时,不同类型的段可以装入在相同/不同段物理空间
- 两个逻辑段完全重合或部分重合
- 两个不同程序模块装入主存时,同一类型段逻辑段也可以装入相同或不同段物理空间中。
堆栈及使用
- 堆栈
- 内存中特殊区域,用于存放暂时不用或需要保护段数据
- 常用于响应中断或子程序调用。
回顾总结
- 微处理器的一般构成
- 8088CPU最小模式下的主要引线及其功能
- 8088CPU的内部结构
- 内部寄存器功能
- 寄存器中数据的含义
- 8位寄存器中存放的均为运算的数据
- 实地址模式下的寄存器寻址
- 逻辑地址,段基地址,偏移地址,物理地址
- 堆栈
- 栈顶地址,栈底地址,堆栈段基地址
- 总线
内部寄存器
- 全部16位寄存器
- 仅4个数据寄存器可分为2个8位寄存器
- 所有16位寄存器中
- AX和CX中内容一定为参加运算的数据
- 其余的可能是数据,也可能是存放数据的地址
- SP中的内容,通常为堆栈段的栈顶地址;
- 段寄存器中的内容为相应逻辑段的段地址;
- IP中的内容为下一条要去的指令的偏移地址;(CS+IP组合)
- FLAGS 按位组织,仅9位有意义,有控制标志位(6),有状态标志位(3)
实模式下的存储器寻址
- 内存的地址:
- 逻辑地址(编程使用的地址):
- 段地址:偏移地址
- 段首地址:
- 每个逻辑段第一个单元的地址
- 偏移地址:
- 相对于所在逻辑段内段首的距离
- 段首的偏移地址=0
- 物理地址:
- 内存单元在整个内存中的唯一地址
- 逻辑地址(编程使用的地址):
对于逻辑地址的表示形式
段地址:偏移地址
实际编程中,通常指给出偏移地址,段地址采用系统默认设定。
- 每个内存单元,在整个内存空间中,都具有唯一物理地址
- 每个内存单元的地址,都由两部分组成:
- 段基地址 段内相对地址(偏移地址)
- 段基地址决定了逻辑段在内存中所占的区域,改变段基地址,则改变了逻辑段的位置。
- 一个逻辑段的默认长度为64K,最小长度值为16B
- 每个逻辑段,都是以节边界起始的,16个字节为1个节
- 逻辑段可以有多个,但只有4种类型。在一个程序模块中,每种类型的逻辑段最多只能有一个。
- Post title: microcomputer_principle_02_通用寄存器
- Create time: 2023-02-14 15:00:43
- Post link: embedded-system/microcomputer-principle-02-通用寄存器/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.