从0学习汇编语言(2)寄存器

609 阅读3分钟

《从0学习汇编语言目录》

第二章 寄存器

2.1 通用寄存器

8086中的寄存器都是16位的,AX、BX、CX、DX这四个寄存器通常来存放写一般性的数据,被成为通用个寄存器。

AX、BX、CX、DX可分为独立的8个8位寄存器

  1. AX可分为AH和AL
  2. BX可分为BH和BL
  3. CX可分为CH和CL
  4. DX可分为DH和DL

其中AH为高8位,AL为低8位。BX,CX,DX以此类推

这个8个为独立的寄存器,如果AL中的地址8位存储不下,并不会进位到高地址中AH中。

2.2 字在寄存器中的存储

字节:byte,由8个bit组成,可以存在8位的寄存器中。 字:word 由两个字节组成。

2.3 几条汇编指令

汇编指令解释高级语言的描述
mov ax,18将18送如寄存器AX中AX = 18
mov ah,18将18送如寄存器AH中AH = 18
add ax,8ax加上18,并赋值到ax上AX = ax + 8

2.5 16位结构的CUP

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

2.6 8086CPU给出物理地址的方法

由于8086CPU有20位地址总线,可以传送20位地址,但CPU一次只能处理16位数据。所以,8086CPU采用一种在内部两个16位地址合成的方法来合成一个20位的物理地址,由下图所示。

地址=段地址*16+偏移地址的方法来合成物理地址

2.7 段地址*16+偏移地址=物理地址的本质含义

8086中为什么段地址为*16, 是因为段地址为16位,即2^16次方,因为2^4=16。所以2^16*2^4 = 2^20; 在加上偏移地址,正好为20位的地址总线。这样不浪费寻址能力。

本质来说寻址功能为"基础地址+偏移地址=物理地址"

2.8段的概念

我们把内存中要操作的地址,用段区分,每个段的起始地址和结束地址都是16的倍数。 如下图所示

2.9 段寄存器

CS、DS、SS、ES。都有段寄存器,提供内存单元的段地址

2.10 CS和IP

CS 全称为code segment。顾名思义存储地址为代码段, IP 为偏移指针。 我们可以用CS:IP来找到对应的地址 例如 CS=2000 IP = 0001, 根据8086CPU寻址方法,可以访问20001地址信息。

2000:0001表示为20000 + 0001 = 20001 CS就是2.7中的代码段地址 ,IP及为偏移地址。

2.11修改CS、IP指令

修改CS和IP指令不能用MOV指令来修改。因为系统不支持 需要用jmp指令修改 例如:

jum 2AE3:3 执行后 CS为2AE3, ip为0003
jmp 2AE3 执行后只修改IP部分,不修改CS

《从0学习汇编语言(3)寄存器(内存访问)》