【问题标题】:Assembly x86 flags- overflow flag程序集 x86 标志 - 溢出标志
【发布时间】:2017-11-27 14:24:04
【问题描述】:

我刚开始学习汇编,并试图了解不同标志的工作原理。 假设我这样做:

mov ax, 0xBFE8h
mov bx, 25DFh
add ax, bx

溢出标志不应该打开吗?加法的值为 58,823(以 10 为底),大于 32,767(带符号的 16 位值)。 我检查了程序,但标志没有打开。这是为什么呢?

感谢您的帮助。

【问题讨论】:

  • teaching.idallen.com/dat2343/10f/notes/040_overflow.txt。您正在寻找携带标志(未签名),未签名的溢出。
  • 在有符号数学(值的解释)中,您所做的 -16408 + 9695 = 负 + 正值原则上不会溢出,因为结果肯定会等于/在原始两个值之间。 OF 与有符号数学相关。

标签: assembly flags


【解决方案1】:

发生有符号溢出时溢出标志打开。但是,您的代码中并非如此。 0xbfe8 大于 0x8000,因此在二进制补码中为负数,表示 -16408。 0x25DF 等于 9695,它们的和为 -6713,不在 -32768 到 +32767 范围之外,因此没有发生有符号溢出,溢出标志被清除。

【讨论】:

  • 这个问题肯定是重复的。我一直在寻找,但还没有找到一个相同的答案。
  • @PeterCordes 也许这个将来会成为规范的副本。
  • 终于!我一直在努力理解这一点,谢谢!
  • 这个不错:8位加减输入/输出/CF/OF参考表:stackoverflow.com/questions/8965923/…
  • CF 在这里应该很清楚:这还不够完整。 (无论如何都赞成,因为这很容易解决)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2013-10-18
  • 2016-02-05
相关资源
最近更新 更多