1. 程式人生 > >【OS學習筆記】二 組合語言和彙編軟體

【OS學習筆記】二 組合語言和彙編軟體

上一篇文章講解了處理器,記憶體,和指令。學習了Intel 8086處理器的相關知識,如Intel通用暫存器的作用,程式重定位問題,以及記憶體分段結構。點選連結檢視上一篇文章:處理器 記憶體 指令

本片文章學習以下內容:

  • 瞭解組合語言的作用
  • 下載NASM編譯器,並學會使用它來編譯組合語言源程式

處理器依靠機器指令工作,但機器指令從形式上看是一堆沒有規律的數字,難以書寫、閱讀和理解,這樣就發明了組合語言。

1、組合語言簡介

在上一篇文章中,我們學習了處理器,也學習了處理器是如何進行算數邏輯運算的。為了實現處理器的自動運算,處理器必須從記憶體中取指令,並執行這些指令。

指令和被指令引用的資料在記憶體中都是一些或高或低的電平,每一個電平都可以看成是一個二進位制(0 or 1),8個二進位制位形成一個位元組。要解讀記憶體中的東西,最好的辦法就是講他們按位元組轉換成數字的形式。比如下面這些數字就是存放在INTE8086的指令,我們用的是十六進位制:

B8 3F 00 01 C3 01 C1

對於大多數人來說,上述指令,是很難知道它到底在幹嘛的。實際上它對應著下面的意思:

將立即數003F傳送到暫存器AX;
將暫存器BX的內容和暫存器AX的內容相加,結果在BX中;
將暫存器CX的內容和暫存器AX的內容相加,結果在CX中;

即使是很有經驗的技術人員,也不一定能夠將以上指令對應的意思記住。

為了克服機器指令難以書寫與記憶的缺點,組合語言就出現了。組合語言是一種助記符,用來幫助理解和記憶機器指令。上述的指令,就可以寫成如下的組合語言:

mov ax, 3FH
add bx, ax
add cx, ax

對於有點英語基礎的人來說,以上三句話相當容易理解,不再贅述。
組合語言還是很難學的,今日我們就簡單的瞭解組合語言。先注意一下節點:

  • 組合語言不區分大小寫
  • 組合語言中的立即數(立即數的概念參看上一篇文章)可以為二進位制,十進位制,十六進位制等

今天暫時知道這麼多的組合語言的基礎知識,後面的文章中會逐漸展示組合語言的各種基礎知識以及相關用法。

2、NASM編譯器

2.1 、 NASM下載和安裝

處理器只能識別機器指令,不能識別組合語言。所以NASM編譯器,就是將相關的組合語言源程式編譯成處理器可以識別的機器指令。

NASM是可免費的使用的開源軟體,下面是它的下載地址:點選下載

2.2 、 程式碼的書寫和編譯過程

開啟NASM編譯器的命令列視窗後,顯示如下:

在這裡插入圖片描述

我們可以寫完組合語言源程式後就用它來編譯,但是這樣太麻煩,本系列文章參考的書籍中,作者寫了一個小程式Nasmide,該程式可以編寫組合語言然後可快速編譯源程式。

該小程式軟體下載地址:
連結:https://pan.baidu.com/s/12zk4ziatB8x0TuJMvH-2vQ
提取碼:3t1z

開啟這個程式後顯示如下:
在這裡插入圖片描述

空白處可以編寫組合語言。

該軟體相當簡單,只說一點:配置編譯環境。

選單處有一個“選項”欄目,點開後選擇你自己的NASM編譯器的目錄位置,如下圖是我自己的:

在這裡插入圖片描述

然後以後再編譯源程式檔案的時候,直接點選“檔案”下的“編譯本文件”即可。

2.3 、 觀察編譯後的機器程式碼

最後再提供一個工具,可以顯示編譯後的機器程式碼,HexView。該工具也是本系列文章參考的書籍的作者李忠縮寫。

工具下載地址:
連結:https://pan.baidu.com/s/1VtYqRiBrWkcyi0tXP3bsTQ
提取碼:nyo4

此工具用起來相當簡單,這裡不再贅述。

3、總結

本片文章學會

  • 瞭解組合語言的作用
  • 下載NASM編譯器,並學會使用它來編譯組合語言源程式
  • 學會使用幾個補充的工具輔助我們的開發學習過程

學習探討加:
qq:1126137994
微信:liu1126137994