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、拡張の結果はどうなるか、誰かが私を助けてくれますか、それは私を夢中にさせます、そして私はドキュメントでこれらすべての手がかりを見つけることができません.誰かが私が関連情報を見つけることができる場所を知っているなら、URLまたはドキュメントを教えてください.名前、thx!

4

0 に答える 0