CPU 由运算器、控制器和寄存器等器件构成,这些器件靠内部总线相连。前一章的总线相对于 CPU 内部来说是外部总线。内部总线实现 CPU 内部各个器件之间的联系,外部总线实现 CPU 和主板上其他器件的联系。
2.1 通用寄存器
8086CPU 的所有寄存器都是 16 位的,可以存放两个字节,AX、BX、CX、DX
这四个寄存器被称为通用寄存器。
为兼容上一代 8 位CPU,这四个通用寄存器可以分为两个独立的8位寄存器来使用:
ah 和 al 是两个独立的 8 位寄存器,不会进位。
在进行数据传送或运算时,要注意指令的两个操作对象的位数应该是一致的,8 位寄存器和 16 位寄存器之间无法传送数据。
2.2 物理地址
- 16 位 CPU 的特性:
由于 8086 CPU 地址总线为 20 位,可以有 1 MB 的寻址能力,但 8086 CPU是 16 位 CPU,一次只能送出 16 位地址,寻址能力只有 64KB,因此在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址。
2.3 段寄存器
8086 CPU 有 4 个段寄存器:CS(code)、DS(data)、SS(stack)、ES(extra)
- 8086CPU 的工作过程可以简要描述如下:
总结:CPU 将 CS:IP
指向的内存单元中的内存看做指令,因为,在任何时候,CPU 将 CS、IP 中的内容当做指令的段地址和偏移地址,用他们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被 CPU 执行过的话,那么它所在的内存单元必然被 CS:IP指向过。
2.4 修改指令
CPU 从何处执行指令是由CS、IP 中的内容来决定的,可以通过改变CS、IP 的内容来控制 CPU 执行目标指令。
同时修改CS、IP 的内容:jmp 段地址:偏移地址
。用指令给出的段地址修改CS,偏移地址修改 IP。
仅修改IP的内容:jmp ax;
2.5 Debug 的使用
实验任务1:
实验任务2:
实验任务3: