汇编8086中的OF溢出标志怎么判断?它的准确定义是什么?

1个回答

  • 溢出标志OF(Overflow Flag)

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

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

    -----------------------------------------------------------------------------------

    1.如果OF为零,说明没有溢出,那么逻辑上真正的结果的正负等于实际结果的正负.

    如果SF为1,那么实际结果为负,所以逻辑上真正的结果为负.

    -45-5=-50

    2.如果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,因为溢出导致了实际结果为正,

    3.如果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

    4.如果OF为0,说明没有溢出,那么逻辑上真正的结果的正负等于实际结果的正负.

    如果SF为0,实际结果正,所以逻辑上真正的结果正.