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. 立即寻址

    操作数包含在指令中

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

    数据存放在寄存器中

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

    数据在内存中, 将数据所在的 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\]

  4. 寄存器间接寻址

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

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

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

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