開始在Linux下使用匯編語言

在學習Linux操作系統的過程中,順便學習了匯編語言,在操作系統的學習過程中,總共遇到過三種匯編,16位實模式下的匯編,32位保護模式下的匯編,C語言的內嵌匯編。這三種匯編分別用在不同的場景。如實模式下的匯編是在剛開機到操作系統啟動這段時間運行,主要用來加載操作系統到內存,跳轉執行操作系統程序。32位匯編是在操作系統接管硬件之后使用。C語言內嵌匯編可以用在一些代碼關鍵部分,需要對硬件絕對控制的部分。

除了上面這樣的分類之外,匯編語言還有兩種不同的風格,一種是AT&T風格匯編,一種是Intel風格匯編,這只是語言書寫的一種約定,需要使用不同的匯編器進行匯編,學習哪一種都是可以的,但如果要學習操作系統或者以后需要看懂別人的匯編代碼,最好兩種都學習,總之根據自身需求,不要增加自身負擔。

下面,我將具體介紹Linux平臺下如何使用匯編語言。

不管在那一平臺下,使用匯編語言都需要三種基本的工具,匯編器,鏈接器,調試器。只要知道了這三種工具在該平臺下具體是什么,就可以很順利的在此平臺下使用匯編語言。
在Linux下,這三種工具也有很多,這里主要介紹其中幾種。

  1. 匯編器
    linux下可以使用gas匯編器,這也是gcc依賴的匯編器。基本命令為:as -o hello.o hello.s,需要注意的是,gas匯編器支持的是AT&T風格的和匯編。除gas之外還有一種匯編器:nasm,這種匯編器可以很好的支持Intel風格匯編,匯編速度也更快,命令格式:nasm -f elf hello.asm
  2. 鏈接器
    由匯編器產生的目標代碼是不能直接在計算機上運行的,它必須經過鏈接器的處理才能生成可執行代碼。鏈接器通常用來將多個目標代碼連接成一個可執行代碼,這樣可以先將整個程序分成幾個模塊來單獨開發,然后才將它們組合(鏈接)成一個應用程序。 Linux 使用 ld 作為標準的鏈接程序,它同樣也包含在 binutils 軟件包中。匯編程序在成功通過 GAS 或 NASM 的編譯并生成目標代碼后,就可以使用 ld 將其鏈接成可執行程序了: ld -s -o hello hello.o
    3.調試器
    Linux下可以使用GDB,DDD,ALD作為調試器

實驗:在屏幕上打印出hello world

  1. 使用Vim編輯器新建hello.asm文件,寫入如下代碼


    輸入源代碼
  2. 匯編,鏈接源代碼,并執行
使用nasm匯編,ld鏈接,最后執行
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 首先在編譯器編寫Hello,world! 接下來,讓我們在終端下使用命令行來進行編譯,編譯鏈接(每執行一步都用ls...
    海人為記閱讀 4,124評論 1 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 一、溫故而知新 1. 內存不夠怎么辦 內存簡單分配策略的問題地址空間不隔離內存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 7,875評論 0 27
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • 三.飛的理由 那一夜,志摩和王賡,胡適等好友去西餐廳。經過舞池,一個最為優雅而漂亮的身影,...
    薏小貓閱讀 956評論 0 1