寄存器们

这里整理了8086汇编中最重要的六个寄存器,还有几个没有整理啦~

FL标志寄存器

CF 进位标志,借位标志

左移和右移出去的1位会填到CF上,与CF相关的两条跳转指令jc、jnc、clc、stc、cmc

1
2
3
4
5
6
clc;使CF=0,clear carry flag
stc;使CF=1,set carry flag
cmc;使CF反转,complement carry flag
jb;jump if below
jc;jump if carry flag
;上述两条指令等价

inc和dec指令不影响CF标志位

ZF 零标志

OF 溢出标志

溢出两种情况:正数相加得到负数、负数相加得到正数

注意:8位寄存器加法运算溢出时要把原先运算结果减去100h

溢出标志OF用于反映有符号数加减运算所得结果是否溢出.如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0.

of是溢出标志位,SF是符号标志位.

  • 如果OF为零,说明没有溢出,那么逻辑上真正的结果的正负等于实际结果的正负.
    如果SF为1,那么实际结果为负,所以逻辑上真正的结果为负.
    -45-5=-50
  • 如果OF为1,说明有溢出,那么逻辑上真正的结果的正负不等于实际结果的正负.
    如果SF为0,那么实际结果为正,由前面“逻辑上真正的结果的正负不等于实际结果的正负”可知,逻辑上真正的结果应该为负.
    可得出结论:如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负.
    十进制 十六进制
    -45-100=-145
    mov al,-45 mov al,D3
    add al,-100 add al,9C
    al的值应为-145, al的值为 6f(111) ,二进制表示为01101111,
    8位二进制能表达的数据范围-128至127,of=1 因此,sf=0,因为溢出导致了实际结果为正,
  • 如果OF为1,说明有溢出,那么逻辑上真正的结果的正负不等于实际结果的正负.
    如果SF为1,那么实际结果为负,由前面“逻辑上真正的结果的正负不等于实际结果的正负”可知,逻辑上真正的结果应该为正.
    可得出结论:如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正.
    十进制 十六进制
    45+100=145
    mov al,45 mov al,2d
    add al,100 add al,64
    al的值应为145, al的值为 91h ,二进制表示为1001 0001,
    8位二进制能表达的数据范围-128至127,of=1 因此,sf=1因为溢出导致了实际结果为负
    0110 1111(111的补码)
    1001 0000(取反了)
    1001 0001(加1了,得到-110的补码)即91h
  • 如果OF为0,说明没有溢出,那么逻辑上真正的结果的正负等于实际结果的正负.
    如果SF为0,实际结果正,所以逻辑上真正的结果正.

SF 符号标志

SF=0(最高位是什么,SF就是什么)

DF 方向标志

DF=0 每次操作后si++,di++ 正方向 源地址>目标地址
DF=1 每次操作后si–,di– 反方向 源地址<目标地址

IF 中断标志

IF=1,允许中断,否则禁止中断

cli sti指令