汇编——第二章 寄存器

五迷三道 提交于 2020-03-09 18:42:44

第二章 寄存器

cpu的主要的部件是寄存器, 不同的cpu,寄存器的个数、结构是不相同的。
在8086cpu中有14个寄存器,这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

  1. IP:指令指针,指向当前相互要取出的指令字节,当BIU从内存中取出一个指令后,IP就自动加1,这里的1指的不是一个字节,而是该条指令所占的字节数。 IP指向的是指令地址的段内地址偏移量,又称为偏移地址(Offset Address)或者有效地址(A, Effective Address)。
  2. CS:代码段寄存器
  3. DS:数据段寄存器
  4. SS:堆栈寄存器
  5. ES:附加段寄存器

其他的寄存器会在后面相应的章节一一列出作用。

2.1 通用寄存器

8086CPU的所有寄存器都是16位的,可以存放俩个字节。
其中通用寄存器为AX、BX、CX、DX这四个。
这四个寄存器又可以分为8个单独的寄存器来使用,拿AX来说,可以分为高低俩个字节,名字分别为AH、AL。
虽说这四个寄存器都是通用寄存器,但是其都有独自的功能和特点。

  1. AX:累加寄存器,通常用于运算,在乘除指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传输数据。
  2. BX:基址寄存器,常用于地址索引。
  3. CX:计数寄存器,常用于计数;常用于保存计算值,如位移指令,循环(loop)和串处理指令中作隐含的计数器。
  4. DX:数据寄存器,常用于数据传递。

2.2 字在寄存器中的存储

分为俩种

  1. 字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中,如AL
  2. 字:记为word,一个字由俩个字节组成,分别成为高位字节和低位字节,可以存在16位寄存器中,如AX。

2.3 几条汇编指令

2.4 物理地址

所有的内存单元构成的存储空间是一个以为的线性空间,每一个内存单元在这个空间中都有一个唯一的地址,这个地址就称为物理地址。

2.5 16位结构的CPU

16位结构或者说(16位机,机器字长位16位等)描述了CPU具有的结构特性为

  1. 运算器ALU一次最多可以处理16为的数据;
  2. 寄存器的最大宽度为16为;
  3. 寄存器和运算器之间的通路为16位;

2.6 8086CPU的物理寻址方法

物理地址由地址加法器算出
物理地址=段地址*16+偏移地址
更一般的说 物理地址=基础地址+偏移地址
其中基础地质 = 段地址*16

2.8 段的概念

其实在内存中,并没有所谓的分段,但是我们可以用分段的方式来管理内存。
我们可以认为:比如说 地址10000H ~ 100FFH的内存单元构成一个段,段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H。也可以将该段分为俩个段,如10000H ~ 1007FH 和 10080H ~ 100FFH。起始地址分别为1000H 和 1008H。

值得注意的是:段地址*16一定是16的倍数,所以一个段的起始地址一定是16的整数倍;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的最大长度为64KB。

2.9 段寄存器

8086CPU的段寄存器有四个:CS、DS、SS、ES。

2.10 CS和IP

CS和IP分别为代码段寄存器和指令指针寄存器。
CPU读取指令的过程可以概括为一下的过程
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲区。
(2)IP=IP+所读取指令的长度,从而指向下一条指令。
(3)执行指令。转到第一个步骤,重复过程。

2.11 修改CS、IP(jmp指令)

不能通过mov指令来设置CS和IP的值。
修改CS、IP的值的指令中有一个:jmp指令。

  1. 如果想同时修改CS、IP的值,可以用“jmp 段地址: 偏移地址”来完成。如
    jmp 2AE3:3,执行完,CS=2AE3H,IP为0003H,CPU从2AE33H处读取指令。

  2. 若只想修改IP,可以用“jmp 一个合法寄存器”来完成,如
    mov ax,1000H jmp ax 执行后 IP = 1000H。

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