Devld

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按跟踪方式执行指令

flags

数据寻址方式

  1. 立即寻址

操作数包含在指令中

MOV AX, 1234H    ; 将 1234H 存入寄存器AX, (AH = 12H, AL = 34H)
  1. 寄存器寻址

数据存放在寄存器中

MOV AX, 1234H
MOV AX, BX      ; 将BX中的数据放入AX
  1. 直接寻址

数据在内存中, 将数据所在的 16位偏移地址用方括号括起来 默认使用DS 段寄存器 对应的物理地址计算方法为: 段地址 * 10H + 偏移地址

假设 DS = 2000H 那么 MOV AX, [1000H] 读取的物理地址是: 2000H * 10H + 1000H = 21000H 表示将 物理地址 21000H 里的一个字型数据放到AX中

假设2000H:1000H位置保存的数据为 1234H, 如下图 2000H:1000H

MOV AX, [1000H]会将34H放入AH, 12H放入AL. 即高位地址的数据存放在AX高位, 低位存在低位 MOV AX, \[1000H\]

  1. 寄存器间接寻址

数据在内存中的地址存放在寄存器中

MOV AX, [BX]
  1. 相对寄存器寻址

可以在偏移地址中再指定偏移量

MOV AX, [BX+2H]
MOV AX, [BX+SI+2H]