一,CPU概述
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:
内部总线实现CPU内部各个器件之间的联系 。
外部总线实现CPU和主板上其它器件的联系。
二,寄存器概述
1.8086CPU有14个寄存器它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
2.字在寄存器中的存儲
一个字可以存在一个l6位寄存器中,区个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。
3.几条汇编指令(不分大小写)
?=044C()
4.物理地址
CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。
我们将这个唯一的地址称为物理地址。
-
16位结构的CPU
概括的讲,16位结构描述了一个CPU具有以下几个方面特征:
(1)、运算器一次最多可以处理16位的数据。
(2)、寄存器的最大宽度为16位。
(3)、寄存器和运算器之间的通路是16位的。 -
8086CPU给出物理地址的方法
8086有20位地址总线,可传送20位地址,寻址能力为1M。
8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。
8. 8086CPU读写内存时,发生了这么一些事:
CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
地址加法器将两个16位地址合并成一个20位的地址;
加法器合成物理地址的方法:物理地址=段地址*16+偏移地址
9.段的概念
错误认识:
内存被划分成了一个一个的段,每一个段有一个段地址。
其实:
内存并没有分段,段的划分来自于CPU,由于
8086CPU用“( 段地址X 16) +偏移地址=物理地址”的方式给出内存单元的物理地址使得我们可以用分段的方式来管理内存。
以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址X16定位段的起始地址(基础地址) 用偏移地址定位段中的内存单元。
注意:偏移地址为16位,16位地址的寻址能力为64K,所以一个段的长度最大为64K。
(1)观察下面的地址有什么启发?
结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。
(2)如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?
结论:偏移地址16位,变化范围为
0 ~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。
比如:给定段地址1000H,用偏移地址寻址,CPU的寻 址范围为: 10000H~ lFFFFH。
数据在21F60H内存单元中。”对于8086PC机的两种描述:
(a)数据存在内存2000:1F60单元中;
(b)数据存在内存的2000段中的1F60H单元中。
10. 段寄存器
段寄存器就是提供段地址的。8086CPU有4个段寄存器:
CS、DS、SS、ES
当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。
11.CS和IP
CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址
CS为代码段寄存器IP为指令指针寄存器。
12.修改CS、IP的指令
在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。
CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。
我们如何改变CS、IP的值呢?
注意:mov指令不能用于设置CS、IP的值8086CPU没有提供这样的功能。
同时修改CS、IP的内容:
jmp段地址:偏移地址
jmp 2AE3:3
jmp 3:0B16
仅修改IP的内容:
jmp某一合法寄存器
jmp ax (类似于mov IP,ax)
jmpbx
功能:用寄存器中的值修改IP。
13.代码段
对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。
可以将长度为N(N≤64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
例如:
这段长度为10字节的字节的指令,存在从123B0H~ 123B9H的一组内存单元中,我们就可以认为,123B0H~ 123B9H这段内存单元是用来存放代码的, 是一个代码段,它的段地址为123BH,长度为10字节。
14.DEBUG
R命令查看、改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以编指令的格式在内存中写入一条机器指令。