Go 語言 補(bǔ)充說明

2023-03-22 15:02 更新

原文鏈接:https://chai2010.cn/advanced-go-programming-book/ch3-asm/ch3-10-ext.html


3.10 補(bǔ)充說明

如果是純粹學(xué)習(xí)匯編語言,則可以從《深入理解程序設(shè)計(jì):使用 Linux 匯編語言》開始,該書講述了如何以 C 語言的思維實(shí)現(xiàn)匯編程序。如果是學(xué)習(xí) X86 匯編,則可以從《匯編語言:基于 x86 處理器》開始,然后再結(jié)合《現(xiàn)代 x86 匯編語言程序設(shè)計(jì)》學(xué)習(xí) AVX 等高級匯編指令的使用。

Go 匯編語言的官方文檔非常匱乏。其中 “A Quick Guide to Go's Assembler” 是唯一的一篇系統(tǒng)講述 Go 匯編語言的官方文章,該文章中又引入了另外兩篇 Plan9 的文檔:A Manual for the Plan 9 assembler 和 Plan 9 C Compilers。Plan9 的兩篇文檔分別講述了匯編語言以及和匯編有關(guān)聯(lián)的 C 語言編譯器的細(xì)節(jié)??催^這幾篇文檔之后會對 Go 匯編語言有了一些模糊的概念,剩下的就是在實(shí)戰(zhàn)中通過代碼學(xué)習(xí)了。

Go 語言的編譯器和匯編器都帶了一個 -S 參數(shù),可以查看生成的最終目標(biāo)代碼。通過對比目標(biāo)代碼和原始的 Go 語言或 Go 匯編語言代碼的差異可以加深對底層實(shí)現(xiàn)的理解。同時(shí) Go 語言連接器的實(shí)現(xiàn)代碼也包含了很多相關(guān)的信息。Go 匯編語言是依托 Go 語言的語言,因此理解 Go 語言的工作原理是也是必要的。比較重要的部分是 Go 語言 runtime 和 reflect 包的實(shí)現(xiàn)原理。如果讀者了解 CGO 技術(shù),那么對 Go 匯編語言的學(xué)習(xí)也是一個巨大的幫助。最后是要了解 syscall 包是如何實(shí)現(xiàn)系統(tǒng)調(diào)用的。

得益于 Go 語言的設(shè)計(jì),Go 匯編語言的優(yōu)勢也非常明顯:跨操作系統(tǒng)、不同 CPU 之間的用法也非常相似、支持 C 語言預(yù)處理器、支持模塊。同時(shí) Go 匯編語言也存在很多不足:它不是一個獨(dú)立的語言,底層需要依賴 Go 語言甚至操作系統(tǒng);很多高級特性很難通過手工匯編完成。雖然 Go 語言官方盡量保持 Go 匯編語言簡單,但是匯編語言是一個比較大的話題,大到足以寫一本 Go 匯編語言的教程。本章的目的是讓大家對 Go 匯編語言簡單入門,在看到底層匯編代碼的時(shí)候不會一頭霧水,在某些遇到性能受限制的場合能夠通過 Go 匯編突破限制。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號