編程語言的發(fā)展
機器語言
由0和1組成匯編語言(Assembly Language)
用符號代替了0和1,比機器語言便于閱讀和記憶高級語言
C\C++\Java等,更接近人類自然語言
- 操作:將寄存器BX的內(nèi)容送入寄存器AX
機器指令:1000100111011000
匯編指令:mov ax, bx

匯編語言與機器語言一一對應(yīng),每一條機器指令都有與之對應(yīng)的匯編指令匯編語言可以通過編譯得到機器語言,機器語言可以通過反匯編得到匯編語言高級語言可以通過編譯得到匯編語言`機器語言,但匯編語言\機器語言幾乎不可能還原成高級語言`
int array[] = {1, 2};
C7 45 F8 01 00 00 00 mov dword ptr [ebp-8],1
C7 45 FC 02 00 00 00 mov dword ptr [ebp-4],2
struct {
int age;
int weight;
} s = {1, 2};
C7 45 F8 01 00 00 00 mov dword ptr [ebp-8],1
C7 45 FC 02 00 00 00 mov dword ptr [ebp-4],2
匯編語言的特點
可以直接訪問、控制各種硬件設(shè)備,比如存儲器、CPU等,能最大限度地發(fā)揮硬件的功能
能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制
目標代碼簡短,占用內(nèi)存少,執(zhí)行速度快
匯編指令是機器指令的助記符,同機器指令一一對應(yīng)。每一種CPU都有自己的機器指令集\匯編指令集,所以匯編語言不具備可移植性
知識點過多,開發(fā)者需要對CPU等硬件結(jié)構(gòu)有所了解,不易于編寫、調(diào)試、維護
不區(qū)分大小寫,比如mov和MOV是一樣的
匯編語言 VS 高級語言
-
采用高級語言C++和匯編語言編寫同一個功能
將a+b的結(jié)果賦值給c,然后在屏幕上打印c的結(jié)果
匯編語言的用途(為什么要學(xué)習(xí)匯編語言?)
編寫驅(qū)動程序、操作系統(tǒng)(比如Linux內(nèi)核的某些關(guān)鍵部分)
對性能要求極高的程序或者代碼片段,可與高級語言混合使用(內(nèi)聯(lián)匯編)
軟件安全
病毒分析與防治
逆向\加殼\脫殼\破解\外掛\免殺\加密解密\漏洞\黑客是理解整個計算機系統(tǒng)的最佳起點和最有效途徑
為編寫高效代碼打下基礎(chǔ)
弄清代碼的本質(zhì)
sizeof
++a + ++a + ++a
switch和if的效率究竟誰高?為什么?
......
匯編語言的種類
目前討論比較多的匯編語言有
8086匯編(8086處理器是16bit的CPU)
Win32匯編
Win64匯編
ARM匯編(嵌入式、Mac、iOS)
......入門建議先從學(xué)些8086匯編開始
結(jié)構(gòu)簡潔、經(jīng)典
參考書籍:王爽《匯編語言》
軟件\程序的執(zhí)行過程

