1. 如下图,go在windows下的安装后的目录结构,有一个doc目录,今天就来盘他。
2.打开目录双击asm.html
3.在浏览器上展示如下:
这是关于go汇编的快速指南,篇幅不大,继续往下面看。
3.1 the Plan 9 assemblers
不懂就问,这是什么意思?指的是汇编语言,还是指指令集。后面根据百度了解到是汇编器的意思。
3.2 go为什么选择 the plan 9 汇编器?
这个指南没有介绍,我也不敢问大佬们,只能看看网友们怎么说的, 猜测一: Go team 开始的核心成员就是搞 plan9 那帮人,他们喜欢用自己熟悉的工具链也正常吧。 猜测二: 大佬们为了推广自己的成果。
3.3输入相关命令查看示例程序的汇编代码
go tool compile -S x.go
"".main STEXT size=144 args=0x0 locals=0x58 funcid=0x0
0x0000 00000 (hello.go:5) TEXT "".main(SB), ABIInternal, $88-0
0x0000 00000 (hello.go:5) MOVQ TLS, CX
0x0009 00009 (hello.go:5) PCDATA $0, $-2
0x0009 00009 (hello.go:5) MOVQ (CX)(TLS*2), CX
0x0010 00016 (hello.go:5) PCDATA $0, $-1
0x0010 00016 (hello.go:5) CMPQ SP, 16(CX)
0x0014 00020 (hello.go:5) PCDATA $0, $-2
0x0014 00020 (hello.go:5) JLS 134
0x0016 00022 (hello.go:5) PCDATA $0, $-1
0x0016 00022 (hello.go:5) SUBQ $88, SP
0x001a 00026 (hello.go:5) MOVQ BP, 80(SP)
0x001f 00031 (hello.go:5) LEAQ 80(SP), BP
0x0024 00036 (hello.go:5) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0024 00036 (hello.go:5) FUNCDATA $1, gclocals·f207267fbf96a0178e8758c6e3e0ce28(SB)
0x0024 00036 (hello.go:5) FUNCDATA $2, "".main.stkobj(SB)
0x0024 00036 (hello.go:6) XORPS X0, X0
0x0027 00039 (hello.go:6) MOVUPS X0, ""..autotmp_11+64(SP)
0x002c 00044 (hello.go:6) LEAQ type.string(SB), AX
0x0033 00051 (hello.go:6) MOVQ AX, ""..autotmp_11+64(SP)
0x0038 00056 (hello.go:6) LEAQ ""..stmp_0(SB), AX
0x003f 00063 (hello.go:6) MOVQ AX, ""..autotmp_11+72(SP)
0x0044 00068 (<unknown line number>) NOP
0x0044 00068 ($GOROOT\src\fmt\print.go:274) MOVQ os.Stdout(SB), AX
0x004b 00075 ($GOROOT\src\fmt\print.go:274) LEAQ go.itab.*os.File,io.Writer(SB), CX
0x0052 00082 ($GOROOT\src\fmt\print.go:274) MOVQ CX, (SP)
0x0056 00086 ($GOROOT\src\fmt\print.go:274) MOVQ AX, 8(SP)
0x005b 00091 ($GOROOT\src\fmt\print.go:274) LEAQ ""..autotmp_11+64(SP), AX
0x0060 00096 ($GOROOT\src\fmt\print.go:274) MOVQ AX, 16(SP)
0x0065 00101 ($GOROOT\src\fmt\print.go:274) MOVQ $1, 24(SP)
0x006e 00110 ($GOROOT\src\fmt\print.go:274) MOVQ $1, 32(SP)
0x0077 00119 ($GOROOT\src\fmt\print.go:274) PCDATA $1, $0
0x0077 00119 ($GOROOT\src\fmt\print.go:274) CALL fmt.Fprintln(SB)
0x007c 00124 (hello.go:6) MOVQ 80(SP), BP
0x0081 00129 (hello.go:6) ADDQ $88, SP
0x0085 00133 (hello.go:6) RET
0x0086 00134 (hello.go:6) NOP
0x0086 00134 (hello.go:5) PCDATA $1, $-1
0x0086 00134 (hello.go:5) PCDATA $0, $-2
0x0086 00134 (hello.go:5) CALL runtime.morestack_noctxt(SB)
0x008b 00139 (hello.go:5) PCDATA $0, $-1
` 0x008b 00139 (hello.go:5) JMP 0 ...