首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-10 
关于neg求补指令的困惑先看代码mov al,0neg al用debug调试发现:溢出标志of0,进位标志cf0如果使用取反加

关于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这样做,自有它的道理,也有这个权利,楼主没有必要较真。就像你父母为你起名,不管叫什么,别人都不应质疑。

热点排行