小言_互联网的博客

8086 内部寄存器

290人阅读  评论(0)

1、8086 内部结构


8086 由执行单元EU 和 总线结构单元BIU 两大部分构成。

  • 执行单元EU
    主要功能是:执行指令、分析指令、暂存中间运算结果并保留结果的特征。它由算术逻辑单元(ALU)、通用寄存器、标志寄存器、EU控制电路组成。EU在工作时不断地从指令队列中取出指令代码,对其译码后产生完成指令所需要的控制信息。数据在 ALU 中进行运算,运算结果的特征保留在标志寄存器 FLAGS中。

  • 总线接口单元 BIU
    主要功能是:负责CPU与存储器、I/O接口之间的信息传送。它由段寄存器、指令指针寄存器、指针队列、地址加法器、总线控制逻辑组成。

当EU从指令队列中取走指令,指令队列出现空字节时,BIU 就自动执行一次取指令周期,从内存中取出后续的指令代码放入队列中。当EU需要数据时,BIU根据EU给出的地址从指定的内存单元或外设中取出数据供EU使用。在运算结果时,BIU将运算结果送入指定的内存单元或外设。

如果指令队列为空,EU就等待,直到有指令为止。若BIU正在取指令,EU发出访问总线的请求,则必须等BIU取指令完毕后该请求才能得到响应。一般情况下,程序顺序执行,当遇到跳转指令时,BIU就使指令队列复位,从新地址取出指令,并立即传给EU去执行。

指令队列的存在使 8086的EU和BIU并行工作,从而减少了CPU为取指令而等待的实践,提高了CPU的利用率,加快了整机的运行速度,另外也降低了对存储器存取速度的要求。

# 物理地址 & 逻辑地址

因为 8086是16位处理器,即8086的寄存器均为16位数据,但是8086的地址总线为20位,因此代码中出现的地址均为逻辑地址,并非实际的物理地址,因此逻辑地址需要转换为物理地址;

= × 16 + 物理地址 = 段基地址 \times 16 + 段内偏移地址

2、控制寄存器

FLAGS 标志寄存器


FLAGS 标志寄存器是一个 16位寄存器,但只使用其中的 9位,包括 6个状态标志 和 3个控制标志;

1、状态标志

状态标志位记录了算术和逻辑运算结果的一些特征;

  • 0_CF:进位标志位
    当进行 加 / 减 运算时,若最高位向前有 进位 / 借位,则 CF =1,否则 CF=0;

  • 2_PF:奇偶标志位
    当运算结果的低8位中 1的个数 为偶数时 PF=1,为奇数时 PF=0;

  • 4_AF:辅助进位标志位
    在 加/减 法操作中,D3 向 D4有进位/借位 发生时,AF=1,否则 AF=0.

  • 6_ZF:零标志位
    当运算结果为零时 ZF=1,否则 ZF=0;

  • 7_SF:符号标志位
    当运算结果的最高位为1时 SF=1,否则 SF=0;

  • 11_OF:溢出标志位
    当算术运算的结果超出了带符号数的范围,即溢出时 OF=1,否则 OF=0;

2、控制标志

控制标志位用于设置控制条件,控制标志被设置后便对其后的操作产生控制作用;

  • 8_TF:陷阱标志位
    当 TF=1 时,激活处理器的调试特性,使 CPU 处于单步执行指令的工作方式,每执行一条指令后,自动产生一次单步中断,从而使用户能逐步指令地检查程序;

  • 9_IF:中断允许标志位
    IF=1 使 CPU 可以响应可屏蔽中断请求;IF=0 使 CPU 禁止响应可屏蔽中断请求;IF 的状态对不可屏蔽中断及内部中断没有影响;

  • 10_DF:方向标志位
    方向标志位在执行串操作指令时控制操作的方向。DF=1 时按 减地址 方式进行,即从高地址开始,没进行一次操作,地址指针自动减1/2;DF=0 时,则按 增地址 方式进行;

IP 指令指针寄存器

用以存放预取指令的偏移地址。CPU 取指令时总是以 CS为段基址,以 IP 为段内偏移地址。

当CPU 从 CS段中偏移地址为(IP)的内存单元中取出指令代码的一个字节后,IP 自动加1,指向指令代码的下一个字节。
注:用户程序不能直接访问IP。

3、通用寄存器

数据寄存器

  • AX :累加器
    常用于存放算术、逻辑运算中的操作数,另外所有的 I/O 指令都使用累加器与外设接口传送信息;

  • BX :基址寄存器
    存放访问内存的基地址;BX 通常与DS 寄存器配对使用;

  • CX :计数寄存器
    在循环中、串操作中用作计数器使用;

  • DX :数据寄存器
    在寄存器间接寻址的 I/O指令中存放 I/O端口的地址;

另外,在做双字节乘除法运算时,DX与AX 合起来存放一个双字节,其中AX存放低16位,DX存放高16位;

基址寄存器

  • BP :基址指针寄存器
    一般也常用来存放内存时的基地址,但它通常与 SS寄存器配对使用。

  • SP :堆栈指针寄存器
    它在堆栈操作中用来存放栈顶偏移地址,永远指向堆栈的栈顶;

作为通用寄存器,BP和SP 也可以存放数据,但实际上,它们更经常更重要的用途是存放内存单元的偏移地址,特别是SP在访问堆栈时作为指向堆栈栈顶的指针。

变址寄存器

  • SI :源变址寄存器
  • DI :目的变址寄存器

它们常常在变址寻址方式中作为索引指针。

4、段寄存器

段寄存器用于存放段基址,即段起始地址的高16位;

  • CS :代码段寄存器;
  • DS :数据段寄存器;
  • SS:堆栈段寄存器;
  • ES:附加数据段寄存器;

转载:https://blog.csdn.net/ViatorSun/article/details/105713031
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场