寄存器
8086CPU中有14个寄存器,分别是AX、BX、CX、DX、SI、DI、BP、SP、IP、CS、SS、DS、ES、PSW。
1 | 通用寄存器:AX、BX、CX、DX |
通用寄存器
以AX为例
一个16位寄存器可以存储一个16位的数据,它可以存储的最大值为2的16次方减1(65535)。
为保证兼容这四个通用寄存器都可分为两个独立使用的8位寄存器来使用:
16位 | 高8位 | 低8位 |
---|---|---|
AX | AH | AL |
BX | BH | BL |
CX | CH | CL |
DX | DH | DL |
段寄存器
段寄存器用来存放段地址。
8086CPU有4个段寄存器:CS、DS、SS、ES。这四个段寄存器提供内存单元的段地址。
CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示 了CPU当前要读取指令的地址。
CS为代码段寄存器,IP为指令指针寄存器,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行。
DS和[address]
在8086CPU中,内存地址由段地址和偏移地址组成,读写一个内存单元的时候,必须先给出这个内存单元的地址。
1 | 用DS寄存器存放要访问的数据的段地址 |
SS和SP
栈顶的段地址存放在存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。
栈操作机制:
1 | push 指令执行步骤 |
索引寄存器
si和di
SI(Source Index) 和 DI(Destination Index) 是两个16位的索引寄存器,主要用于字符串/数组操作和内存块数据传输。
代码示例
1 | ; 将字符串从源复制到目标 |
内存与数据
内存单元的描述
要完整的描述一个内存单元,需要两种信息:
- 内存单元的地址
- 内存单元的长度(类型)
不同的寻址方式
数据的处理
处理数据要清楚数据在内存中的位置和要处理的数据的长度
指令
ADD
1 | ADD 目标操作数, 源操作数 ;目标操作数 = 目标操作数 + 源操作数 |
SUB
1 | SUB 目标操作数, 源操作数 ;目标操作数 = 目标操作数 - 源操作数 |