- CPU中:
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在它们之间进行数据传输。
8086CPU 14个寄存器,所有的寄存器都是16位的,可以存放两个字节:
AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW-
通用寄存器:AX,BX,CX,DX
4.8086CPU可以一次性处理一下两种尺寸的数据:
- 字节:byte,一个字节有8bit组成,存在8位寄存器中。
-
字:word,一个字有两个字节组成。
5.简单的汇编指令:
- 汇编指令和寄存器名称不区分大小写。如 mov ax,18 和 MOV AX,18 同等含义
-
进行数据传送和运算时,要注意指令的两个操作对象的位数应当是一致的。
-
练习
解:
mov ax,2
add ax,ax
add ax,ax
add ax,ax
8.物理地址
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间都有唯一的地址。
- 8086 16位结构的CPU特性:
- 运算器一次最多可以处理16位的数据。
- 寄存器最大的宽度为16位。
- 寄存器和运算器之间的通路位16位。
-
8086物理地址计算方法:
8086CPU是16位结构但是有20位地址总线。所以内部使用了两个16位地址合成的方法来形成一个20位的物理地址。
“段地址16+偏移地址=物理地址”的本质含义:
CPU在访问内存时,用一个基础地址(段地址16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。段的概念:
物理地址 = SA*16 + EA
- SA*16必定是16的倍数,所以一个段的其实地址也一定是16的倍数
- 偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的最大长度为64KB
-
练习
解:
(1)物理地址 = 0001H (SA) * 16 + EA
EA 的取值范围为 0 - FFFF
所以 CPU的寻址范围为: 0010H ~ 1000FH
(2) 20000H = SA * 16 + EA (EA 为 0 ~ FFFFH)
当 EA = FFFFH时最小,SA最小 1001H
当 EA = 0时 SA最大 2000H 段寄存器
8086CPU 有4个段寄存器: CS,DS,SS,ES。 当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。-
CS && IP
CS 为段寄存器, IP 为指令指针寄存器。
在8086CPU中,任意时刻,假设CS中的内容为 M, IP中的内容为 N,则 8086CPU将从内存 M*16 + N 单元开始,读取一条指令并执行。也就是说 8086CPU 任意时刻,将 CS:IP内容当做指令执行。
工作过程简述如下:
(1)从 CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP = IP+所读取的指令长度,从而指向下一条指令;
(3)执行指令。转到步骤1,重复这个过程。
- 修改 CS,IP的指令:
- mov 指令不能用于设置CS,IP的值
- jmp 段地址:偏移地址 (用纸令中给出的段地址修改CS,偏移地址修改IP)
例: jmp 2AE3:3 执行后:CS=2AE3H, IP=0003H, CPU将从2AE33H处读取指令 - 若想仅仅修改IP的内容, 可用“ jmp 某一合法寄存器 ”的指令完成
例: jmp ax
指令执行前: ax=1000H CS=2000H IP=0003H
指令执行后: ax=1000H CS=2000H IP=1000H
jmp bx
指令执行前: bx=1233H CS=2000H IP=0003H
指令执行后: bx=1233H CS=2000H IP=1233H
jmp 某一合法寄存器: 用寄存器的值修改IP
代码段
存放代码的内存区域,长度N<=64KB,起始地址为16倍数的连续地址段。
想要执行这段代码,则需要将 CS:IP指向内存单元中的内容指令。小结:
- 段地址在 8086CPU的段寄存器中存放。 当8086CPU要访问内存时,由段寄存器提供内存单元地址。 8086有4个段寄存器 CS,DS,SS,ES。其中CS存放指令的段地址
- CS存放指令的段地址,IP存放指令的偏移地址。
8086中,任意时刻,CPU将 CS:IP 指向的内容当做指令执行 - 8086CPU工作过程:
(1)从 CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP = IP+所读取的指令长度,从而指向下一条指令;
(3)执行指令。转到步骤1,重复这个过程。 - 8086CPU提供转移指令修改CS,IP的内容。
-
练习
解: