第二章主要介绍了寄存器。CPU中主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。不同的CPU,寄存器的个数、结构是不同的。
寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。8086所有的寄存器都是16位的,可以存放2个字节,AX、BX、CX、DX用于存放一般性数据,成为通用寄存器。为了兼容旧的8位寄存,每个16位寄存器可以分为2个单独的8位寄存器来使用,名字分别用AH、AL来表示高8位和低8位。8086CPU可以一次性处理以下两种尺寸的数据:字节byte,一个字节由8个bit组成,可以存储在8位寄存器中;字word,是两个字节,可以存储在16位寄存器中,改字的高8位字节和低8位字节存储在高8位寄存器和低8位寄存器中。
CPU访问内存需要提供内存单元地址,所有的内存单元在内存空间中构成的是一个一维线性结构。每个内存单元都有一个唯一的地址,这个地址就是物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。16位结构的CPU表示:CPU运算器一次运算位数最大为16位,CPU寄存器宽度为16,运算器和寄存器通路为16位。8086CPU有20根地址总线,能表示2的20次放个物理地址。但是16位的机器,1次性处理,传输,存储的地址为16位,所以8086采用2个16位合成一个20位地址的方法。地址加法器采用物理地址=段地址*16+偏移地址表示,段地址左移动一位,一个X进制是数据左移动一位,相当于乘以X。
物理地址=段地址*16+偏移地址,基础地址=段地址*16+偏移地址,物理地址=基础地址+偏移地址。内存没有分段,段的划分来自CPU。CPU采用物理地址=基础地址+偏移地址,来给出内存单元的物理地址,我们可以采用假想的分段的方式来管理内存。根据需要,将几个连续的内存单元看成一个段,用基础地址表示起始地址,用偏移量定位段中的内存单元。段的起始地址(基础地址)一定是16的倍数,基础地址=段地址*16+偏移地址。段的最大长度是2的16次方,偏移地址为16位。
CS和IP是8086里最重要的寄存器,它们提供CPU当前需要执行的指令地址。CS为代码段寄存器,IP为指令指针寄存器。可以使用“jmp 段地址:偏移地址”来同时修改CS、IP。使用“jmp 某一合法寄存器”仅修改IP的内容。某起始地址是16整数倍且连续的一段内存单元可以看成是一个代码段,将CS:IP设置为该段起始值就可以让CPU执行该段代码。
来源:https://www.cnblogs.com/sqy1999/p/9727116.html