8086汇编(一)

1.8086CPU中可供编程使用的有14个16位寄存器,按用途可以分成3类:通用寄存器、控制寄存器、段寄存器。

8086汇编(一)_第1张图片

IP是指令指针寄存器,用来控制CPU的指令执行顺序,即里边存放下一条指令的地址。

控制寄存器的内容被称为处理器状态字PSW,用来存放8086CPU在工作过程中的状态。

8086汇编(一)_第2张图片

6个状态标志位:

  CF:进位标志,加法时最高位出现进位或减法时最高位出现借位,该位为1.

  PF:奇偶标志,当运算结果的低8位中1的个数是偶数时,该位为1.

  AF:半进位标志,作字节加法时,若低4位有向高4位的进位,或减法时,低4位有向高4位的借位,该位为1.

  ZF:零标志,运算结果是0,该位为1.

  SF:符号标志,运算结果最高位为1该位是1.

  OF:溢出标志,有溢出,该位是1.

3个控制标志:

  TF:陷阱标志,当该位为1时,8086进入单步工作状态,通常用于成语的调试。

  IF:中断允许标志,当该位为1,处理器可以响应课屏蔽的中断。

 DF:方向标志,若该位为1,串操作指令的地址为自动递减的方向。

2.指令的寻址方式:

  每条指令包括操作码字段和地址码(操作数)字段。

  要掌握指令的寻址方式,就得明确操作数和运算的结果通常存放的地方:指令的地址码字段、寄存器、存储器的数

据段、堆栈段或附加段。

  (1)立即数寻址:直接把操作的数据写在指令中。

                   指令的目的操作数不允许立即数寻址;立即数作为指令的一部分直接从BIU的指令队列中取出,不占用

     总线周期,所以执行速度快、源操作数目的操作数的长度一样、在存储器中立即数是放在代码段。

   (2)寄存器寻址:指令所要的操作数已经存储在某寄存器中、或把目的操作数放入寄存器。

                指令中的源操作数和目的操作数都允许是寄存器寻址、两操作数的字长要一样、由于存取这种操作完全在

       CPU内进行,所以速度快。

    (3)存储器寻址方式:

               a.直接寻址方式:直接给出寻找的操作数的地址,存储器有效地址EA由位移量给出。

               操作数物理地址PA = (DS)*16+EA;

               该方式下段地址默认为在数据段寄存器。

              b.寄存器间接寻址方式:这种寻址方式的有效地址EA可以直接从基址寄存器(BX或BP)或变址寄存

            器(SI或DI)中获得。如果指令中指定的寄存器是BX、SI、DI,则操作数默认在数据段,如果是BP,

            默认在  堆栈段。

             操作数的物理地址PA = (DS)*16+(BX或SI或DI)

             操作数的物理地址PA = (SS)*16+(BP)

            c.寄存器相对寻址:操作数的有效地址是由基址寄存器(BX或BP)或变址寄存器(SI或DI)与偏移

            地址之和。

             操作数的物理地址PA = (DS)*16+(BX或DI或SI)+位移量。

             操作数的物理地址PA = (SS)*16+(BP)+位移量。

            d.基址变址寻址:有效地址EA = [基址寄存器]+[变址寄存器]。

            操作数物理地址PA = (DS)*16+(BX)+(SI或DI)。

            操作数物理地址PA = (SS)*16+(BP)+(SI或DI)。

            e.相对基址变址寻址:有效地址由基址寄存器,变址寄存器和位移量三部分组成。

            操作数物理地址PA = (DS)*16+(BX)+(SI或DI)+位移量。

            操作数物理地址PA = (SS)*16+(BP)+(SI或DI)+位移量。

先整理这么多,之后再补充~~以上若有问题,希望指出,谢谢~~

你可能感兴趣的:(8086汇编(一))