汇编语言学习——第四章 第一个汇编程序
1、一個匯編語言程序從寫出到最終執行的簡要過程:
編寫--> 編譯,鏈接 -->?執行
?
2、編譯,鏈接
使用匯編語言編譯程序(MASM.EXE)對源程序文件中的源程序進行編譯,產生目標文件;
再用連接程序(LINK.EXE)對目標文件進行連接,生成可在操作系統中直接運行的可執行文件。
?
3、可執行文件
可執行文件中包含兩部分內容:
程序(從原程序中的匯編指令翻譯過來的機器碼)和數據(源程序中定義的數據)
相關的描述信息(比如:程序有多大、要占多少內存空間等)
?
4、一個簡單的源程序
assume cs:codesg
codesg segment
start:
?????? MOV AX, 0123H
?????? MOV BX, 0456H
????? ADD AX, BX,
????? ADD AX, AX
// 程序返回
MOV? AX, 4C00H
INT 21H
codesg ends
end start
?
5、指令
1)匯編指令有對應的機器碼的指令,可以被編譯為機器指令,最終為CPU所執行。
2)偽指令。沒有對應的機器碼的指令,最終不被CPU所執行。
偽指令是由編譯器來執行的指令,編譯器根據偽指令來進行相關的編譯工作。
?
6、定義一個段
?segment和ends是一對成對使用的偽指令,這是在寫可被編譯器編譯的匯編程序時,必須要用到的一對偽指令。
?segment和ends的功能是定義一個段,segment說明一個段開始,ends 說明一個段結束。
一個段必須有一個名稱來標識,使用格式為:
段名 segment
段名 ends
?
7、End。
END是一個匯編程序的結束標記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。
如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。
?
8、程序返回
應該在程序的末尾添加返回的程序段。
??? mov ax,4c00H
??? int 21H
這兩條指令所實現的功能就是程序返回。
?
9、編譯和鏈接的作用
連接的作用有以下幾個:
1)當源程序很大時,可以將它分為多個源程序文件來編譯,
每個源程序編譯成為目標文件后,再用連接程序將它們連接到一起,生成一個可執行文件;
2)程序中調用了某個庫文件中的子程序,需要將這個庫文件和該程序生成的目標文件連接到一起,生成一個可執行文件;
3)一個源程序編譯后,得到了存有機器碼的目標文件,
目標文件中的有些內容還不能直接用來生成可執行文件,連接程序將這此內容處理為最終的可執行信息。
?
所以,在只有一個源程序文件,而又不需要調用某個庫中的子程序的情況下,也必須用連接程序對目標文件進行處理,生成可執行文件。
注意,對于連接的過程,可執行文件是我們要得到的最終結果。
?
10、程序的執行
程序最先以匯編指令的形式存在源程序中,經編譯、連接后轉變為機器碼,存儲在可執行文件中。
一個程序的執行必須由一個正在執行的程序對其進行調用。
在DOS中,可執行文件中的程序P1若要運行,必須有一個正在運行的程序P2 ,
將 P1 從可執行文件中加載入內存,將CPU的控制權交給它,P1才能得以運行;
當P1運行完畢后,應該將CPU的控制權交還給使它得以運行的程序P2。
?
匯編程序從寫出到執行的過程
編程->1.asm->編譯(masm) ->1.obj ->鏈接(link) ->加載->內存中的程序->CPU運行
?
11、程序執行過程的跟蹤?? debug 1.exe
程序加載后,ds中存放著程序所在內存區的段地址,這個內存區的偏移地址為 0 ,則程序所在的內存區的地址為:ds:0;
這個內存區的前256 個字節中存放的是PSP,dos用來和程序進行通信。
從 256字節處向后的空間存放的是程序。
?
所以,我們從ds中可以得到PSP的段地址SA,PSP的偏移地址為 0,則物理地址為SA×16+0。
因為PSP占256(100H)字節,所以程序的物理地址是:
?? SA×16+0+256= SA×16+16×16=(SA+16)×16+0
可用段地址和偏移地址表示為:SA+10:0。
?
到了 int 21,我們要用P命令執行:
int 21 執行后,顯示“Program terminated normally”,返回到Debug中。
表示程序正常結束。
注意,要使用P命令執行int 21。
?
個人總結: 這一章通過編寫第一個源程序,認識源程序從編寫到被執行的過程。
?
轉載于:https://www.cnblogs.com/bbsno1/p/3263049.html
總結
以上是生活随笔為你收集整理的汇编语言学习——第四章 第一个汇编程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大漠软件c语言教程,大漠万能脚本编辑器无
- 下一篇: hdu 4409 Family Name