編程語言的發(fā)展
機(jī)器語言
由0和1組成匯編語言(Assembly Language)
用符號代替了0和1穴肘,比機(jī)器語言便于閱讀和記憶高級語言
C\C++\Java等,更接近人類自然語言
- 操作:將寄存器BX的內(nèi)容送入寄存器AX
機(jī)器指令:1000100111011000
匯編指令:mov ax, bx
匯編語言
與機(jī)器語言
一一對應(yīng)管怠,每一條機(jī)器指令都有與之對應(yīng)的匯編指令匯編語言
可以通過編譯得到機(jī)器語言
袭祟,機(jī)器語言
可以通過反匯編得到匯編語言
高級語言
可以通過編譯得到匯編語言
`機(jī)器語言遏插,但
匯編語言\
機(jī)器語言幾乎不可能還原成
高級語言`
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
匯編語言的特點(diǎn)
可以直接訪問捂贿、控制各種硬件設(shè)備,比如存儲器胳嘲、CPU等厂僧,能最大限度地發(fā)揮硬件的功能
能夠不受編譯器的限制,對生成的二進(jìn)制代碼進(jìn)行完全的控制
目標(biāo)代碼簡短了牛,占用內(nèi)存少颜屠,執(zhí)行速度快
匯編指令是機(jī)器指令的助記符,同機(jī)器指令一一對應(yīng)。每一種CPU都有自己的機(jī)器指令集\匯編指令集鹰祸,所以匯編語言不具備可移植性
知識點(diǎn)過多甫窟,開發(fā)者需要對CPU等硬件結(jié)構(gòu)有所了解,不易于編寫蛙婴、調(diào)試粗井、維護(hù)
不區(qū)分大小寫,比如mov和MOV是一樣的
匯編語言 VS 高級語言
-
采用高級語言C++和匯編語言編寫同一個(gè)功能
將a+b的結(jié)果賦值給c街图,然后在屏幕上打印c的結(jié)果
匯編語言的用途(為什么要學(xué)習(xí)匯編語言背传?)
編寫驅(qū)動(dòng)程序、操作系統(tǒng)(比如Linux內(nèi)核的某些關(guān)鍵部分)
對性能要求極高的程序或者代碼片段台夺,可與高級語言混合使用(內(nèi)聯(lián)匯編)
軟件安全
病毒分析與防治
逆向\加殼\脫殼\破解\外掛\免殺\加密解密\漏洞\黑客是理解整個(gè)計(jì)算機(jī)系統(tǒng)的最佳起點(diǎn)和最有效途徑
為編寫高效代碼打下基礎(chǔ)
弄清代碼的本質(zhì)
sizeof
++a + ++a + ++a
switch和if的效率究竟誰高?為什么痴脾?
......
匯編語言的種類
目前討論比較多的匯編語言有
8086匯編(8086處理器是16bit的CPU)
Win32匯編
Win64匯編
ARM匯編(嵌入式颤介、Mac、iOS)
......入門建議先從學(xué)些8086匯編開始
結(jié)構(gòu)簡潔、經(jīng)典
參考書籍:王爽《匯編語言》