4.1一個源程序從編寫到執行的過程spa
第一步:編寫彙編源程序;第二步:對源程序進行編譯和鏈接:編譯器進行編譯,生成目標文件,鏈接器對目標文件進行鏈接,生成可執行文件;第三步:執行可執行文件。操作系統
4.2源程序debug
彙編語言源程序中有兩種指令:一種是彙編指令,一種是僞指令。彙編指令對應有機器碼,能夠被編譯爲機器指令;而僞指令是由編譯器來執行的指令,是輔助編譯工做的指令,並不轉化成機器碼,更不會被執行。內存
程序返回:一個程序要被執行,首先要被加載到內存,而後將CPU控制權交給該程序。好比對於單任務操做系統DOS下,若P1正在執行,要執行P2的話,則P1先要將P2加載到內存,將CPU控制權交給P2,而後P2開始運行,P1暫停。當P2運行結束後,須要將CPU控制權交還給P1,這個交還稱之爲「程序返回」。彙編指令裏的「mov ax,4c00H/int 21H"實現的功能就是程序返回。編譯器
與結束相關的指令:編譯
目的 相關指令 指令性質 指令執行者bug
通知編譯器一個段結束 段名 ends 僞指令 編譯時編譯器執行程序
通知編譯器程序結束 end 僞指令 編譯時編譯器執行通信
程序返回 mov ax,4c00H int 21h 彙編指令 執行時由CPU執行 數據
4.9程序執行過程
經過debug可對程序進行單步跟蹤,程序加載進入內存後,cx寄存器中存放的是該程序的長度。程序的第一條指令地址即在CS:IP。
在DOS系統中可執行文件的加載過程以下:先找到一段足夠容量的內存空閒區域,設其起始地址爲SA:0000;在該區域前256個內存單元中建立PSP數據區(這個區主要是DOS系統用來和該程序進行通訊);在這256個內存單元以後開始存入程序。
因此,各區域分配以下:
內存空閒區域:SA:0000~;
PSP區:SA:0000~SA:00FF;
程序裝載區:(SA+10):0000~;(這裏爲什麼不能夠是:SA:0100?).
程序加載完畢後,DS設置爲SA,CX設置爲程序長度。由上可知,CS=SA+10H=DS+10H;