彙編語言(王爽)--第四章 第一個程序

4.1 一個程序從寫出到執行的過程

1.編寫彙編源程序

2.對源程序進行編譯連接

使用匯編語言的編譯程序對源程序文件中的源程序進行編譯產生目標文件,再用連接程序對目標文件進行連接,生成可在操作系統中直接運行的可執行文件。
可執行文件包含兩部分
程序和數據 相關描述信息

3.執行可執行文件中的程序

4.2 源程序

1.僞指令
沒有對應的機器碼,不被CPU執行,由編譯器執行。
(1)表示一個段
 XXX segment
  :
 XXX ends
一個彙編程序是由多個段組成的,這些段被用來存放代碼、數據或當作棧空間使用。
(2)end
彙編程序的結束標記,編譯器在編譯的過程中,如果碰到了僞指令end,就結束對源程序的編譯。
(3)assume
assume可以將有特定功能的段和相關的段寄存器關聯起來。
2.源程序中的“程序”
源程序:將源程序文件中所有內容稱爲源程序。
程序:將源程序中由計算機執行、處理的數據稱爲程序。
3.標號
這個段的名稱將被編譯、連接程序處理爲一個
4.程序的結構
5.程序的返回
存在可執行文件中的機器碼應該怎樣得到運行呢?
一個程序P2在可執行文件中,必須有一個正在運行的P1,將P2從可執行文件中加載到內存,將CPU的控制權交給P2,P2開始運行,P1暫停運行,直到P2運行完,將CPU的控制權還給P1,P1繼續運行。
一個程序結束後,將CPU的控制權返還給使它運行的程序,這個過程角程序返回。
  mov ax,4c00H
  int 21H
這兩條指令實現的功能就是程序返回。
6.語法錯誤與邏輯錯誤

4.3 編輯源程序

4.4 編譯

編譯過程會生成目標文件(.obj)、列表文件(.lst)、交叉引用文件(.crf)

4.5 連接

連接過程會生成可執行文件、映像文件。輸入庫文件的名稱。
連接的作用:
1.當源程序很大時,需要將源程序分爲幾個源程序,分別編譯,生成目標文件,最終連接到一起。
2.當源程序調用了某個庫文件中的子程序,需要將目標文件和庫文件連接到一起。
3.目標文件中有些內容不能直接生成可執行文件,連接文件將這些內容處理爲最終的可執行信息。所以有一個源程序文件且沒有調用庫文件的目標文件也要進行連接處理。

4.6 誰將可執行文件中的程序裝載進入內存並使它運行?

在Dos中直接執行1.exe時,是正在運行的command,將1.exe中的程序加載進內存。command設置CPU的cs:ip指向程序的第一條指令,使程序得以運行。程序運行後,返回command中,CPU繼續運行command。

4.7 程序執行過程的跟蹤

當DOS運行一個程序的時候command放棄了CPU的控制權,但是debug並不放棄對CPU的控制,這樣我們可以通過debug看到程序單步執行的過程。
.exe中的程序加載過程
程序加載後,ds存放着程序所在內存區的段地址,這個內存區的前256個字節存放的是PSP,DOS利用PSP和被加載程序進行通信。256個字節向後存放的是程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章