一个字节只有8位,最大数是1111 1111,+0时不会产生溢出,所以标志位OV=0,当最高位的运算产生进位或借位时OV=1,在编程时,当加法或减法时,并不确定所得的结果是什么,每次需要检查OV位的值用相应的程序去处理有借位和进位的不同情况。如单字节运算中,寄存器中已是1111 1111,加立即值1结果还放在寄存器中,则寄存器中的值加法后变为0000 0000,但OV被置位=1,此时只要检查OV值,如果为1就将另一个寄存器中的值+1,如果这个寄存顺加后OV值又成为1则再另个寄存器中加1,按照所用的字节数,不断检查,就可以进行多个字节的加法运算。简单单片机的指令最多给出4个字节的加法运算指令,但可以用这种方法扩展为20个字节的加法运算,甚至更多,条件是片内的RAM够用。
有深入探究的意愿,很好。
OV标志位是针对有符号数据类型计算的溢出标志,所以其规则是对bit6(有效数据最高位)或bit7(符号位)其中一位发生进位或借位时,OV才会置位。
以你举的例子来解释,运算时bit6和bit7同时发生进位了,所以OV并不置位。或者从另一个角度来说,前一个二进制补码代表-123,后一个二进制补码代表-1,二者相加的结果是-124——并没有超过八位有符号整型-128~+127的有效范围,所以并不溢出。