溢出标志位:OF=Overflow flag
一个有符号数,运算结果超过当前运算位数所能表示的范围,OF=1,否则,OF=0


  • 1个字节,如果当作有符号数看待:存储范围就是:-128~+127
  • 2个字节,如果当作有符号数看待:存储范围就是:-32768~+32767
  • 4个字节,如果当作有符号数看待:存储范围就是:-2147483648~+2147483647
    无论是哪种存储方式,均是最高位为符号位,0代表正数,1代表负数。

  • 1个字节,如果当作无符号数看待:存储范围就是:0~255
  • 2个字节,如果当作无符号数看待:存储范围就是:0~65535
  • 4个字节,如果当作无符号数看待:存储范围就是:0~4294967295
mov al, 0x7E    ;0x0111 1110 +126
add al, 0x01    ;0x0111 1111 +127
add al, 0x01    ;0x1000 0000 OF=1, 按有符号数看,此时就溢出了
add al, 0x01    ;0x1000 0001 OF=0,现在是负数-1

End:
jmp near End

times 510 - ($ - $$) db 0x00
db 0x55, 0xAA

  • 当我们把一个数字,当成无符号数运算,是否溢出看 CF 标志位。
  • 当我们把一个数字,当成有符号数运算,是否溢出看 OF 标志位。

在计算机中,一个数字,到底是有符号数,还是无符号数,是使用者大脑中的主观想法。

  • 你认为它是有符号数,你就观察与有符号数相关的标志位。
  • 你认为它是无符号数,你就观察与无符号数相关的标志位。

计算机中,没有任何一个地方,会告诉你,这个数字,到底是有符号数,还是无符号数。
它不管这些事情,怎么样看待它是编程的人需要考虑的事情。
但计算机内部,会同时记录两种可能性。

一种是把这个数当做有符号数,反映到有符号数相关的标志位上,如果你要操作这个数,你就使用有符号数相关的汇编指令去操作。

一种是把这个数当做无符号数,反映到无符号数相关的标志位上,如果你要操作这个数,你就使用无符号数相关的汇编指令去操作。

但是,大部分汇编指令,不区分有符号数和无符号数。
还要记得一点,千万别一会把一个数字,当成有符号数,一会把一个数字当成无符号数。