问题标签 [eflags]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
126934 浏览

assembly - 汇编中的进位标志、辅助标志和溢出标志

我似乎无法区分装配中的进位标志、辅助标志和溢出标志。我目前正在学校学习,老师没有详细说明。请帮助我理解,我将需要它进行考试。我会很感激的!!从我现在似乎知道的是,当您尝试时使用进位标志,例如,当您只有 8 位数据时使用 255+9,辅助标志是相同的,但仅用于最后 4 位?当二进制数有 7 位并且符号使用 8(最左边)时使用溢出???

0 投票
1 回答
889 浏览

multithreading - x86 保留 EFLAGS 位 1 == 0:这怎么会发生?

我正在使用 Win32 API 来停止/启动/检查/更改线程状态。一般来说效果很好。有时它会失败,我试图找出原因。

我有一个线程通过以下方式强制在其他线程上进行上下文切换:

这非常有效......但是......很少,上下文切换似乎失败。(症状:我的多线程系统以奇怪的寄存器内容执行奇怪的地方)。

上下文控制通过以下方式完成:

没有任何打印语句被执行。我得出的结论是,Windows 认为上下文操作都可靠地发生了。

哦,是的,我知道什么时候被停止的线程没有在计算[例如,在系统函数中],并且不会尝试停止/上下文切换它。我知道这一点是因为每个执行除计算之外的任何操作的线程都会设置一个特定于线程的“不要碰我”标志,而它正在执行除计算之外的任何操作。(设备驱动程序程序员会认为这是“中断禁用”指令的等价物)。

所以,我想知道上下文块内容的可靠性。我对从上下文块中提取的各种寄存器值添加了各种健全性测试;您实际上可以确定 ESP 是否正常(在 TIB 中定义的堆栈区域范围内),PC 在我期望的程序中或在系统调用中,等等。这并不奇怪。

我决定检查条件代码位(EFLAGS)是否被正确读出;如果这是错误的,它将导致切换任务在其状态恢复时采用“错误分支”。因此,我添加了以下代码来验证声称的 EFLAGS 寄存器是否包含根据英特尔参考手册 ( http://en.wikipedia.org/wiki/FLAGS_register ) 仅看起来像 EFLAGS 的内容。

在我的 Win 7 AMD Phenom II X6 1090T(十六进制核心)上,它偶尔会出现断点,ECX = 0200h。在我的 Win 7 Intel i7 系统上以同样的方式失败。我会忽略这一点,除非它暗示 EFLAGS 没有被正确存储,正如我所怀疑的那样。

根据我对 Intel(以及 AMD)参考手册的阅读,第 1 位是保留的,并且始终具有值“1”。不是我在这里看到的。

显然,MS 通过在线程停止时执行复杂的操作来填充上下文块。我希望他们准确地存储状态。该位未正确存储。如果他们没有正确存储这个位,他们还没有存储什么?

为什么这个位的值有时可能/应该为零的任何解释?

编辑:我的代码在捕获断点时转储寄存器和堆栈。堆栈区包含上下文块作为局部变量。EAX 和堆栈中上下文块中 EFLAGS 的正确偏移处的值都包含值 0244h。所以上下文块中的值确实是错误的。

EDIT2:我将掩码和比较值更改为

这似乎运行可靠,没有任何抱怨。显然,Win7 没有正确执行 eflags 的第 1 位,这似乎无关紧要。

仍然对解释感兴趣,但显然这不是我偶尔的上下文切换崩溃的根源。

0 投票
1 回答
75 浏览

assembly - imul 指令的 ZF 行为是什么?

指令集参考说,对于 imul 指令,ZF 是未定义的。那么如果我将寄存器中的一个值乘以一个立即数 0x0,ZF 会发生什么?

0 投票
4 回答
12565 浏览

assembly - CPU上奇偶校验标志的用途是什么?

某些 CPU(尤其是 x86 CPU)在其状态寄存器上具有奇偶校验标志。该标志指示运算结果的位数是奇数还是偶数。

奇偶校验标志在编程上下文中的实际实际用途是什么?

旁注: 我假设它打算与奇偶校验位一起使用以执行基本的错误检查,但这样的任务似乎不常见以保证整个 CPU 标志。

0 投票
1 回答
359 浏览

assembly - ZF not set as a result of mul command in assembly language

I am using masm615 assembler and textpad as an editor. I am writing 32 bit assembly program. In the program I am trying to set zero flag as a result of mul instruction but it is not working. Can anyone tell me why the zero flag is clear while the result in eax register is zero. I am trying the following code

0 投票
2 回答
2455 浏览

assembly - 汇编语言中的 NEG 指令是否设置了溢出标志

我想知道 NEG 指令是否也会影响溢出标志。我知道它否定了变量的值,但无法确定它是否会影响溢出标志。

0 投票
1 回答
466 浏览

x86 - 在程序集中仅设置零标志,不影响其他标志

我需要在程序集中设置零标志,但它不应该更改任何其他标志。所以我想做 pushf,把它弹出到 eax 但我不知道如何给标志 reg 它的新值。我能想到的:

从这里我不知道该怎么做。

0 投票
2 回答
494 浏览

assembly - 比较 xmmX 向量

所以假设你加载了一个带有 4 个单精度浮点 {1.5、1.5、1.5、1.5} 的 xmm1 向量和带有相同点的 xmm2,所以 xmm1 == xmm2。现在你想比较它们,所以你在汇编中编写:

由于cmpeqps没有设置 eflags,怎么能说:

真的需要使用ucomiss比较向量的最右边部分,然后向右移动并重复 3 次以上吗?

谢谢

0 投票
1 回答
6328 浏览

assembly - 通过加法和减法设置和清除进位标志

我在清除进位标志时遇到困难,但我想出了一种使用减法清除它的方法,但我想知道是否有更好的方法可以与我分享如何使用加法和减法设置和清除进位标志。

这就是我必须设置和清除进位标志的内容。当我第一次从 AL 中减去 binNum2 时,我得到了 FFh 的原始值,但进位标志仍然设置,直到我再次从 AL 中减去 binNum2。然后它将 AL 设置为 FEh 并清除进位标志。

有没有人有更好的方法来清除进位标志?

0 投票
2 回答
3840 浏览

assembly - ASM8086:mul、imul、进位标志和溢出标志

我理解了进位标志和溢出标志的逻辑。但是,当我读到这个程序(写在 MASM 8086 中)时,我有点困惑。

程序的目的是判断一个二次方程是否有两个不同的解、两个相等的解或根本没有解。

现在,我的疑问是:为什么前三个检查已经测试了进位标志,而最后一个检查了溢出标志?

由于在最后一个中,我们在两个有符号数字之间进行减法(正如我们所认为的那样),我们必须检查溢出标志以查看是否存在溢出(即数字是否超出区间[-2^15,2^15-1])。但是对于第一个,例如,我们(bb)^2使用imul.

所以我们认为它们是 16 位有符号数(so -2^15 <= bb <= 2^15-1),并且如果至少一个和(在乘法算法中)打开 / 位,则乘法将/CF位打开。OFCFOF

但是既然我们处理有符号数,我们不应该检查溢出标志吗?

我还注意到,因为,2^15-1=32767如果我设置bb190( 190^2=36100) CF=0如果bb等于200( 200^2=40000) CF=1

这是为什么?有人可以详细解释一下吗?

PS:我用的是EMU8086。