回复 7楼 powlin1991
其他几个都没问题和答案一样了 但是第二个好像有点问题 你看看98H 10011000 负数取反 01100111 取补 01101000 = 68H 为-104
BAH 10111010 负数取反 01000101 取补 01000101 = 46H 为-70
加起来 为-174 那么没有超过-178 怎么OF是1呢?不是应该是0吗?还是我哪里算的有问题?
当CPU执行指令,进行二进制数字的运算的时候,CPU是不管参加运算的数字是“有符号数”还是“无符号数”,CPU同时给出CF、OF以及其它标志位。 最高位出现了进位,即超过了8位,则进位标志CF=1。 而溢出标志,要看高两位的进位,相同则OF=0。 ---- 如果FC和5这两个数,是无符号数,那么就不用关心溢出的问题。 这次运算,代表了:252 + 5 = 1 + CF = 1 + 256 = 257 ---- 如果FC和5这两个数,是有符号数,那么就不用关心进位的问题。 这次运算,代表了:(-4) + (+5) = +1 OF= 0,结果正确 ================== 追问:我想不明白的是,FCh和5h的二进制值相加的结果是100000001,结果是九位的,不是超过了8位的表示范围了吗??为什么这样就不算是溢出呢? ---- 结果是九位的!这不明显就是““进位””吗,怎么会联系到““溢出””呢? 楼主可以透露一下你的想法吗? 只有数字是有符号数的时候,才讨论溢出。 如果是无符号数,8位数字的范围是0~255,运算结果是九位数257,只是有进位,CF=1; 如果是有符号数,8位数字的范围是-128~+127,现在的结果是+1,所以,OF=0。 只有当结果数字超过了-128~+127,才是溢出,而不管它是否为九位数。————