Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么';这是uclibc for i386体系结构中与系统调用相关的asm代码的含义_Assembly_I386_Uclinux - Fatal编程技术网

Assembly 什么';这是uclibc for i386体系结构中与系统调用相关的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

谁知道以下asm代码的含义

#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"