gpt4 book ai didi

汇编中的C变量使用,如何在arm aarch64中选择32位操作数

转载 作者:行者123 更新时间:2023-12-04 05:34:31 24 4
gpt4 key购买 nike

我正在尝试在汇编中使用 C 变量。目的是读取一个32位的内存并将其分配给一个C变量。

uint32_t ASMRegRd32(uint32_t addr) {

uint32_t data;

asm volatile (

"ldr %0, [%1]" "\n"

: "=r" (data)

: "r"(addr)

);

return data;

}

可悲的是在 AARCH64,上面 ldr指令返回 64 位值,因为编译器正在选择 64 位操作数 Xt。

如何限制它使用 32 位操作数?
这应该工作吗?
ldr w0, [%1];

mov %0, w0;

最佳答案

您使用约束模板修饰符“w”。

asm (
"ldr %w[DST],[%[SRC]]" "\n"
: [DST] "=r" (data) // 32 bit variable
: [SRC] "X" (addr) // source address variable (expands into a x register)
);

关于汇编中的C变量使用,如何在arm aarch64中选择32位操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163693/

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