前言:
在CPU中:运算器进行信息处理;寄存器进行信息存储;控制器控制各种器件的工作;内部总线连接各种器件,进行数据传输.
前一章所说的总线相对于CPU内部来说是外部总线,实现CPU和主板上其他器件的联系.而内部总线实现CPU内部各个期间的联系.
一.通用寄存器:AX,BX,CX,DX
1.8086CPU的所有寄存器都是16位的,存放两个字节(所能表示最大值为65535)
2.AX,BX,CX,DX这四个通用寄存器常用来存放一般性的数据
3.这四个寄存器都可分为两个可独立使用的8位寄存器来用(能表示最大值255)
AX =AH + AL , BX = BH + BL ……
4.字节(Byte):由8个bit组成,可存放在8位寄存器中
字(word):由两个字节组成,分别为这个字的高位字节和低位字节
5.形如add al,93H进行的是8位运算,结果超过8位的值取后8位.
二.物理地址
1.所有的存储单元构成的存储空间是一个一维的线性空间.每一个内存单元在这个空间中都有唯一的地址,即物理地址.
2.CPU通过地址总线传入存储器的必须是一个内存单元的物理地址.在CPU发出物理地址之前,必须要在内部先形成这个物理地址
3.16位CPU:①运算器一次最多可以处理16位的数据.②寄存器的最大宽度为16位.③寄存器和运算器之间的通路为16位
4.8086CPU有20位地址总线,寻址能力为1MB.它又是16位结构,在内部 一次性处理,存储的地址为16位.即可表现的寻址能力只有2^16=64KB
5.8086CPU采用在内部用两个16位地址合成的方法来形成一个20位(即5Byte)的物理地址,过程如下:
①.CPU中的相关部件分别提供16位的段地址(SA),偏移地址(EA).
②.地址加法器将这两个16位的地址用公式合成一个20位的物理地址:
物理地址 = 段地址*16(或二进制码<<4或在右边补一个0) + 偏移地址
③.合成的物理地址通过输入输出控制线,再经由地址总线传到存储器
实际上,段地址*16可看做是基础地址(也叫段首地址,可知其末尾一字节必须为0)
6.其实内存并没有分段,段的划分来自CPU(便于管理内存).将若干地址连续的内存单元看做一个段,用段地址*16定位段的起始地址(基础地址).偏移地址也为16位,寻址能力为64KB,所以一个段的长度(存放连续存储单元的个数)最大为64KB
7.CPU可以用不同的段地址和偏移地址形成同一个物理地址
8.数据在21F60H内存单元中 一般表述为:
①.数据存在内存2000:1F60 单元中 ②.数据存在内存的2000段中的1F60单元中
9.可根据需要将地址连续,起始地址为16的倍数的一组内存单元定义为一个段
三.段寄存器:CS,DS,SS,ES
1.CS和IP是8086CPU中两个最关键的寄存器.CS为代码寄存器,IP位指令指针寄存器.
2.在8086CPU中,任意时刻,CPU将CS:IP指向的内容当做指令执行
3.8086的工作过程可简要描述如下:
①.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
②.IP+=所读取指令的长度,从而指向下一条指令
③.执行指令,转到步骤1,重复
4.在CPU加电启动或复位(即CPU刚开始工作)后,CS和IP被设置为CS=FFFFH,IP=0000H,即FFFF0单元中的指令是8086的PC开机后执行的第一条指令
5.CPU正是凭CS:IP这个指针区分内存中的数据与指令.被CS:IP指向过的均为指令
6.8086CPU中大部分寄存器的值,都可以用mov指令(传送指令)来改变.但CS,IP这两个寄存器不可.而是需要使用转移指令(jmp指令)来修改: jmp 段地址:偏移地址若只想修改IP(偏移地址)的内容,可用形如 jmp 某一合法寄存器 这个指令来完成
(即 jmp ax 含义等同于 movIP,ax)
补充:
8086CPU:段地址和偏移地址均为16位
80386CPU(32位):段地址为16位,偏移地址为32位
段地址:偏移地址
这样的形式称为逻辑地址
练习:
- 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为
00010H - 1000FH
Debug命令:
R:查看/修改CPU中寄存器的内容
D:查看内存中的内容
E:修改内存中的内容
U:将内存解释为机器指令及对应的汇编指令
T:执行CS:IP指向的内存单元的指令
A:以汇编指令形式向内存写入指令