【问题标题】:ROR turns on the Overflow flagROR 打开溢出标志
【发布时间】:2015-06-29 20:36:29
【问题描述】:

我在汇编 emu8086 模拟器中有以下几行:

 mov al,00100000b  
 ror al,8

al 等于0000 0001 时,Carry 和 Overflow 两个标志被关闭, 但是当al 等于1000 0000 时,这两个标志被打开了。

进位标志是可以的 - 最后一个数字1在标志中,但是为什么这个操作也会打开溢出标志?

谢谢你的帮助!!!

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    来自Intel manual Vol 2B

    OF 标志仅针对 1 位循环定义;在所有其他情况下它是未定义的(RCL 和 RCR 指令除外 仅:零位循环不执行任何操作,即不影响任何标志)。对于左旋转,OF 标志设置为异或 CF 位(循环后)和结果的最高有效位。对于右旋转,OF 标志设置为 结果的两个最高有效位的异或。

    不完全知道为什么ROR 有这种行为,也许这个特性可以用来计算奇偶校验位。

    【讨论】:

    • 这种行为的原因是因为 OF​​ 标志旨在指示刚刚执行的操作是否导致 2 的补码负数变为正数,反之亦然。因此,例如,在左一位循环中,如果进位标志和结果中的最高位不匹配,则会出现溢出情况(这意味着该数字是正数,现在是负数,反之亦然)。这也解释了为什么它只定义为 1 位旋转。
    • 谢谢你很匹配@luker 很好很清晰的解释:-)
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多