Исходный код golang plan9 asm
Когда я читаю исходный код из golang src, я не могу понять код asm, такой как:
// void gogo(Gobuf*)
// restore state from Gobuf; longjmp
TEXT runtime·gogo(SB), NOSPLIT, $0-8
MOVQ 8(SP), BX // gobuf
MOVQ gobuf_g(BX), DX
MOVQ 0(DX), CX // make sure g != nil
get_tls(CX)
MOVQ DX, g(CX)
MOVQ gobuf_sp(BX), SP // 从 G.sched.sp 恢复 SP 寄存器
MOVQ gobuf_ret(BX), AX
MOVQ gobuf_ctxt(BX), DX
MOVQ $0, gobuf_sp(BX) // clear to help garbage collector
MOVQ $0, gobuf_ret(BX)
MOVQ $0, gobuf_ctxt(BX)
MOVQ gobuf_pc(BX), BX // 将 G.sched.pc,也就是 goroutine 函数地址压⼊入 BX。
JMP BX
Я понятия не имею, как определить имя функции, почему с (SB), NOSPLIT, $0-8 и т. Д. И что означает эта строка "MOVQ 8(SP), BX".