问题标签 [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 投票
1 回答
144 浏览

go - Go,x64 汇编和 CMOVLMI:这个操作码在哪里描述?

我正在阅读 Go 源代码,就像一个人一样,当我阅读fastrand()函数时,我的机器将在asm_amd64.s文件中,我遇到了这个片段:

对于我的一生,我无法弄清楚CMOVLMI应该做什么。对它的搜索表明,似乎只有 Go 对它一无所知。CMOVxx我可以在 AMD X86_64 参考中找到大量定义的操作码,并且维基百科页面有条件移动指令的悠久历史,但这并没有出现在该列表的任何地方。

CMOVLMI 在哪里定义?Go 的内部汇编器是独一无二的吗?

0 投票
2 回答
3355 浏览

assembly - x86 中的进位和溢出标志是如何计算乘法的

当两个相乘的数字溢出寄存器时,如何使用这两个标志来正确计算答案?

例如,如果al保持0xff并乘以0x2,导致溢出到ax,标志如何帮助解决这个问题?

0 投票
1 回答
1020 浏览

assembly - x86 程序集 - CMP 未正确设置零标志

我在调试时遇到了这个比较:

我在上面设置了一个断点并看到了这个(十六进制的值):

所以我希望在执行这个比较之后设置零标志,因为 ECX 和 BL 指向的字节是相等的。然而,发生的事情是设置了溢出标志并且 ZF 保持为 0。比较之后:

为什么它会这样?它与有符号/无符号整数有关吗?我认为 CMP 是不可知的,即将比较结果解释为有符号/无符号是下面的分支指令会做的事情(例如 JG 与 JA)。比较之后是一个 JNE,因为 ZF=0 并导致不正确的结果。

0 投票
2 回答
974 浏览

assembly - EFLAGS 是通用寄存器吗?

有些教程说EFLAGS寄存器是通用寄存器,而其他教程说它不是通用寄存器。

那么是哪一个呢?!

0 投票
1 回答
1248 浏览

windows - windows 64位调用约定

根据我在调用 Windows 函数时可以找到的文档,以下适用:-

在 Windows 上遵循 Microsoft x64 调用约定[12][13] 并预启动 UEFI(对于 x86-64 上的长模式)。它对前四个整数或指针参数(按此顺序)使用寄存器 RCX、RDX、R8、R9,并将其他参数压入堆栈(从右到左)。如果 64 位或更少,则在 RAX 中返回整数返回值(类似于 x86)。

在 Microsoft x64 调用约定中,调用者有责任在调用函数之前在堆栈上分配 32 字节的“影子空间”(无论使用的实际参数数量如何),并在调用之后弹出堆栈。阴影空间用于溢出 RCX、RDX、R8 和 R9,[14] 但必须使所有函数都可用,即使是那些参数少于四个的函数。

寄存器 RAX、RCX、RDX、R8、R9、R10、R11 被认为是易失性的(调用者保存)。 [15]

寄存器 RBX、RBP、RDI、RSI、RSP、R12、R13、R14 和 R15 被认为是非易失性的(被调用者保存)。 [15]

所以,我一直很高兴地调用 kernel32,直到GetEnvironmentVariableA在某些情况下调用失败。我终于将其追溯到DF设置了方向标志并且我需要清除它的事实。

到目前为止,我还没有找到任何提及这一点的信息,并想知道在打电话之前总是清除它是否是谨慎的。

或者这可能会导致其他问题。有人知道在这种情况下调用的约定吗?

0 投票
1 回答
1337 浏览

assembly - “AND AL,0xFF”的目的是什么?

我正在阅读一个反汇编的 win32 c++ 程序,我看到了很多:

这是完全没有意义的还是编译器为什么会生成这些?

这是一个更长的例子:

在这些操作之后没有检查标志,所以这不是目的。在 之后,、 和中AND的值被移动到。ALCLDL[ESI + n]

0 投票
2 回答
1810 浏览

assembly - x86 寄存器标志缩写

我目前正在学习汇编语言。

在 Microsoft Visual Studio 2017 中,我想检查注册标志的当前状态。

在此处输入图像描述

我想知道每个 register flag 缩写代表什么,所以我查看了 x86 register flags 上的 wiki 页面

在此处输入图像描述

但如您所见,Visual Studio 中显示的注册标志缩写与 wiki 页面中的缩写不匹配。

对于视觉工作室中的注册标志,我怎样才能找出它们代表什么?

0 投票
1 回答
141 浏览

gdb - gdb eflags 在 x86_64 上注册

在 amd64 平台上的 gdb 中注册的 eflags 是否与具有更广泛注册的 rflags 具有相同的含义?Gdb 只向我显示我的机器上使用 amd64 的 eflags 寄存器。

0 投票
1 回答
75 浏览

assembly - 有没有更好的方法来保存函数或子程序中的 DF

我喜欢涉足优化,主要是在空间背景下考虑算法流程。在尝试了几个不同的场景之后,这个似乎是我能想到的最好的一个。同样假设,这是必须的,因为当调用此过程时,有时会设置 DF 而其他时候则不会。

OJBECTIVE : 将 DF 原样返回给调用者。

不包括STD哪个实际上是主体的一部分,这个解决目标的序言/尾声有 18 个字节。


有没有人实施过比这更严格的方法?

0 投票
0 回答
141 浏览

assembly - 英特尔的 x86 手册说当(CF 或 ZF)= 0 时采用 JA/JNBE。这是一个错误吗?

我下载了Intel 64 和 IA-32 架构软件开发人员手册组合卷:1、2A、2B、2C、2D、3A、3B、3C、3D 和 4。

Table 7-4. Conditional Jump Instructions它说指令JA/JNBE跳转时(CF or ZF) = 0

根据本手册,以及英特尔第2 卷手册(2018 年 5 月)中的 JCC 条目,它们会在 时跳转(CF = 0 and ZF = 0),这在我测试时是正确的。

英特尔的开发人员手册是否可能在这样的主要命令中出错?

PS:我不太确定指令(我认为是JL/JNGE)但我也发现了另一个跳转条件的错误