C 内联程序集FreeBSD中的gettimeofday 对不起我的英语 谢谢你的回答

C 内联程序集FreeBSD中的gettimeofday 对不起我的英语 谢谢你的回答,c,freebsd,inline-assembly,C,Freebsd,Inline Assembly,我在C和内联汇编中有以下代码,它们应该调用函数:int gettimeofday(struct timeval*tp,struct timezone*tzp) 问题是,我不知道为什么我需要这行“”推$0;”,我的老师说,我的论点顺序不正确,很幸运它能起作用 如何更改此代码以使其正确?为什么会有“推送$0;”如果它在某种程度上正确吗?因此,多亏了Daniel Kamil Kozar我发现了删除malloc-s的问题。我的老师在秩序上有点正确,但在马洛克s也一样。Malloc只是用“垃圾”来提供内存

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

问题是,我不知道为什么我需要这行“
”推$0;”
,我的老师说,我的论点顺序不正确,很幸运它能起作用


如何更改此代码以使其正确?为什么会有“推送$0;”如果它在某种程度上正确吗?

因此,多亏了Daniel Kamil Kozar我发现了删除malloc-s的问题。我的老师在秩序上有点正确,但在马洛克s也一样。Malloc只是用“垃圾”来提供内存,所以calloc是可以的。我将区域设置为零值,我可以移动
推送$0在其他2下。

考虑到上下文,这些
malloc
s是不必要的。这些结构也可以是局部变量。你是对的,我的错。我自己从来没有做过任何FreeBSD低级编程,但是,你的参数顺序很好(例如先推送
tzone
,然后推送
tvalue
),但是你应该在中断调用之前再推一次dword,谁的内容无关紧要。我试图移动推送作为最后一个参数,但它对tValueFreeBSD没有任何作用系统调用是否有
int$0x80
软件陷阱?这是Linux的东西,是的,但它也是FreeBSD的东西吗?
val = (struct timeval*)malloc(sizeof(struct timeval));
zone = (struct timezone*)malloc(sizeof(struct timezone));

__asm__("push $0;"
        "push %2;"
        "push %1;"
        "movl $116, %%eax;" 
        "int $0x80;"
        :"=r"(val)
        :"r"(val),"r"(zone)
        :"%eax");