8086_14个寄存器

8086有14个寄存器:AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP,flags。

// 以下为这14个寄存器的速查表。要记清楚每个寄存器的详细用法,还是多写代码,汇编:王爽-汇编

如图:在debug下用r命令查看各个寄存器Register:

8086_14个寄存器_第1张图片

  已知,8086CPU分为两部分:总线接口单元BIU和执行单元EU。

  见:8086CPU内部结构

  为方便记忆,这14个寄存器分组记忆。

  BIU:总线接口单元,完成CPU<-->存储器/IO设备之间的数据传送。

  EU:执行单元,执行指令。

8086_14个寄存器_第2张图片


  下面是各个寄存器的英文全称和意义:

8086_14个寄存器_第3张图片


接下来是各个寄存器的具体介绍(顺序:ABCD_X, SB_P, SD_I, DESC_S, IP, flags。就这样速记吧)

1. 4个数据寄存器(X结尾表示通配H和L,比如说AX作为一个16位寄存器,可以拆分为高8位的AH和低8位的AL使用)

  AX(Accumlator X),作为一个累加器,普通操作:存放加数。(或别的数据)

  BX(Based X),基本的。

  CX(Counter X),计数器,CX可以做一件别的寄存器都做不了的事:在loop循环中存放循环次数,每次递减。

  DX(Data X),存放数据。

  以下为更详细的介绍:

8086_14个寄存器_第4张图片

2. 两个指针寄存器&2个变址寄存器

  SP(Stack Pointer):栈顶指针。用于保存栈顶元素所在的偏移地址EA(Effective Address,有效地址|偏移地址)。

栈顶两个内存单元格的物理地址,我们用逻辑地址表示,形式:SA:EA,即“段地址:逻辑地址”的形式。段地址放在SS(Stack Segment)栈段寄存器中,这是基础。随着元素的入栈出栈操作,栈顶位置在变化,所以需要一根针,指向这个位置。SP就是这根针。我们的入栈出栈操作都是要先通过SP找到栈顶位置,才能进行后续操作。

  BP,也是一根针。Pointer。

  SI和DI(xx Index),这两个变址寄存器,也是保存偏移地址,用作寻址。

8086_14个寄存器_第5张图片


3. 4个段寄存器和两个控制寄存器

  DS, ES, SS正如其名,分别存放数据段,额外(附加数据)段,栈段的段地址。当然,谁作为偏移地址与之相配合,也是有固定的规则:

8086_14个寄存器_第6张图片

  CS:IP

  计算机要工作,只会按照既定的轨迹|流程|指令去操作,而要执行的指令时不断在变化,这些指令的地址|存放位置在哪里?

  CS存放代码所在的段,IP是一个Pointer,可以指向不同的位置。(范围不会太大,64KB)。

8086_14个寄存器_第7张图片

  flags,就是一些flag|标志位的集合。

  在程序的流程控制中有很多判断,而在底层的实现是没有if..else什么的。解决方式就是:我们的运算或其他操作会影响标志位的状态1或0,而之后的程序 执行路径|流程 会由这些flags的标志位影响。

  flags也是一个16位寄存器,而其中只有9位是有用的。有标志位。每个位通过他的值1或0来表示一个标志是否成立。

  比如说ZF(Zero Flag)。

  执行下面的汇编代码(含伪码)。执行完sub ax, 4之后,结果为0,那么就会将flags中的ZF状态位置1,表示刚才的操作结果为0。而后面的判断,会根据flags中相应位的值,取决定接下来的程序流程。

mov ax, 4
sub ax, 4
如果 (结果==0) 情况1;
否则 情况2;

  详见下一篇 8086的flags



你可能感兴趣的:(微机)