第二章主要以8086CPU的寄存器为例子进行介绍。
一.
- 16位寄存器(如AX)可分为两个独立的寄存器AH(存放高8位)和AL(存放低8位),对其中一个寄存器进行操作时要将其单独看待,比如AL溢出不会溢出到AH上。
- 16位寄存器与8位寄存器之间不能进行数据传送和运算
- CPU通过地址总线送入存储器的必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前必须要在内部先形成这个物理地址。
二. - 16位结构的CPU具有以下特性
(1)运算器一次最多可以处理16位的数据
(2)寄存器的最大宽度为16位
(3)寄存器和运算器之间的通路为16位 - 8086CPU采用一种在内部用两个16位地址(段地址和偏移地址)合成的方法来形成一个 20位的物理地址
- 地址加法器采用
物理地址=段地址×16+偏移地址
的方法合成物理地址 - 上面公式的本质含义是CPU在访问内存时,用一个基础地址(段地址×16)和一个相对基础地址的偏移地址相加,给出内存单元得物理地址。
三. - 段地址这个概念并不是说内存被划分成了一个一个的段,每一个段有一个段地址。内存并没有分段,段的划分来自CPU
- 编程时可根据需要将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
- 一个段的起始地址一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。
- CPU可用不同的段地址和偏移地址形成同一个物理地址
四. - 8086CPU有4个寄存器,CS,DS,SS,ES。
- CS是代码段寄存器,IP是指令指针寄存器,在8086CPU中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M×16+N单元开始,读取一条指令并执行。也可表述为:在8086机中,任意时刻,CPU将CS:IP指向的内容当做指令执行。
- mov指令能设置大部分寄存器的值,但不能设置CS、IP的值。能改变CS、IP的内容的指令被统称为转移指令,其中最简单的是jmp指令。
- 若想同时修改CS、IP的内容,可用形如"jmp段地址:偏移地址"的指令完成。
- 若仅修改IP的内容,可用形如"jmp某一合法寄存器"的指令完成用寄存器中的值修改IP。