深入學習 Go 語言的設計與實現之前要準備以下工作:
- 克隆 Go 倉庫源代碼並編譯它。
- 了解 Plan 9 彙編,知道 Go 的棧結構並能分析代碼的執行過程。
彙編者,二進制代碼的文本形式也,其最大的特點就是不可移植。Plan 9 彙編是貝爾實驗室的九號計劃的產物,目前被用於 Go 程序編譯的中間代碼,因爲 Go 的作者 Rob Pike,同時也是 Plan 9 彙編的作者。
Plan 9 彙編指令與 Intel 等彙編等的不同在於:
一般情況下,命令的源操作數在先,目的操作數在後。 如同樣是將十六進制的 10 傳送到 AX寄存器,在 Plan 9 中是
MOVQ $0x10, AX
,而在 Intel 彙編中是mov rax, 0x10
。棧的調整通過硬件 SP 寄存器進行加減運算實現。而 Intel 彙編中通過 push 和 pop 命令實現。
操作的數據長度取決於命令的後綴。而 Intel 彙編取決於寄存器。
// plan 9 彙編
MOVB $1, DI // 1 byte
MOVW $0x10, BX // 2 bytes
MOVD $1, DX // 4 bytes
MOVQ $-10, AX // 8 bytes
// intel 彙編
mov rax, 0x1 // 8 bytes
mov eax, 0x100 // 4 bytes
mov ax, 0x22 // 2 bytes
mov ah, 0x33 // 1 byte
mov al, 0x44 // 1 byte
通過分析 Plan 9 彙編代碼我們可以繪製出如下的棧結構: