匯編語言實驗三
阿新 • • 發佈:2018-11-17
程序 code 文件夾 和我 加載 asm 裏的 目標 第一條
(一)將下面的程序保存為 t1.axm 文件,將其生成為可執行文件 t1.exe
assume cs:codesg codesg segment mov ax,2000H mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax push bx pop ax pop bx mov ax,4c00H int 21H codesg ends end
(1)編輯
(2)編譯
完成對源程序的編輯後,得到一個源程序文件 c:\ASM\t1.asm。可以對其進行編譯,生成包含機器代碼的目標文件
使用匯編編譯器 masm 來完成編譯任務。
(3)連接
可以看到經過編輯、編譯、連接 3 個步驟後,當前文件夾下總共有 3 個文件,它們分別是:
- T1.ASM
- T1.OBJ
- T1.EXE
其中 T1.EXE 是一個可執行文件,也就是我們最終想要得到的文件。
(二)用 Debug 跟蹤 t1.exe 的執行過程,寫出每一步執行後,相關寄存器中的內容和棧頂的內容
下面說一說 DOS 中一個 EXE 文件被加載進內存的過程。
一個程序被加載進內存後,操作系統會為我們創建一個程序段前綴(PSP),DOS 需要通過 PSP 來和我們的程序進行通信,其中 PSP 和我們的程序在內存中的關系圖大致如下:
程序加載後,DS 中存放著程序所在內存區的段地址,由於 PSP 也是程序在內存中的一部分,所以 DS = SA。
而 CS 是指向程序的第一條指令,CS = DS + 10H,通過上面動圖裏寄存器的內容也能看出來。DS = 0A67H,CS = 0A77H。
所以我們也可以說,通過 Dubug 命令,將這段程序從可執行文件中載入內存,程序起始地址為 0A67H,第一條指令起始地址為 0A77H,其中 0A67H ~ 0A77H 這段地址存放的是該程序對應的程序段前綴(PSP)。
程序從 0A77:0000 開始執行如下:
(三)PSP 的頭兩個字節是 CD 20,用 Debug 加載 t1.exe,查看 PSP 中的內容。
0A67:0000 ~ 0A67:0100 這段內容就是程序段前綴(PSP)裏的內容。
匯編語言實驗三