1
__asm__ (".L__X'%ebx = 1\n\t"
 ".L__X'%ecx = 2\n\t"
 ".L__X'%edx = 2\n\t"
 ".L__X'%eax = 3\n\t"
 ".L__X'%esi = 3\n\t"
 ".L__X'%edi = 3\n\t"
 ".L__X'%ebp = 3\n\t"
 ".L__X'%esp = 3\n\t"
 ".ifndef _BITS_SYSCALLS_ASM\n\t"
 ".set _BITS_SYSCALLS_ASM,1\n\t"
 ".macro bpushl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "pushl %ebx\n\t"
 ".else\n\t"
 "xchgl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".macro bpopl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "popl %ebx\n\t"
 ".else\n\t"
 "xchgl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".macro bmovl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "movl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".endif\n\t");

#define LOADARGS_1 \
    "bpushl .L__X'%k2, %k2\n\t"                           \
    "bmovl .L__X'%k2, %k2\n\t"


#define INTERNAL_SYSCALL(name, err, nr, args...) \
  ({                                                                          \
    register 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");                  \
     (int) resultvar; })

谁知道.L_ X'%ebx = 1的意思,我在AS doc中没有找到这句话的语法,这句话是用来赋值的?.L _X'%ebx 不是一个有效的符号名称,我猜这是否意味着一个特殊的变量导致当展开“bpushl .L_ X'%k2, %k2\n\t”时,我们需要展开.L _X'% k2,那么扩展的结果是什么,有人可以帮助我吗名字,谢谢!

4

0 回答 0