다음 GCC 인라인 asm은 LuaJit의 코코 라이브러리에서 가져온 것입니다. 누군가가하는 일에 대해 한 줄씩 설명 할 수 있습니까?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");
}
감사
을 위해 무엇에 대해 좀 더 배울 수있는 추가합니다. 그것은 하나의 기능에서 다른 기능으로 점프하는 것이 아닙니다. 하나의 전체 호출 스택에서 다른 호출 스택으로 점프하고 있습니다. 그것은 실행 컨텍스트를 완전히 바꾸고 있습니다. (또한 gosh이지만 GCC 인라인 어셈블리 구문은 이상합니다.) – Crashworks
C 함수 호출 문법으로 싸인 AT & T 구문 (http://wiki.osdev.org/Opcode_syntax)입니다 (http://wiki.osdev.org/Inline_Assembly). 당신은 그것을 믿지 않을 것이지만 실제로 "표준"인텔 구문보다 선호합니다. ;-) – DevSolar
컨텍스트 스위치는 C++에서도 작동합니까? 아니면 thiscall에 대해 다른 것을 작성해야합니까? – jameszhao00