匯編語言(assembly language):使用符號(hào)代替機(jī)器語言,也稱為符號(hào)語言莺葫,如:mov ax缨叫,bx拖刃。
平常我們使用的語言(C/C++/OC/Swift)都屬于高級(jí)語言恨胚,高級(jí)語言進(jìn)入到計(jì)算機(jī)編譯的時(shí)候會(huì)變成匯編語言脚翘,而匯編再一次轉(zhuǎn)化才能成為真正的計(jì)算機(jī)語言(由0和1組成的機(jī)器指令)灼卢。過程如下圖所示:
匯編語言與機(jī)器語言一一對(duì)應(yīng),每一條機(jī)器指令都有與之對(duì)應(yīng)的匯編指令来农。
匯編語言可以通過編譯得到機(jī)器語言鞋真,機(jī)器語言可以通過反匯編得到匯編語言。
高級(jí)語言可以通過編譯得到匯編語言\機(jī)器語言沃于,但匯編語言\機(jī)器語言幾乎不可能還原成高級(jí)語言涩咖。
匯編語言的特點(diǎn)
可以直接訪問、控制各種硬件設(shè)備繁莹,比如存儲(chǔ)器檩互、CPU等,能最大限度地發(fā)揮硬件的功能
能夠不受編譯器的限制咨演,對(duì)生成的二進(jìn)制代碼進(jìn)行完全的控制
目標(biāo)代碼簡(jiǎn)短闸昨,占用內(nèi)存少,執(zhí)行速度快
匯編指令是機(jī)器指令的助記符,同機(jī)器指令一一對(duì)應(yīng)薄风。每一種CPU都有自己的機(jī)器指令集\匯編指令集零院,所以匯編語言不具備可移植性
知識(shí)點(diǎn)過多,開發(fā)者需要對(duì)CPU等硬件結(jié)構(gòu)有所了解村刨,不易于編寫告抄、調(diào)試、維護(hù)
不區(qū)分大小寫嵌牺,比如mov和MOV是一樣的
匯編語言的用途
編寫驅(qū)動(dòng)程序打洼、操作系統(tǒng)(比如Linux內(nèi)核的某些關(guān)鍵部分)
對(duì)性能要求極高的程序或者代碼片段龄糊,可與高級(jí)語言混合使用(內(nèi)聯(lián)匯編)
軟件安全
病毒分析與防治
逆向\加殼\脫殼\破解\外掛\免殺\加密解密\漏洞\黑客
理解整個(gè)計(jì)算機(jī)系統(tǒng)的最佳起點(diǎn)和最有效途徑
為編寫高效代碼打下基礎(chǔ)
弄清代碼的本質(zhì)
函數(shù)的本質(zhì)究竟是什么?
sizeof
++a + ++a + ++a 底層如何執(zhí)行的?
編譯器到底幫我們干了什么?
DEBUG模式和RELEASE模式有什么關(guān)鍵的地方被我們忽略
一句話概括:
越底層越單純!真正的程序員都需要了解的一門非常重要的語言,匯編!
匯編語言的種類
8086匯編(8086處理器是16bit的CPU)
Win32匯編
Win64匯編
ARM匯編(嵌入式盏道、Mac挥吵、iOS)
.......
必要的常識(shí)
要想學(xué)好匯編,首先需要了解CPU等硬件結(jié)構(gòu)
APP/程序的執(zhí)行過程如下圖:
硬件相關(guān)最為重要是CPU/內(nèi)存
在匯編中,大部分指令都是和CPU與內(nèi)存相關(guān)的