《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 匯編基礎(chǔ):程序返回操作系統(tǒng)

匯編基礎(chǔ):程序返回操作系統(tǒng)

2017-06-10
關(guān)鍵詞: 匯編

我們都知道,匯編語言源程序要進(jìn)過匯編和連接兩個步驟才能生成一個可以在DOS下直接執(zhí)行的.exe文件,在DOS下執(zhí)行這個文件時,DOS像調(diào)用子程序一樣,把控制權(quán)交給它,而這個exe文件執(zhí)行完成后也要像子程序返回調(diào)用程序一樣返回DOS,

一、用4CH系統(tǒng)功能調(diào)用實現(xiàn)返回

4CH系統(tǒng)調(diào)用功能是結(jié)束程序執(zhí)行返回DOS,因此可以利用它來完成程序返回操作系統(tǒng),其具體方法是在程序 結(jié)束時使用下列命令:

MOV AH, 4CH

INT 21H

但并不是任何程序都可以用這種方法來實現(xiàn)返回DOS的,只有返回DOS的主程序才能使用這種方式,而對于調(diào)用的子程序應(yīng)該返回給的是調(diào)用程序而不是系統(tǒng),所以不能用4CH實現(xiàn)返回。下面就介紹一種能夠用來返回給調(diào)用程序的返回方式。

二、用程序段前綴實現(xiàn)返回

在DOS狀態(tài)下執(zhí)行EXE文件時,DOS會在COMMAND.COM暫存部分之后建立一個256字節(jié)的程序段前綴(PSP)在其后裝入該EXE程序時把控制權(quán)交給它,PSP的內(nèi)容主要包括3部分信息:被裝入程序與DOS連接時使用的信息、供裝入程序使用的參數(shù)和供DOS本身使用的信息。

在DOS轉(zhuǎn)移控制權(quán)時,將代碼段(CS)指向EXE程序的代碼段,SS指向堆棧段,DS和ES并不指向用戶程序的數(shù)據(jù)段和附加段,而是指向PSP。

在PSP首地址(第一、二字節(jié))有一條軟中斷指令“INT 20H”(有關(guān)中斷部分我會在以后說到),而這條指令的功能就是結(jié)束用戶程序返回操作系統(tǒng),因此可以用程序段前綴實現(xiàn)返回DOS,其步驟如下:

a、將程序編織成一個過程,并且將過程的類型屬性設(shè)置為FAR

b、將PSP的起始邏輯地址壓入堆棧,即將“INT 20H”指令的地址壓入堆棧。由于EXE文件裝入內(nèi)存時DS和ES都是指向PSP的,因此用指令“PUSH  DS”就可以實現(xiàn)將PSP的起始邏輯地址壓入堆棧的操作。

c、在程序編制而成的過程結(jié)束時使用返回指令RET,這樣執(zhí)行該指令時系統(tǒng)便會將保存在堆棧中的PSP起始邏輯地址彈出到CS和IP中,進(jìn)而轉(zhuǎn)去執(zhí)行PSP首地址處的指令I(lǐng)NT  20H, 從而實現(xiàn)返回DOS的目的。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。