在學(xué)習(xí)Linux操作系統(tǒng)的過程中拳氢,順便學(xué)習(xí)了匯編語言纬霞,在操作系統(tǒng)的學(xué)習(xí)過程中凌埂,總共遇到過三種匯編,16位實模式下的匯編险领,32位保護模式下的匯編侨舆,C語言的內(nèi)嵌匯編。這三種匯編分別用在不同的場景绢陌。如實模式下的匯編是在剛開機到操作系統(tǒng)啟動這段時間運行挨下,主要用來加載操作系統(tǒng)到內(nèi)存,跳轉(zhuǎn)執(zhí)行操作系統(tǒng)程序脐湾。32位匯編是在操作系統(tǒng)接管硬件之后使用臭笆。C語言內(nèi)嵌匯編可以用在一些代碼關(guān)鍵部分,需要對硬件絕對控制的部分秤掌。
除了上面這樣的分類之外愁铺,匯編語言還有兩種不同的風(fēng)格,一種是AT&T風(fēng)格匯編闻鉴,一種是Intel風(fēng)格匯編茵乱,這只是語言書寫的一種約定,需要使用不同的匯編器進行匯編孟岛,學(xué)習(xí)哪一種都是可以的瓶竭,但如果要學(xué)習(xí)操作系統(tǒng)或者以后需要看懂別人的匯編代碼督勺,最好兩種都學(xué)習(xí),總之根據(jù)自身需求斤贰,不要增加自身負擔(dān)智哀。
下面,我將具體介紹Linux平臺下如何使用匯編語言荧恍。
不管在那一平臺下瓷叫,使用匯編語言都需要三種基本的工具,匯編器送巡,鏈接器摹菠,調(diào)試器。只要知道了這三種工具在該平臺下具體是什么骗爆,就可以很順利的在此平臺下使用匯編語言辨嗽。
在Linux下,這三種工具也有很多淮腾,這里主要介紹其中幾種。
- 匯編器
linux下可以使用gas匯編器屉佳,這也是gcc依賴的匯編器谷朝。基本命令為:as -o hello.o hello.s,需要注意的是武花,gas匯編器支持的是AT&T風(fēng)格的和匯編圆凰。除gas之外還有一種匯編器:nasm,這種匯編器可以很好的支持Intel風(fēng)格匯編体箕,匯編速度也更快专钉,命令格式:nasm -f elf hello.asm - 鏈接器
由匯編器產(chǎn)生的目標代碼是不能直接在計算機上運行的,它必須經(jīng)過鏈接器的處理才能生成可執(zhí)行代碼累铅。鏈接器通常用來將多個目標代碼連接成一個可執(zhí)行代碼跃须,這樣可以先將整個程序分成幾個模塊來單獨開發(fā),然后才將它們組合(鏈接)成一個應(yīng)用程序娃兽。 Linux 使用 ld 作為標準的鏈接程序菇民,它同樣也包含在 binutils 軟件包中。匯編程序在成功通過 GAS 或 NASM 的編譯并生成目標代碼后投储,就可以使用 ld 將其鏈接成可執(zhí)行程序了: ld -s -o hello hello.o
3.調(diào)試器
Linux下可以使用GDB第练,DDD,ALD作為調(diào)試器
實驗:在屏幕上打印出hello world
-
使用Vim編輯器新建hello.asm文件玛荞,寫入如下代碼
- 匯編娇掏,鏈接源代碼,并執(zhí)行