英特尔组装中的"相应设置"是什么意思?

Mik*_*ike 4 x86 assembly x86-64

以下是我在Intel x86-64neg指令的文档中看到的令人困惑的内容.

" 根据结果​​设置OF,SF,ZF,AFPF标志."

我假设sf = dest < 0,zf = dest == 0但无法找出其他的标志是如何设置.

任何地方都看到这个"根据结果设置"这个词,并且非常感谢你帮助理解它的含义.我正在研究编译器,所以信息肯定很重要.

Dav*_*d G 5

因此,所有标志都是根据执行的操作设置的,这就是短语"根据结果设置"的含义.

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标志.其他根据操作设置.

来源 - 英特尔

  • 找到了.我在文档中的"描述"中忽略了它.这就是所说的,以防将来有人偶然发现这个问题."用其二进制补码替换操作数(目标操作数)的值.(此操作相当于从0减去操作数.)" (4认同)
  • 我唯一知道的是执行操作后由CPU设置的标志.对于NEG的每个部分7.3.2.4 - _NEG(否定)指令从零中减去有符号整数操作数._同一部分讨论CMP及其更新的标志.我无法告诉你的是,它是否是特定的加法器或ALU的一部分,因为它进入了一个超出我的深度的硬件级别. (2认同)
  • 确实,'POPF`和`SAHF`(不是'LAHF`!)以及其他人可以修改标志(例如,'SAHF`写入`CF`,`PF`,`AF`,`ZF `,`SF`但不是'OF`).在`*FLAGS`寄存器中还有其他标志可能会或可能不会根据许多因素进行修改,但这超出了本问题的范围.(它比仅处理`IF`更复杂 - 详见"POPF"的文档) (2认同)