次のGCCインライン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
Cの関数呼び出しのような構文でラップされたAT&Tの構文(http://wiki.osdev.org/Opcode_syntax)です(http://wiki.osdev.org/Inline_Assembly)。あなたはそれを信じませんが、私は実際には "標準的な"インテルの構文よりも好きです。 ;-) – DevSolar
コンテキストスイッチはC++でも動作しますか?またはこのコールのために別のものを書く必要がありますか? – jameszhao00