Uruchamianie innych programów

Czasem zdarza się, że z poziomu naszego własnego programu musimy uruchomić jakiś inny program lub polecenie systemowe. Służy do tego funkcja systemowa AH=4B przerwania DOS-a 21h. Jej argumenty to kolejno:

Po więcej szczegółów odsyłam do listy przerwań Ralfa Brown'a (RBIL)

Spróbujmy teraz napisać jakiś prosty przykład - uruchomienie samego NASMa (powinien się wyświetlić błąd, że nie podano plików wejściowych). Program jest w składni NASM.


(przeskocz przykładowy program)
; Program uruchamiający inny program.
;
; Autor: Bogdan D.
; kontakt: bogdandr (at) op (dot) pl
;
; nasm -O999 -o exec_dos.com -f bin exec_dos.asm

section	.text
org	100h

start:
	mov	ax, cs
	mov	es, ax		; będziemy zmieniać rozmiar segmentu kodu
	mov	bx, koniec	; BX = rozmiar segmentu kodu
	shr	bx, 4		; BX /= 16 - rozmiar w paragrafach
	inc	bx		; żeby nie obciąć naszego programu
	mov	ah, 4ah		; funkcja zmiany rozmiaru
	int	21h
				; zwolnienie miejsca na ładowany program

	mov	[kom_ln+2], cs	; uzupełniamy pola potrzebnych struktur
	mov	[fcb1+2], cs
	mov	[fcb2+2], cs

	mov	[sssp], sp	; zachowujemy nasz stos
	mov	[sssp+2], ss

	mov	ax, 4b00h	; funkcja uruchomienia programu
	mov	dx, program	; adres nazwy programu
	mov	bx, srod	; adres struktury środowiska
	int	21h		; uruchamiamy

	cli			; przywracamy nasz stos
	mov	sp, [sssp]
	mov	ss, [sssp+2]
	sti


	mov	ax, 4c00h
	int	21h

sssp 		dd	0	; miejsce na SS i SP

; linia poleceń uruchamianego programu
linia_kom	db	0, "   ", 0dh

; File Control Block - juz nieużywana przez DOS
; struktura, tu ustawiona na jakieś bezpieczne domyślne wartości
; (zgodnie z książką Art of Assembler)
fcb 		db	3," ",0,0,0,0,0

; nazwa programu do uruchomienia
program 	db	"nasm.exe", 0

; struktura środowiska
srod		dw	0		; segment środowiska. Nasz własny
					; jest pod DS:[2ch]
kom_ln		dw	linia_kom, 0	; offset i segment linii poleceń
fcb1		dw	fcb, 0		; offset i segment pierwszego FCB
fcb2		dw	fcb, 0		; offset i segment drugiego FCB

koniec:


Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)