8086 汇编笔记 - 寄存器/寻址 - 01
8086 寄存器
寄存器 | 说明 |
---|---|
AX (AH+AL) | 累加器(Accumulator) |
BX (BH+BL) | 基地址寄存器(Base Register) |
CX (CH+CL) | 计数寄存器(Count Register) |
DX (DH+DL) | 数据寄存器(Data Register) |
SP | 堆栈指针寄存器, 指向栈顶(高地址) |
BP | 一般和SP 联合使用, 用于寻找堆栈数据而不破坏SP |
SI | 源变址寄存器 |
DI | 目的变址寄存器 |
CS | 代码段 段寄存器 |
DS | 数据段 段寄存器 |
SS | 堆栈段 段寄存器 |
ES | 附加数据段 端寄存器, 一般在复制数据时配合DS 当作目的段寄存器使用 |
IP | 指令指针, 指向下一条指令的地址 |
FLAGS | 标志寄存器 (见下表) |
标志寄存器
标志 | 说明 |
---|---|
CF | 进位标志 (Carry), 如果运算的最高为产生进位或借位, 则CF=1 |
PF | 奇偶位 (Parity), 如果运算结果的低8 位中的1的个数(二进制)为偶数个, 则PF=1 |
AF | 辅助进位标志 (Auxiliary), 当运算结果的低4 位产生一个进位或借位, 则AF=1 |
ZF | 零标志 (Zero), 若运算结果为0, 则ZF=1 |
SF | 符号标志 (Signed), 当数据用补码表示时, 最高为表示符号为, SF与运算结果最高为相同 |
OF | 溢出标志 (Overflow), 若运算中产生了溢出, 则OF=1 |
DF | 方向标志 (Direction), 用于控制串操作指令, 如果DF=0, 则串操作过程中地址会增大, 否则地址会减小 |
IF | 中断允许标志 (Interrupt), 若IF=0, 则CPU不能对可屏蔽中断做出响应, 否则CPU可以接受可屏蔽中断 |
TF | 单步标志 (Trap), 如果TF=1, 则CPU按跟踪方式执行指令 |
数据寻址方式
- 立即寻址
操作数包含在指令中
MOV AX, 1234H ; 将 1234H 存入寄存器AX, (AH = 12H, AL = 34H)
- 寄存器寻址
数据存放在寄存器中
MOV AX, 1234H
MOV AX, BX ; 将BX中的数据放入AX
- 直接寻址
数据在内存中, 将数据所在的 16位偏移地址用方括号括起来
默认使用DS 段寄存器
对应的物理地址计算方法为: 段地址 * 10H + 偏移地址
假设 DS = 2000H
那么 MOV AX, [1000H]
读取的物理地址是:
2000H * 10H + 1000H = 21000H
表示将 物理地址 21000H
里的一个字型数据放到AX中
假设2000H:1000H
位置保存的数据为 1234H
, 如下图
则MOV AX, [1000H]
会将34H
放入AH, 12H
放入AL. 即高位地址的数据存放在AX高位, 低位存在低位
- 寄存器间接寻址
数据在内存中的地址存放在寄存器中
MOV AX, [BX]
- 相对寄存器寻址
可以在偏移地址中再指定偏移量
MOV AX, [BX+2H]
MOV AX, [BX+SI+2H]