汇编语言学习分享第2章

风流意气都作罢 提交于 2020-01-14 20:05:55

CPU的组成

CPU是由运算器(信息处理)、控制器(控制器件工作)、寄存器(信息存储)等器件组成,他们之间通过总线相连。

通用寄存器

通用寄存器时用于存放一般性数据的,以8086 CPU为例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。为了兼容上一代CPU中的8位寄存器,这4个寄存器都可以拆成两个8位的寄存器使用,也就是将16位分成两个8位,AX可分为AH和AL,BX可分为BH和BL,CX可分为CH和CL,DX可分为DH和DL。这里的H可以记为High,高位,L可以记为Low,低位。
再来说一下数据宽度,因为寄存器有16位和8位两种,所以数据宽度可以分为字节和字,一个字节由8个bit组成,可以直接使用低位存储,一个字由两个字节,也就是16位,比如一个十六进制3E10,将这个十六进制存放到AX寄存器总,3E就存放在高位AH中,10存放在低位AL中。

内存单元的物理地址

之前说过数据是通过地址线存放在内存单元中的,那么就必须要确定这个内存单元的地址。
基础地址=段地址x16
基础地址+偏移地址=物理地址
所以物理地址=段地址x16+偏移地址,这里的16是十进制的16,也就是十六进制的A。
这里的段地址可以理解为一段一段的内存存储单元,但是段地址并不是固定的,可以认为10000H-100FFH是一个段,也可以将这段地址看成是10000H-1007F和10080H-100FFH组成的段,以10000H-100FFH为例,它的段地址是1000H,偏移地址为FF,这样基础地址就是1000Hx10H=10000H,这样就可以确定基础地址。再加上偏移地址,就可以确定这段内存。

段寄存器

既然可以通过段地址和偏移地址确定物理地址,那么就需要寄存器来存放段地址,8086 CPU中有4个段地址:CS、DS、SS、ES,偏移地址存放在IP寄存器中,这里以CS寄存器为例,可以简单的理解为通过CS(代码段寄存器)、IP(指令指针寄存器)两个寄存器可以确定CPU需要读取的指令的地址,也就是CPU会将CS:IP指向的内容当作指令执行。

操作指令

  • mov指令
    mov指令称为传送指令,可以使用这个指令为寄存器赋值,例:mov ax,123 这个语句就类似于C语言中的赋值操作ax=123;

  • jmp指令
    jmp指令叫做转移指令,可以用于设置CS、IP中的值(mov指令不能修改CS、IP中的值),例:jmp 2AE3:3,执行这个指令后,CS的值被修改为2AE3H,IP的值被修改为0003H,CPU将从2AE33H处读取指令。

8086CPU工作过程

(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
(2)IP指向下一条指令
(3)执行读取进指令缓冲器的指令
(4)重复上述三个步骤

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!