首先 明白一下几点:

溢出标志OF和进位标志CF是两个意义不同的标志.

 

对于无符号数来说,不存在溢出的问题,它的进位就相当于有符号数中的溢出
而对有符号数来说,不存在进位的问题
溢出是指结果超出数据所表示的范围,溢出标志位OF为1,说明有符号数的运算结果不正确

 

问谁知道是有符号的还是无符号的运算额?
答:
处理器对两个操作数进行运算时
按照无符号数求得结果,并相应设置进位标志CF;
同时,根据是否超出有符号数的范围设置溢出标志OF。
即 CF 和 OF 是根据无符号 有符号表示的范围 设置的。
 
应该利用哪个标志,则由程序员来决定。
也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;
认为是有符号数,则要注意是否溢出。

进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;
溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

 

8个二进制位能够表达的无符号数范围是:0 ~ 255 
16位表达的无符号数范围是:0 ~ 65535 

处理器内部以补码表示有符号数,
8个二进制位能够表达的有符号数范围是:+127 ~ -128
16位表达的有符号数范围是:+32767 ~ -32768


举个常见的例子

3AH + 7CH=B6H
无符号数运算:58+124=182,范围内,无进位
有符号数运算: 58+124=182 ,范围外,有溢出


AAH + 7CH=(1)26H
无符号数运算:170+124=294,范围外,有进位
有符号数运算:-86+124=28 ,范围内,无溢出


判断运算结果是否溢出有一个简单的规则:

1 两个正数相加(或一个正数减一个负数)得到负数,就是溢出了.
2 两个负数相加得到正数,就是溢出了.
3 一个正数和一个负数相加不可能溢出