先看代码
mov al,0
neg al
用debug调试发现:溢出标志of=0,进位标志cf=0
如果使用"取反加1"的算法求解的话:
0000 0000 取反---> 1111 1111 加1--> 1 0000 0000 应该是产生了一个进位和溢出了,可为何of和cf为0
如果使用"0-操作数"的算法求解
0-0000 0000 肯定是要产生借位的,可为何cf为0呢.
实在不知为何了,求指教.
------解决方案--------------------------------------------------------
一切以intel手册为准。下面的内容摘自 《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z》
关于CF 寄存器
IF DEST = 0
THEN CF ← 0;
ELSE CF ← 1;
DEST ← [– (DEST)]
Flags Affected
he CF flag set to 0 if the source operand is 0, otherwise it is set to 1.
The OF, SF, ZF,AF, and PF flags are set according to the result.
------解决方案--------------------------------------------------------
翻译1楼内容如下:
如果目标操作数(neg指令仅仅一个操作数,目标操作数也就是源操作数)等于0,那么置cf为零,否则置cf为1
置 目标操作数 为 (0-目标操作数)
影响的标志寄存器:
CF 标志被设置到0,如果源操作数是0,否则被设置到1
OF, SF, ZF,AF, 和 PF 标志 被设置按照运算结果
spec是intel定义的,对于cpu指令接口的定义,intel这样做,自有它的道理,也有这个权利,楼主没有必要较真。就像你父母为你起名,不管叫什么,别人都不应质疑。