内联汇编说明

时间:2014-06-10 15:04:18

标签: c inline-assembly

我试图将项目从Windows移植到Linux。 我在以下repo中托管代码:Nspire Emu。 我能够修复一些编译错误,但需要重新实现许多功能,并且有些部分我无法理解。

frame变量类型定义:

typedef struct { void *prev, *function; } os_exception_frame_t;

一些内联汇编我不明白:

asm ("movl %%fs:(%1), %0" : "=r" (frame->prev) : "r" (0));

asm ("movl %0, %%fs:(%1)" : : "r" (frame), "r" (0));

如果有人能帮我理解以前的代码,我真的很感激。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这个内联asm从结构化异常处理程序堆栈中弹出一个Windows异常处理程序框架。 Linux并不使用结构化异常处理程序,因此需要为linux删除此代码,并将其替换为完全不同的代码。这取决于代码通过操纵SEH堆栈试图实现的目的。 Linux中的等价物可能涉及注册一些信号处理程序。