gpt4 book ai didi

assembly - 使用相同的小正数有效加载 RAX 和 R8

转载 作者:行者123 更新时间:2023-12-05 02:27:30 25 4
gpt4 key购买 nike

我可以写 mov rax, 1(7 字节编码 48, C7, C0, 01, 00, 00, 00),而不是写 mov eax, 1 (5字节编码B8,01,00,00,00)依赖自动高位双字归零。

要将 RAX 复制到 R8,我可以在 mov r8, rax(3 字节编码 49, 89, C0)或 mov r8d, eax(3 字节编码41、89、C0)再次依赖于高位双字的自动归零。

有没有比另一种更喜欢一种复制方法的比例?
REX 前缀无法避免,因为 R8 是"new"寄存器之一,因此需要 REX.B。在这种情况下,是否应该尽量避免设置 REX.W 位?

最佳答案

如果您无论如何都需要 REX 前缀,那么其中设置的位并不重要。几乎所有 64 位指令都与其对应的 32 位指令一样快;异常(exception)包括常见的嫌疑人(乘法和除法)。

至于这两者中哪个更快:尽管依赖链更长,但第二种变体

mov eax, 1
mov r8d, eax

可能会更快,因为第二条指令可能会通过寄存器重命名来处理,不会产生延迟,也不会产生微操作。有一些不太明显的异常(exception)情况,其中寄存器重命名可能不会触发;使用微架构分析器来找到这些。在这种情况下,加载两个立即数可能会更好,因为它们可以并行执行。

关于assembly - 使用相同的小正数有效加载 RAX 和 R8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73084190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com