第二章 寄存器(cpu工作原理)
概述
一个典型的cpu由运算器 控制器 寄存器等器件组成,这些器件靠内部总线相连
8086 cpu有14个存储器,他们的名称为: AX BX CX DX SI DI SP BP IP CS SS DS ES PSW
8个通用寄存器
2.1 通用寄存器
8086cpu所有的寄存器都是16位的,可以存放两个字节.
AX BX CX DX通常用来存放一般信息称为通用寄存器
一个16位寄存器所能存放的最大值位216-1
为保证兼容性,这四个寄存器都是可以分为两个独立的8位寄存器使用
如AX可以分为AH 和 AL (高位和低位)
2.2 字在寄存器中的存储
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节分别存储在高8位寄存器和低8位寄存器中.
2.3几条汇编指令
汇编指令不区分大小写
EX :
Cpu执行下表中的从程序段的每条指令后,对寄存器中的数据进行改变.
8226H + 8226H = 1044C 超出最大值 ?的值为044C
EX2 :
C5 + 93 = 158 ?的值为0058H
这里的丢失指的是进制不能在8位寄存器中保存,但是cpu并不是真的丢弃这个进位值
2.4物理地址
Cpu访问内存单元时要给出内存单元的地址.所有的内存单元构成的存储空间时唯一一个线性空间.我们将这个唯一的地址成为物理地址
2.5 16位结构的cpu
概括地讲,16位结构描述了一个cpu具有以下几个方面的特征:
1.运算器一次最多可以处理16位的数据
2.寄存器的最大宽度为16位
3.寄存器和与运算器之间的通路是16位的
2.6 8086cpu给出物理地址的方法
8086有20位地址总线,可传20位地址,寻址能力位1M
8086内部为16位结构,他只能传送16位的地址,边线处的寻址能力却只有64k
8086cpu采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址
地址加法器合成物理地址的方法:
物理地址 = 段地址 * 16 + 偏移地址
2.8段的概念
在编程时可以根据需要,奖若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元
PS:偏移地址为16位,16位地址的寻址能力为64k,所以一个段的长度最大为64k
小结
1.cpu访问内存单元时,必须向内存提供内存单元的物理地址
2.8086cpu在内部用段地址和偏移地址位相加的方法形成最终的物理地址
3.物理地址可以由多种段地址和偏移地址的组合
4.偏移地址为16位,变化范围位0 ~ FFFFH,仅用偏移地址来寻址最多可寻16k个内存单元
5.“数据在21F60H内存单元中”对于8086pc机的两种描述:
a) 数据存在内存2000:1F60单元中
b) 数据存在内存的2000段中的1F60H单元中
2.9段寄存器
概述: 段寄存器是提供地址的
8086有4个段寄存器
CS DS SS ES
当8086cpu要访问内存时,由这4个段寄存器提供内存单元的地址
CS和IP是8086cpu中最关键的段寄存器,他们指示了cpu当前要读取命令的地址
CS为代码段寄存器
IP为指令指针寄存器
CS和IP进入地址加法器 -> 地址总线输出 -> 找到对应地址 -> 返回地址中的数据 -> 指令缓冲器 -> IP增加所读取命令的长度,从而指向下一条指令
8086cpu工作过程的简要描述
1.在8086cpu加电启动或复位时,CS和IP被设置为CS = FFFFH, IP = 0000H
2.FFFF0H单元中的指令是8086pc机开机后执行的第一条指令
2.11 修改CS, IP的指令
在cpu,程序员能够指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对cpu的控制
Cpu从何处执行命令是由CS, IP中的内容决定的,程序员可以通过改变CS, IP中的内容来控制cpu执行目标命令
a) 同时修改CS IP的内容:(段地址*16+偏移地址)
jmp 段地址 : 偏移地址
jmp 2AE3:3
jmp 3:0B16 实际是00030 + 0B16
功能 : 使用指令中给出的段地址修改CS 偏移地址修改IP
b) 仅修改 IP 的内容:
jmp 某一合法寄存器
jmp ax
jmp bx
功能 : 用寄存器中的值修改 IP
EX: 要将IP 修改为200, 先 mov ax, 200 然后再 jmp ax
2.12 代码段
概念 : 对于8086pc机,在编程时,可以根据需要,将一组内存单元定义为一个段.可以将长度为N(N <= 64KB)的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段.
如何使得代码段中的指令被执行?
将一段内存当做代码段,仅仅是我们在编程时的一种安排,cpu并不会由于这种安排,就自动地将我们定义的代码段中的指令当做指令来执行.
cpu只认被CS : IP指向的内存单元中的内容为指令,所以要将CS : IP只想所定义的代码段中的第一条指令的首地址
2.9 ~ 2.12节小结
1.段地址在8086cpu的寄存器中存放.当8086cpu要访问内存是,有段寄存器提供内存单元的段地址.8086cpu有4个段寄存器,其中CS用来存放指令的段地址.
2.CS存放指令的段地址,IP存放指令的偏移地址.
3.8086机中,任意时刻,cpu将CS : IP指向的内容当做指令执行
4.8086cpu的工作过程
a) 从cs : ip指向的内存中读取指令,读取的指令进入指令缓冲器
b) ip指向下一条指令
c) 执行命令(转到步骤a, 重复这个过程)
5.8086cpu提供转移指令修改cs ip的内容
实验一 查看cpu和内存,使用机器指令和汇编指令编程
1.debug命令
a) R命令,查看改变cpu寄存器的内容
b) D命令,查看内存中的内容
c) E命令改写内存中的内容
d) U命令,将内存中的机器指令翻译成汇编指令
e) T命令,执行一条机器指令
f) A命令,以汇编指令的格式在内存中写入一条机器指令