1. 程式人生 > >彙編學習記錄之五

彙編學習記錄之五

資料來源:組合語言第二版-王爽

1.段的綜述

我們可以將一段記憶體定義為一個段,用一個段地址指示段,用偏移地址訪問段內的單元,這完全是我們自己的安排。

我們可以用一個段來存放資料,將它定義為“資料段”,將它的段地址放在資料段暫存器ds中,用mov,add,sub等訪問記憶體單元的指令時,CPU就會將我們定義的資料段中的內容當作資料來進行訪問。

我們可以用一個段來存放程式碼,將它定義為“程式碼段”,將它的段地址放在程式碼段暫存器cs中,將程式碼段中第一條指令的偏移地址放在指令指標暫存器ip中,CPU就會將我們定義的程式碼段中的內容當作程式碼指令來執行。

我們可以用一個段當作棧,將它定義為“棧段”,將它的段地址放在棧段暫存器ss中,將棧頂單元的偏移地址放在棧頂指標暫存器sp中,這樣CPU在執行push、pop指令時就會將我們定義的棧段當作棧空間來使用。

不管我們如何安排,CPU將記憶體中的某段內容當作程式碼,是因為cs:ip指向了那裡;CPU將標段記憶體當作棧空間,是因為ss:sp指向了那裡。

我們一定要清楚,什麼是我們的安排,以及如何讓CPU按照我們的安排行事。要非常的清楚CPU的工作原理,才能在控制CPU來按照我們的安排執行的時候做到遊刃有餘。

2.Debug的使用

(1)什麼是Debug?

Debug是Dos、Windows都提供的真實模式(8086方式)程式的除錯工具。使用它可以檢視CPU各種暫存器中的內容、記憶體的情況和在機器碼級跟蹤程式的執行。

(2)常用的Debug功能指令

r 指令檢視、改變CPU暫存器的內容

d 指令檢視記憶體中的內容(資料)

e 指令改寫記憶體中的內容(資料)

u 指令將記憶體中的機器指令翻譯成彙編指令

t 指令執行一條機器指令

a 指令以彙編指令的格式在記憶體中寫入一條機器指令

p 指令退出程式或者快速執行迴圈體

g 指令可以讓CPU執行到指定位置

3.一個彙編源程式從寫出到執行的過程

(1)編寫彙編源程式:

在文字編輯器中使用匯編語言編寫彙編源程式,生成一個儲存彙編源程式文字檔案(.asm)。

(2)對彙編源程式進行編譯連結:

使用匯編語言編譯程式對彙編源程式檔案中的源程式進行編譯,產生目標檔案;

再用連線程式對目標檔案進行連線,生成可以在作業系統中直接執行的可執行檔案。

可執行檔案中包含兩部分內容:

(2.1)程式(從源程式中的彙編指令翻譯過來的機器碼)和資料(源程式中定義的資料)

(2.2)相關的描述資訊(比如,程式有多大、要佔用多少記憶體空間等)

(3)執行可執行檔案中的程式。

在作業系統中,執行可執行檔案中的程式。作業系統依照可執行檔案中的描述資訊,將可執行檔案中的機器碼和資料載入入記憶體,並進行相關的初始化(比如設定cs:ip指向第一條要執行的指令),然後由CPU執行程式。

 

有錯誤請指正,謝謝。