内联汇编 FreeBSD 中的 gettimeofday

gettimeofday in inline assembly FreeBSD

  1. 对不起我的英语。
  2. 感谢您的每一个回答。

我在 C 和内联汇编中有以下代码,应该调用函数:int gettimeofday(struct timeval *tp, struct timezone *tzp);

val = (struct timeval*)malloc(sizeof(struct timeval));
zone = (struct timezone*)malloc(sizeof(struct timezone));

__asm__("push [=10=];"
        "push %2;"
        "push %1;"
        "movl 6, %%eax;" 
        "int [=10=]x80;"
        :"=r"(val)
        :"r"(val),"r"(zone)
        :"%eax");

问题是,我不知道为什么我需要这一行 "push [=11=];" 并且我的老师说,我的论点顺序不正确,它起作用只是运气。

我应该如何更改此代码以使其正确?为什么会有 "push [=11=];" 是否正确?

所以,感谢 Daniel Kamil Kozar 我发现了删除 malloc-s 的问题。我的老师对命令有点正确,但它也在 malloc-s 中。 Malloc 只是用 "garbage" 提供内存,所以 calloc 没问题。我将区域设置为零值,我可以将 push [=10=]; 移动到其他 2.