随着第一章的结束,我们对汇编语言的概况有了足够清晰和明确的基本认识,第二章的展开将会围绕着寄存器的方方面面具体阐释,寄存器是CPU中程序员可以用指令读写的部件,可以通过更改寄存器中的内容来实现对CPU的掌控。
不同的CPU,寄存器的个数、结构是不同的,8086CPU有12个寄存器,分别是AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
通用寄存器
AX、BX、CX、DX(16位)
一个16位寄存器可以存储一个16位的数据,为了和早期的CPU操作兼容,每个通用寄存器分为2个8位寄存器来使用。
AX分为AH和AL
BX分为BH和BL
CX分为CH和CL
DX分为DH和DL
拿AX寄存器举例
下面对几个基本概念进行补充:
字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
字:一个字由两个字节组成,可以存在一个16位寄存器中。
汇编指令
程序员通过汇编指令来控制CPU进行工作。
下面举几个常见的汇编指令:
注:
汇编指令中不分大小写,在mov和add指令操作中,操作对象必须位数一致,运算时如果超过寄存器的位数,要舍掉。
物理地址
CPU通过地址总线送入存储器的,每一个单元的唯一地址。
16位CPU的特性:
运算器最多可以处理16位的数据。
寄存器的最大宽度为16位。
寄存器和运算器之间的通路为16位。
我们这次具体介绍8086CPU给出物理地址的方法:
8086CPU有20位地址总线,可以传送20位地址,而8086CPU只是16位结构,其采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址,
物理地址=段地址*16+偏移地址
段地址也称为基础地址或者起始地址,段只是一个隐藏概念。
段寄存器:CS、DS、SS、ES
提供段地址
CS:代码段寄存器,IP:指令指针寄存器
在8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行
jmp:此命令用来修改CS、IP的值。
举例
jmp 4AE3:2
CS ← 4E3H
IP ← 2