golang源代码plan9 asm

时间:2014-11-04 07:23:43

标签: assembly go plan-9

当我从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”的含义是什么。

0 个答案:

没有答案