问题标签 [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.
assembly - x86架构是否以特殊方式处理零的二进制减法/与零比较?
在再次处理 x86 程序集时,我遇到了一种情况,我试图了解如何解释 cpu 的行为。
当用命令比较两个无符号整数时cmp
,进位和零标志的状态反映了两个整数的关系。因为在没有将减法结果写入最终寄存器的情况下cmp
表现得像命令,所以进位标志占据了借位标志的一部分。sub
此外,减法只不过是反转值的加法。因此,cpu 不是减 1,而是加 -1。
现在,当被减数小于减数时,加法cmp
将导致无进位,但由于需要借位,必须设置进位标志。所以你可以说进位标志必须在加法后反转以获得正确的状态。
前一个假设适用于无符号整数的每种组合,但有一个例外:
从任何无符号整数中减去零与向它们添加零相同,这不会产生进位。因此,反转进位会导致设置进位标志不正确,因为被减数(<0)大于减数(0),这就是为什么不允许设置进位标志,因为不需要借位。
我用一个小汇编程序检查了这种行为,当然,cpu 不会产生设置进位标志。但这只有在 cpu 还检查减数为零(并且被减数不为零,minuend = subtrahend -> 零标志设置)时才有可能。
我的假设是正确的还是我遗漏了什么?
assembly - FLAGS 寄存器多久在 asm 中更新一次?
在VS2013中调试x86汇编代码时,需要检查FLAGS寄存器的内容。但是,当我在注册窗口中启用“标志”时,我得到了:
OV = 0 上 = 0 EI = 1 PL = 1 ZR = 0 AC = 1 PE = 0 CY = 1
就我而言,我想检查 PL 符号值的状态。
那么多久更新一次?每一个动作?每个 ALU 操作?
编辑:我的 x86 教科书 kip irvine 汇编语言说
“Sign 标志是目标操作数高位的副本,表示设置为负,清除为正。(假设为零为正。)”
那么有一个目标操作数的指令?我不确定,因为这看起来很模糊。
assembly - 装配 - 负负负时携带标志
如果 CPU 像这个问题一样将减法视为加法。
那么 (-1) - (-2) 应该是 FF...FF + 00...02,并且应该设置 CARRY FLAG。
我写了 c 代码在 linux 上测试 (-1) - (-2),但发现 CARRY FLAG 没有设置。
CPU如何处理这种情况。
反汇编代码
GDB 测试
assembly - 数据溢出时标志寄存器中的 CF、OF
使用 Intel x86 / emu8086 仿真器,当具有以下值的字节溢出时:
为什么CF是0,而OF也是0?谢谢
assembly - 汇编 x86 中的 Imul 指令
你好,所以我对x86中的标志寄存器有疑问。我怎么知道 CF/OF 是 1 还是 0。
我看的是最重要的一点吗?如果是这样,OF/CF 会是 1 吗?
assembly - 8位寄存器中0-1操作的进位标志
我在 emu 80x86 IDE 中尝试了以下代码:
在模拟器中显示的输出中al=FF
,我确实理解它,但我不明白为什么在标志部分cf=1
assembly - 算术恒等式和 EFLAGS
因为 −x = not(x)+1 意味着 ab = a+not(b)+1,所以
相当于
某些寄存器在哪里 temp 被认为是易失性的?
换句话说,后者是否以完全相同的方式影响 EFLAGS?如果不是,又怎么能强迫呢?
assembly - 了解 cmp 指令中的派对标志
我想我不太了解PF
eflags 寄存器中的内容。以下是我为了解其工作原理所做的两个比较:
在第一个操作中,比较将产生1
or0x01
并且在第二个操作中它将产生2
or 0x10
。那么为什么在第一个而不是第二个中设置奇偶校验标志,因为它们都有一个位设置为 1。
assembly - 为什么 mov 不设置零标志?
向寄存器添加值不会改变零标志的原因是什么?例如,假设我有:
我还需要进行第二次操作来检查移动的值是否为零,例如:
但这样做的理由是什么?在不改变标志的情况下,电路是否更简单/指令更快?
assembly - 何时使用溢出标志?
我想我已经开始学习关于何时设置溢出标志的用例:当有符号位在有符号算术上发生变化时。例如以下三种情况:
但是,使用overflow
标志时有哪些应用程序或用例?在我所掌握的最低 asm 知识中,似乎一直使用Z
ero 和S
ign 标志进行比较,但是在哪些用例中使用了O
verflow 标志?