匯編源程序
mov ax,4c00H
int 21H
這兩條指令可以實現(xiàn)程序返回的功能。
編譯
使用微軟的masm5.0匯編編譯器再悼,文件名為masm.exe乃戈。
在編譯的過程中,我們提供了一個輸入话告,即源程序文件。最多可以得到3個輸出:目標文件(.obj)卵慰、列表文件(.Ist)沙郭、交叉引用文件(.erf),這3個輸出文件中裳朋,目標文件是我們最終要得到的結(jié)果病线,而另外兩個只是中間結(jié)果,可以讓編譯器忽略對它們的生成鲤嫡,暫不討論這兩個中間文件送挑,直接enter跳過即可。
連接:將目標文件1.obj 連接為 1.exe
使用微軟的 Overlay Linker3.60 連接器暖眼,文件名為 link.exe惕耕。
生成中間結(jié)果映像文件(.map),忽略诫肠。 如果程序調(diào)用了某一個庫文件赡突,則需要輸入庫文件的名稱,此處忽略区赵,最終得到可執(zhí)行文件1.exe惭缰,并有一個警告:無棧段,亦忽略笼才。
連接的作用:
- 當源程序很大漱受,拆分編譯,再用連接程序把它們連接到一起骡送,生成一個可執(zhí)行文件
- 當程序調(diào)用了庫文件的某個子程序昂羡,需要將庫文件和目標文件連接到一起,再生成可執(zhí)行文件
- 目標文件是存有機器碼的文件摔踱,但有些內(nèi)容還不能直接用來生成可執(zhí)行文件虐先,需要連接程序進行處理。
執(zhí)行
無輸出信息派敷,程序只是對寄存器進行了一些簡單的運算操作蛹批。
(1)在DOS 中直接執(zhí)行1.exe時,是正在運行的command篮愉,將 1.exe中的程序加載入內(nèi)存;
(2) command設置CPU 的CS:IP指向程序的第一條指令(即程序的入口)腐芍,從而使程序得以運行;
(3)程序運行結(jié)束后,返回到command 中试躏,CPU繼續(xù)運行command猪勇。
使用debug跟蹤程序的執(zhí)行過程
為了觀察程序的運行過程,可以使用Debug颠蕴。 Debug 可以將程序加載入內(nèi)存泣刹,設置CS:IP指向程序的入口助析,但Debug并不放棄對CPU的控制,這樣就可以使用Debug的相關(guān)命令來單步執(zhí)行程序椅您,查看每一條指令的執(zhí)行結(jié)果貌笨。
CX(count)存放的是程序的長度:機器碼共有15個字節(jié)。
CS = SA+10H = 075AH+10H = 076AH
可以直接在debug模式下用 U命令查看PSP處的內(nèi)容:頭兩個字節(jié)是 CD20襟沮。
使用Q命令退出Debug开伏, 將返回到command中,因為Debug是command加載運行的遭商。在DOS中用“debug 1.exe”運行Debug對1.exe 進行跟蹤時固灵,程序加載的順序是:command加載Debug,Debug 加載1.exe劫流。 返回的順序是:從1.exe 中的程序返回到Debug巫玻,從Debug返回到command。