我从未见过这种汇编语法.
#include "syscall.h"
#include "traps.h"
#define SYSCALL(name) \
.globl name; \
name: \
movl $SYS_ ## name, %eax; \
int $T_SYSCALL; \
ret
SYSCALL(fork)
SYSCALL(exit)
SYSCALL(wait)
SYSCALL(pipe)
SYSCALL(read)
SYSCALL(write)
SYSCALL(close)
SYSCALL(kill)
SYSCALL(exec)
SYSCALL(open)
SYSCALL(mknod)
SYSCALL(unlink)
SYSCALL(fstat)
SYSCALL(link)
SYSCALL(mkdir)
SYSCALL(chdir)
SYSCALL(dup)
SYSCALL(getpid)
SYSCALL(sbrk)
SYSCALL(sleep)
SYSCALL(uptime)
Run Code Online (Sandbox Code Playgroud)
对于带扩展名的汇编语言文件.S
,gcc
将使用C预处理器.
在C中,\
在行尾表示"将下一行连接到此行".出于这个原因,宏变成了
#define SYSCALL(name) .globl name; name: movl $SYS_ ## name, %eax; int $T_SYSCALL; ret
Run Code Online (Sandbox Code Playgroud)
##
operator将连接左右两侧的标记.
因此,例如,SYSCALL(fork)
将扩展到
.globl fork; fork: movl $SYS_fork, %eax; int $T_SYSCALL; ret
Run Code Online (Sandbox Code Playgroud)
这意味着
fork
公开fork
(这将作为一个功能)SYS_fork
进行注册%eax
T_SYSCALL
归档时间: |
|
查看次数: |
1258 次 |
最近记录: |