汇编语言笔记3

字在寄存器中的存储

8086CPU可以一次性处理一下两种尺寸的数据:

  • 字节,byte,一个字节有8个bit组成,存放在8位寄存器中
  • 字,word,一个字由两个字节组成,一个字可以存在16位寄存器中,高位字节和低位字节自然存在高8位寄存器和低8位寄存器中

物理地址

每一个内存单元在存储空间中都有一个唯一的地址,我们把这个地址称为物理地址

CPU是通过地址总线将一个内存单元的物理地址送入存储器的,在发出之前,必须先形成。

8086是16位结构的CPU:

  • 运算器一次最多可以处理16位的数据
  • 寄存器最大宽度为16位
  • 寄存器和运算器之间的通路为16位

8086有20位地址总线,寻址能力达到1mb(2^20B=1MB),8086CPU采用在内部用两个16位地址合成的方法给出20位地址

给出物理地址的方法

物理地址=段地址 X 16+偏移地址

  • 段地址*16,即段地址向左偏移4位(2^4,相对于二进制)(16进制表示则是偏移两位)
  • 相加后给出了内存单元的物理地址

偏移地址也是16位,则一个段长度最大为64kb,(2^16 B=64KB)分段仅仅是一个虚拟的概念。

段寄存器

CPU需要段地址和偏移地址来形成物理地址。8086CPU有四个段寄存器:CS,DS,SS,ES,先学习CS

CS和IP

CS和IP指示了CPU读取指令的地址,CS为代码段寄存器,IP为指令指针寄存器

可以理解为,在任意时刻,CPU将CS:IP指向的内容作为指令执行,取到指令后,IP会自动增加,指向下一条指令

修改CS和IP:不用mov用jmp

为什么不用mov?8086没有提供该功能

  • jmp 段地址:偏移地址 cs=段地址,ip=偏移地址
  • jmp 某一合法寄存器 :仅修改IP的值,例:jmp ax 执行后IP=ax