gpt4 book ai didi

c - 如何在 Intel 语法中将立即值传递给汇编中的 shr?

转载 作者:行者123 更新时间:2023-12-02 06:50:23 24 4
gpt4 key购买 nike

根据this referencethis reference , shr​​ 指令支持按 1CL 寄存器和立即数移位。但是,我似乎无法立即获得工作值(value);当我有这段代码时:

#include <stdint.h>

int main() {
uint64_t v = 15;
asm ("shr %[v], $0x04\t\n"
: [v] "+r" (v)
:
: "cc"
);
return v;
}

我收到此错误消息:

$ gcc -masm=intel foo.cfoo.c: Assembler messages:foo.c:5: Error: operand size mismatch for `shr'

我如何将立即值传递给 shr​​(不将其加载到 CL 中,这是我关心的,因为我正在针对寄存器压力瓶颈进行优化)。

最佳答案

您正在使用具有 Intel 汇编语法的指南。 GNU 汇编 (GAS) 使用 AT&T 语法,它具有相反的操作数顺序。改变他们的顺序似乎没问题:

uint64_t v = 0xffff;
asm ("shr $0x04, %[v]\n"
: [v] "+r" (v)
:
: "cc"
);
printf("%llx", v); // 0xfff

(您也可以将 shr​​ 替换为 shr​​q 以明确使用 64 位操作数)

如果您仍想像使用 -masm=intel 一样使用 Intel 语法,则必须从立即值中删除美元符号:

asm ("shr %[v], 4\n"
...)

关于c - 如何在 Intel 语法中将立即值传递给汇编中的 shr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185788/

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