下面的GCC inline asm取自LuaJit的coco库。有人可以提供一行一行的解释它的功能吗?Asm代码的说明
static inline void coco_switch(coco_ctx from, coco_ctx to)
{
__asm__ __volatile__ (
"movl $1f, (%0)\n\t"
"movl %%esp, 4(%0)\n\t"
"movl %%ebp, 8(%0)\n\t"
"movl 8(%1), %%ebp\n\t"
"movl 4(%1), %%esp\n\t"
"jmp *(%1)\n" "1:\n"
: "+S" (from), "+D" (to) : : "eax", "ebx", "ecx", "edx", "memory", "cc");
}
感谢
完全正确。然而,它不仅仅是从一个功能跳到另一个功能:它从一个整个调用堆栈跳到另一个;它完全切换执行上下文。 (另外,天哪,但是GCC内联汇编语法是奇怪的。) – Crashworks 2009-09-03 06:40:30
它是用C函数调用类语法包装的AT&T语法(http://wiki.osdev.org/Opcode_syntax)(http://wiki.osdev.org/Inline_Assembly)。你不会相信它,但我更喜欢它,而不是“标准”英特尔语法。 ;-) – DevSolar 2009-09-03 06:47:16
上下文切换是否也适用于C++,还是我必须为此调用写一些不同的内容? – jameszhao00 2009-09-03 13:17:52