对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变寄存器里的内容来实现对CPU的控制。
一:寄存器的相关总结
1: 8086CPU的所有寄存器都是16位的,可以存放2个字节。其中8086CPU中的AX BX CX DX这4个寄存器都可以分为两个独立使用的8位寄存器来使用。
2: AX的低8位构成了AL寄存器,高8位构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。而具体的分解则由下图可见:
3:一个字可以存在一个16位的寄存器之中,这个字的高位节和低位节自然就存在了这个寄存器的高8位寄存器和低8位寄存器之中。
为了区分不同的进制,在十六进制表示的数据的后面加H,在二进制的数据后面加上B,十进制的后面则什么都不加。
4:为了使具有高级语言基础的读者可以更好的理解指令,会用文字描述和高级语言描述这两种方式来描述一条汇编指令的含义。在写一条汇编指令或者一个寄存器的名称时不会区分大小写。
注意 当al是作为一个独立的8位寄存器使用时,和ah是没有关系的,CPU在执行命令时会认为这两个是不相干的寄存器。所以不要错误的认为这两个是有关联的。
二:地址问题的总结
1:8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址。
段地址和偏移地址通过内部总线送入地址加法器。
2:地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址金和偏移地址合成物理地址
三:CS和IP
1:CS和IP是8086CPU中最为关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
2:在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS和IP中的内容决定的,程序员可以通过改变CS,IP中的内容来控制CPU执行目标指令。
3:如何改变CS和IP的值呢?能够改变CS和IP的值内容的指令被统称为转移指令。现在我们来介绍一个最简单的改变值的指令:jmp指令。
可以用形如 “ jmp段地址:偏移地址” 的指令来完成,此指令的功能为用指令中给出的段地址修改CS,偏移地址修改IP
如果只是想改变IP中的内容,可以用形如:“jmp 某一合法寄存器”的指令来完成。
4:所以,要让CPU执行我们放在代码段中的指令,必须要将CS和IP指向第一条指令的首地址。对于上面的例子,我们将一段存在代码段之中。