Assembly 什么';这是uclibc for i386体系结构中与系统调用相关的asm代码的含义
谁知道以下asm代码的含义Assembly 什么';这是uclibc for i386体系结构中与系统调用相关的asm代码的含义,assembly,i386,uclinux,Assembly,I386,Uclinux,谁知道以下asm代码的含义 #define INLINE_SYSCALL(name, nr, args...) \ ({ \ unsigned int resultvar; \ asm volatile ( \ LOADARGS_##nr
#define INLINE_SYSCALL(name, nr, args...) \
({ \
unsigned int resultvar; \
asm volatile ( \
LOADARGS_##nr \
"movl %1, %%eax\n\t" \
"int $0x80\n\t" \
RESTOREARGS_##nr \
: "=a" (resultvar) \
: "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc"); \
if (resultvar >= 0xfffff001) \
{ \
__set_errno (-resultvar); \
resultvar = 0xffffffff; \
} \
(int) resultvar; })
#define LOADARGS_0
#define LOADARGS_1 \
"bpushl .L__X'%k2, %k2\n\t" \
"bmovl .L__X'%k2, %k2\n\t"
#define LOADARGS_2 LOADARGS_1
#define LOADARGS_3 LOADARGS_1
#define LOADARGS_4 LOADARGS_1
#define LOADARGS_5 LOADARGS_1
有人能给我解释一下吗
%2表示asm输入和输出中的第三个参数,因此%k2表示.L_ux的含义
bpushl和bmovl对于ia32似乎没有这样的指令,
%2
和%k2
都是寄存器约束,这里对此进行了详细描述:
bpushl
和bmovl
是uClibc在中定义的宏,似乎是为了在删除之前保留%ebx中的先前值
.L\uuux
是在同一个文件中定义的。对于.L\uuux“%ebx=1\n\t我无法理解其含义,将值赋予符号.L\uux或.L\uux“%ebx”或其他值meanings@superdesk.if1-\\name\n\t什么是\\我想\的意思是解析name的值,但\\使用的是转义符\,那么这有什么用呢here@superdeskYou你可能是对的。它解析为\,因此宏中有\name
。使用宏时,.L\ux“%k2
将替换\name(我想)。这将为您提供bpushl宏中的.if 1-.L\u X“%k2
。L_X本身就是一个宏。。。它看起来是1、2或3,具体取决于寄存器。所以。如果1-1
可能是最后一行。。。但我对这些都不确定。你可能想试着编译代码,看看它到底是什么样子。您可以告诉gcc输出程序集(而不是对象文件),或者您也可以通过预处理器运行代码,查看定义/宏发生了什么。我不是这里的专家,所以我可能无法帮助您解决这里的任何问题。感谢您的回复,最后我发现\\用于内联asm语法,而\用于GNU汇编程序asm中的.marco,内联asm将简单地扩展到asm,内联asm甚至不需要知道有关asm的语法,所以我们应该弄清楚内联asm和asm语法!
#define LOADARGS_1 \
"bpushl .L__X'%k2, %k2\n\t" \
"bmovl .L__X'%k2, %k2\n\t"