寄存器组
数据(X)寄存器组
寄存器名称 | 全称 | 作用 | 大小 |
---|---|---|---|
AX | Accumulator | 算术运算 | |
BX | Base | 基址寄存器 | |
CX | Count | 用于循环计数器 | |
DX | Data | 在双字长运算时把DX和AX组合一起存放一个双字长的数 |
段(S)寄存器组
寄存器名称 | 全称 | 作用 | 大小 |
---|---|---|---|
CS | Code | 代码区的段地址 | |
DS | Data | 程序数据区的段地址 | |
SS | Stack | 堆栈数据区的段地址 | |
ES | Extra | 辅助的数据区的段地址 |
段寄存器存放的是段地址
指针(P)和索引(I)寄存器
寄存器名称 | 全称 | 作用 | 大小 |
---|---|---|---|
SP | Stack Pointer | 存放堆栈指针(栈顶) | |
BP | Base Pointer | 存放基址指针 | |
SI | Source Index | 源索引用于自增变址 | |
DI | Destination Index | 目标索引用于自减变址 |
在串处理指令当中,我们一般使用SI和DS搭配使用,DI和ES搭配使用
特殊的控制寄存器
寄存器名称 | 全称 | 作用 | 大小 |
---|---|---|---|
IP | Instruction Pointer | 存放指令指针 | |
PSW | Program status words | 程序状态字(flag) |
PSW状态字的条件码:
OF【Overflow Flag】溢出
SF【Sign Flag】正负
ZF【Zero Flag】零
CF【Carry Flag】最终进位
AF【Auxiliary Flag】中途进位
PF【Parity Flag】奇偶
DF【Direction Flag】高低方向
IF【Interrupt】允许中断
数据寻址
约定:
寄存器名字代表了该寄存器的地址【重要!!容易误解!!!】
(寄存器名字) 表示寄存器里面的数据内容
[Rname],把Rname里面的内容当成偏移地址
1. 立即数寻址
mov al,5
mov ax,3064h
实现:
(al)=05H
(ax)=3064h
用途:
一般来说 “立即数寻址” 用于给寄存器初始化赋值
2. 寄存器寻址
mov ax,bx
实现:
(ax)=(bx)
3. 寄存器间接寻址
mov ax,[bx]
实现:
(ax)=(ds+(bx))
4. 直接寻址
mov ax,[2000h]
当操作数在数据段里面,把ds当作基址
实现:
ds=30000h
(ax)=(ds+2000h)
用途:
直接寻址用于处理单个变量,我们把他从数据段里面拿出来放到其他寄存器里面