2.1 通用寄存器
1. 8086CPU所有的寄存器都是16位的,可以存放两个字节。
2. AX、BX、CX、DX,4个寄存器通常用来存放一般性数据,被称为通用寄存器。
3. 一个16位的寄存器可以存储一个16位的数据。 思考:一个16位的寄存器所能存储的数据最大值为多少?
4. 8086CPU的AX、BX、CX、DX(16位寄存器)每个都可以分为两个可独立使用的8位寄存器来用:
AX可分为AH、AL;
BX可分为BH、BL;
CX可分为CH、CL;
DX可分为DH、DL;
2.2 字在寄存器中的存储
1. 8086CPU可以一次性处理以下两种尺寸的数据:
(1)字节:byte,一个字节由8个bit组成,可以存在8位寄存器中。
(2)字:word,一个字由两个字节组成,分别称为高位字节和低位字节。
*还存在双字、四字
2.3 几条汇编指令
【重要】计算
【重要】计算
2.4 物理地址
1. CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。
2. 在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。
2.5 16位结构的CPU
1. 8080、8085等是8位机,8086是16位机。
2. 16位结构CPU的结构特性:
(1)运算器一次性可以处理16位数据。
(2)寄存器的最大宽度位16位。
(3)寄存器和运算器之间的通路为16位。
2.6 8086CPU给出物理地址的方法
1. 8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。
2. 8086CPU是16位结构,在内部一次性处理、传输、暂时存储的地址为16,这样看来,表现出的寻址能力只有64KB。
3. 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
4. 物理地址=段地址*16+偏移地址 记为 段地址:偏移地址
2.7 “物理地址=段地址*16+偏移地址”的本质含义
1. CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
2.8 段的概念
1. 内存无分段,段的划分来自CPU。
2. 可将若干地址连续的内存单元看成一个段。
3. 一个段的起始地址(段地址*16)一定是16的倍数。
4. 偏移地址为16位,16位的寻址能力为64KB,所以一个段的长度最大为64KB。
**小结:
1. CPU可以用不同的段地址和偏移地址形成同一个物理地址。
2. 给定一个段地址,仅通过变化偏移地址来进行寻址,最多可寻64KB个内存单元。 偏移地址16位,变化范围为0~FFFFH 例:给定段地址1000H,CPU寻址范围为:10000H~1FFFFH
3. 在8086PC机中,存储单元的地址用两个元素来描述,即段地址和偏移地址。 例: (数据存在21F60H内存单元中) 数据存在内存2000:1F60单元中 数据存在内存的2000H段中的1F60H单元中。
4. 可以将地址连续,起始地址为16的倍数的一组内存单元定义为一个段。
【例题】
2.9 段寄存器
1. 8086CPU有4个段寄存器:CS、DS、SS、ES。
2. 段寄存器提供内存单元的段地址。
2.10 CS和IP
1. CS和IP指示了CPU当前要读取指令的地址。
2. CS为代码段寄存器,IP为指令指针寄存器。
3. 任意时刻,CPU将CS:IP指向的内容当做指令执行。
4. 工作过程简述为下:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP=IP+所读取指令的长度,从而指向下一条指令;
(3)执行指令。转到步骤 (1) ,重复这个过程。
5. 8086CPU加电启动或复位后(CPU刚开始工作时)CS=FFFFH IP=0000H,即,8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是其开机后执行的第一条指令。
2.11 修改CS、IP的指令
1. 在CPU中,程序员能用指令读写的部件只有 寄存器。
2. 8086大部分寄存器的值可以用mov 指令改变,mov指令被称为传送指令。
3. CS、IP的值不能使用mov指令改变值。 不能 mov IP,ax
4. jmp段地址:偏移地址 同时改变CS、IP
jmp 某一合法寄存器 只修改IP 例:jmp ax
2.12 代码段
例:把代码放到123B0H~123B9H,如果要让这段代码执行,设CS=123BH,IP=0000H
*小结:
1. 段地址在8086CPU的段寄存器中存放,提供内存单元的段地址。
2. CS存放指令的段地址。
3. 8086CPU提供转移指令修改CS、IP的值。