以下是我在Intel x86-64
的文档中看到的令人困惑的否定指令。
“ OF , SF , ZF , AF 和 PF 根据结果设置标志。“
我假设sf = dest < 0
,zf = dest == 0
,但无法弄清楚其他标志是如何设置的。
我看到“根据结果”短语设置无处不在,并感谢您帮助理解它的含义。我正在研究编译器,所以信息肯定很重要。
答案 0 :(得分:5)
所以所有的标志都是根据执行的操作设置的,这就是短语&#34;根据结果设置的#34;装置
3.4.3.1状态标志
EFLAGS寄存器的状态标志(位0,2,4,6,7和11)表示算术指令的结果,例如ADD,SUB,MUL和DIV指令。状态标志功能是:
- CF(位0)进位标志 - 设置算术运算是否从结果的最高位产生进位或借位;否则清除。该标志表示无符号整数运算的溢出条件。它也用于多精度算术。
- PF(第2位)AF(第4位)辅助进位标志 - 如果算术运算产生结果的第3位的进位或借位,则置位;否则清除。该标志用于二进制编码的十进制(BCD)算法。
- ZF(第6位)零标志 - 如果结果为零则设置;否则就清楚了。
- SF(第7位)符号标志 - 设置等于结果的最高有效位,即有符号整数的符号位。 (0表示正值,1表示负值。)
- OF(第11位)溢出标志 - 设置整数结果是否过大,正数或过小的负数(不包括符号位)以适合目标操作数;否则清除。该标志表示有符号整数(二进制补码)算术的溢出条件。
在这些状态标志中,只能使用STC,CLC和CMC指令直接修改CF标志。位指令(BT,BTS,BTR和BTC)也将指定位复制到CF标志中。
只能直接修改CF标志。其他根据操作设置。