寄存器概述
CPU由运算器、控制器、寄存器构成在CPU中:
运算器进行信息处理;寄存器进行信息存储;控制器控制各种器件进行工作;内部总线链接各种器件,在它们之间进行数据的传送。
对汇编来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
不同的CPU,寄存器的个数,结构不同。8086CPU有14个寄存器,每个寄存器有一个名称:AX,BX,CX,DX,Sl,DI,SP,BP,IP,CS,SS,DS,ES,PSW。
通用寄存器
F4:AX BX CX DX
F4常用于存放一般性数据,被称作通用寄存器,8086的寄存器都是16位的,没有例外。
由于历史原因,F4又可以拆分成高八位寄存器和低八位寄存器
AX分为AH和AL
BX分为BH和BL
CX 分为CH和CL
DX 分为DH和DL
几条汇编指令
格式:
mov寄存器,立即数 mov寄存器,寄存器
add 寄存器,立即数 add 寄存器,寄存器
关于2.1的神回复:
8226H+8226H=1044CH
1044CH显然超出了16位,那么,数据溢出,最高位1被丢弃,所以,AX数据为044CH
关于2.2的神回复:
C5H+93H=158H
显然超出了8位,最高位1被舍弃,AL=58H,则AX=0058H
前面所用过的指令,我们发现每条指令的两个操作对象位数都是一致的。
物理地址
CPU访问内存单元时,要给出内存单元的地址。所有的内存
单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU通过地址总线送入存储器的,必须是一个内存单元的物
理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。
我们一直都在说8086是16位机,那么到底什么是16位结构CPU?
1.运算器一次最多可以处理16位的数据。
2.寄存器的最大宽度为16位。
3.寄存器和运算器之间的通路位16位。
矛盾激化:
8086有20条地址总线,也就是说,可以传送20位地址,达到1M的寻址能力,如果从8086cpu内部来看,如果只是简单的将地址从内部发出,最多只能达到16位,寻址能力只是64K。
既然地址是理想中的,所以8086用了这样的一个方法:在内部用两个16位地址合成->20位物理地址
当8086CPU读写内存时:
1、CPU中的相关部件提供两个16位的地址,—个成为段地址,另一个成为偏移地址;
2、段地址和偏移地址通过内部总线送入一个成为地址加法器的部件;
3、地址加法器将两个16位地址合成为一个20位的物理地址;
4、地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
5、输入输出控制电路将20位物理地址送上地址总线;
6、20位物理地址被地址总线传送到存储器。
地址加法器(血汗工厂)采用物理地址=段地址×16+偏移地址的方法合成。
“段地址×16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
更一般地说,8086CPU 的这种寻址功能是.“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。8086CPU中,段地址x16可看作是基础地址。
扩展阅读:如果对移位和乘法的关系不是很懂,参考王爽《汇编语言》“由段地址x16引发的血案”加果对本质论不懂,参考“单行离模型"
内存分的段是CPU决定的,与其说是段地址,不如叫基础地址,比如我们认为地址10000H~100FFH内存单元组成一个段,段地址1000H,大小100H,也可以认为地址
10000H~1077FH,10080H -10OFFH组成两个段,大小都是80H,段地址分别是1000H、1008H
段寄存器CS与IP
CS为代码段寄存器,IP为指令指针寄存器,它们指示了CPU当前要读取指令的地址。8086CPU将CS:IP指向的内容当做当前指令执行。
说明书:
1、8086CPU当前状态:CS中的内容为2000H,IP内容为0000H;
2、内存20000H~20009H单元中存放着可执行的机器码;
3、内存20000H~200009H单元中存放的机器码对应的汇编指令如下。
工作过程:
1、从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器。
2、IP=IP+所读取指令的长度,从而指向下一条指令。
3、执行指令,转到1,重复过程。