gpt4 book ai didi

c - GNU 内联汇编中的百分比 (%) 符号(C 中的 asm)

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:04 24 4
gpt4 key购买 nike

这些代码行应该做什么?

mov ebx, %1

mov ecx, %0

我知道 % 表示指针,但我需要更多解释。为什么是 %1 和 0 - 这些特定的数字?

最佳答案

在 AT&T 语法中,使用百分号和寄存器名称来引用寄存器,即 %eax。然而,您用数字显示的那些在汇编中没有意义,它们在内联汇编中用于引用输入和输出操作数。

int i = 5;
int j;
asm ("mov %1, %0" : "=r"(j) : "r"(i)); //AT&T. Swap operands for Intel syntax

这会将 ij 分别声明为输出和输入参数。 q 表示,任何通用寄存器都可以。除非你真的需要一个特定的寄存器,否则你应该总是让你的编译器选择任何方便的。由于您事先不知道获得了哪些寄存器,因此会为它们分配一个从 0 开始的数字。%0 是第一个参数,在本例中是输出参数 j%1 是输入参数,i

关于c - GNU 内联汇编中的百分比 (%) 符号(C 中的 asm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55669375/

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