下面的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