【发布时间】:2015-04-04 20:42:55
【问题描述】:
我正在尝试了解以下代码在 c 中的编译结果:
int ppid;
#define SYS_getppid 23
asm volatile("int %1" : "=a" (ppid) : "i" (T_SYSCALL), "a" (SYS_getppid));
其中 T_SYSCALL 是常数 64。
这就是我目前想出的:
? // I know something is missing here but I'm not sure what it is
mov $(SYS_getppid), %eax // "a" (SYS_getppid)
int $(T_SYSCALL) // T_SYSCALL = 64 in xv6
? // I know something is missing here but I'm not sure what it is
我不确定如何处理 ppid 变量。当它被声明时我应该把它保存在哪里,我应该如何在内联汇编代码的结果中为这个变量赋值(我想我应该在某处使用间接寻址)。
请注意,我尝试使用 GCC 编译器从 c 文件创建程序集文件,但结果太复杂,我不确定我是否理解正确(我试图想出最简单的编译结果)。
我还在 GNU 网站 (https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html#Using-Assembly-Language-with-C) 上阅读了有关内联汇编的信息,因此我确实了解内联汇编语法。
能否请您提示我如何完成我上面写的结果编译?
谢谢!
【问题讨论】:
标签: c gcc assembly x86 inline-assembly