当前位置: 代码迷 >> 汇编语言 >> 关于neg求补指令的困惑,该如何处理
  详细解决方案

关于neg求补指令的困惑,该如何处理

热度:5947   发布时间:2013-02-26 00:00:00.0
关于neg求补指令的困惑
先看代码
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这样做,自有它的道理,也有这个权利,楼主没有必要较真。就像你父母为你起名,不管叫什么,别人都不应质疑。
  相关解决方案