匯編語言(assembly language):使用符號代替機器語言,也稱為符號語言,如:mov ax,bx。
平常我們使用的語言(C/C++/OC/Swift)都屬于高級語言,高級語言進入到計算機編譯的時候會變成匯編語言,而匯編再一次轉化才能成為真正的計算機語言(由0和1組成的機器指令)。過程如下圖所示:
匯編語言與機器語言一一對應,每一條機器指令都有與之對應的匯編指令。
匯編語言可以通過編譯得到機器語言,機器語言可以通過反匯編得到匯編語言。
高級語言可以通過編譯得到匯編語言\機器語言,但匯編語言\機器語言幾乎不可能還原成高級語言。
匯編語言的特點
可以直接訪問、控制各種硬件設備,比如存儲器、CPU等,能最大限度地發揮硬件的功能
能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制
目標代碼簡短,占用內存少,執行速度快
匯編指令是機器指令的助記符,同機器指令一一對應。每一種CPU都有自己的機器指令集\匯編指令集,所以匯編語言不具備可移植性
知識點過多,開發者需要對CPU等硬件結構有所了解,不易于編寫、調試、維護
不區分大小寫,比如mov和MOV是一樣的
匯編語言的用途
編寫驅動程序、操作系統(比如Linux內核的某些關鍵部分)
對性能要求極高的程序或者代碼片段,可與高級語言混合使用(內聯匯編)
軟件安全
病毒分析與防治
逆向\加殼\脫殼\破解\外掛\免殺\加密解密\漏洞\黑客
理解整個計算機系統的最佳起點和最有效途徑
為編寫高效代碼打下基礎
弄清代碼的本質
函數的本質究竟是什么?
sizeof
++a + ++a + ++a 底層如何執行的?
編譯器到底幫我們干了什么?
DEBUG模式和RELEASE模式有什么關鍵的地方被我們忽略
一句話概括:
越底層越單純!真正的程序員都需要了解的一門非常重要的語言,匯編!
匯編語言的種類
8086匯編(8086處理器是16bit的CPU)
Win32匯編
Win64匯編
ARM匯編(嵌入式、Mac、iOS)
.......
必要的常識
要想學好匯編,首先需要了解CPU等硬件結構
APP/程序的執行過程如下圖:
硬件相關最為重要是CPU/內存
在匯編中,大部分指令都是和CPU與內存相關的