问题标签 [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.
go - Go,x64 汇编和 CMOVLMI:这个操作码在哪里描述?
我正在阅读 Go 源代码,就像一个人一样,当我阅读fastrand()
函数时,我的机器将在asm_amd64.s
文件中,我遇到了这个片段:
对于我的一生,我无法弄清楚CMOVLMI
应该做什么。对它的搜索表明,似乎只有 Go 对它一无所知。CMOVxx
我可以在 AMD X86_64 参考中找到大量定义的操作码,并且维基百科页面有条件移动指令的悠久历史,但这并没有出现在该列表的任何地方。
CMOVLMI 在哪里定义?Go 的内部汇编器是独一无二的吗?
assembly - x86 中的进位和溢出标志是如何计算乘法的
当两个相乘的数字溢出寄存器时,如何使用这两个标志来正确计算答案?
例如,如果al
保持0xff
并乘以0x2
,导致溢出到ax
,标志如何帮助解决这个问题?
assembly - x86 程序集 - CMP 未正确设置零标志
我在调试时遇到了这个比较:
我在上面设置了一个断点并看到了这个(十六进制的值):
所以我希望在执行这个比较之后设置零标志,因为 ECX 和 BL 指向的字节是相等的。然而,发生的事情是设置了溢出标志并且 ZF 保持为 0。比较之后:
为什么它会这样?它与有符号/无符号整数有关吗?我认为 CMP 是不可知的,即将比较结果解释为有符号/无符号是下面的分支指令会做的事情(例如 JG 与 JA)。比较之后是一个 JNE,因为 ZF=0 并导致不正确的结果。
assembly - EFLAGS 是通用寄存器吗?
有些教程说EFLAGS
寄存器是通用寄存器,而其他教程说它不是通用寄存器。
那么是哪一个呢?!
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
设置了方向标志并且我需要清除它的事实。
到目前为止,我还没有找到任何提及这一点的信息,并想知道在打电话之前总是清除它是否是谨慎的。
或者这可能会导致其他问题。有人知道在这种情况下调用的约定吗?
assembly - “AND AL,0xFF”的目的是什么?
我正在阅读一个反汇编的 win32 c++ 程序,我看到了很多:
这是完全没有意义的还是编译器为什么会生成这些?
这是一个更长的例子:
在这些操作之后没有检查标志,所以这不是目的。在 之后,、 和中AND
的值被移动到。AL
CL
DL
[ESI + n]
assembly - x86 寄存器标志缩写
我目前正在学习汇编语言。
在 Microsoft Visual Studio 2017 中,我想检查注册标志的当前状态。
我想知道每个 register flag 缩写代表什么,所以我查看了 x86 register flags 上的 wiki 页面。
但如您所见,Visual Studio 中显示的注册标志缩写与 wiki 页面中的缩写不匹配。
对于视觉工作室中的注册标志,我怎样才能找出它们代表什么?
gdb - gdb eflags 在 x86_64 上注册
在 amd64 平台上的 gdb 中注册的 eflags 是否与具有更广泛注册的 rflags 具有相同的含义?Gdb 只向我显示我的机器上使用 amd64 的 eflags 寄存器。
assembly - 有没有更好的方法来保存函数或子程序中的 DF
我喜欢涉足优化,主要是在空间背景下考虑算法流程。在尝试了几个不同的场景之后,这个似乎是我能想到的最好的一个。同样假设,这是必须的,因为当调用此过程时,有时会设置 DF 而其他时候则不会。
OJBECTIVE : 将 DF 原样返回给调用者。
不包括STD
哪个实际上是主体的一部分,这个解决目标的序言/尾声有 18 个字节。
有没有人实施过比这更严格的方法?
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)但我也发现了另一个跳转条件的错误