Welcome

首页 / 软件开发 / 汇编语言 / 汇编源码系列之fxn

汇编源码系列之fxn2008-04-30这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究.......

name FXN4BH
page 55,132
title "FXN4BH --- demo PC-DOS EXEC function"
;
; FXN4BH --- demonstrate use of the
; PC-DOS 2.0 EXEC function call 4BH
;
; Copyright (c) 1983 by Ray Duncan
;
cr equ 0dh ;ASCII carriage return
lf equ 0ah ;ASCII line feed
;
cseg segment para public "CODE"
;
assume cs:cseg,ds:data,ss:stack
;
demo proc far
;at entry DS & ES = PSP
push ds ;Save address for final
xor ax,ax ;FAR RET to PC-DOS on stack
push ax
;save copy of SS:SP for use
;after return from overlay
mov cs:STK_SEG,ss
mov cs:STK_PTR,sp
;
;Reserve 1000H bytes for
;this loader and release
;the rest of memory for
;use by the overlayed program.
mov bx,100h ;ES=segment of PSP of loader
mov ah,4ah ;BX=paragraphs to reserve
int 21h
;make the messages in data
;segment addressable
mov ax,seg DATA
mov ds,ax
mov es,ax
;jump if memory
;de-allocation failed
jc ALLOC_ERR
;print memory successfully
;released
mov dx,offset MSG2
mov ah,9
int 21h
;
;now load and execute
;the overlaid program.
mov dx,offset PGM_NAME
mov bx,offset PAR_BLK
mov al,0
mov ah,4bh
int 21h
;restore stack pointers
;to state before EXEC call
mov ss,cs:STK_SEG
mov sp,cs:STK_PTR
;Make data segment
;addressable again
mov ax,seg DATA
mov ds,ax
;print message that loader
;successfully regained control
mov dx,offset MSG3
mov ah,9
int 21h
;now exit to PC-DOS
ret
alloc_err: ;come here if memory
;cannot be released
mov dx,offset MSG1
mov ah,9
int 21h ;print error message and
ret ;exit to PC-DOS
;
demo endp
;
;these two variables must
;reside in Code Segment so
;that they are addressable
;after return from overlay.
stk_seg dw 0 ;original SS contents
stk_ptr dw 0 ;original SP contents
;
cseg ends
;declare a stack area
;for use by this loader
stack segment para stack "STACK"
;allow 64 bytes in this case
db 64 dup (?)
stack ends
;declare data segment to
;contain variables and tables
data segment para public "DATA"
;
msg1 db cr,lf
db "Unable to release memory."
db cr,lf,"$"
msg2 db cr,lf
db "Memory above loader released."
db cr,lf,"Now loading CHKDSK.COM."
db cr,lf,"$"
msg3 db cr,lf
db "Loader regained control from CHKDSK,"
db cr,lf
db "now making final exit to PC-DOS."
db cr,lf,"$"
;
;drive, path, and name of program
;to be loaded and executed.
pgm_name db "CHKDSK.COM",0
;
par_blk dw ENVIR ;segment address of
;environment descriptor
;
;full address of command line
;to be passed at offset 80H
dw offset CMD_LINE ;in overlaid
dw seg CMD_LINE ;program"s PSP
;
;full address of default
;File Control Block to be
;passed at offset 5CH in
dw offset FCB1 ;overlaid
dw seg FCB1 ;program"s PSP
;
;full address of default
;File Control Block to be
;passed at offset 6CH in
dw offset FCB2 ;overlaid
dw seg FCB2 ;program"s PSP
;
;actual command line tail
;to be passed to overlay
cmd_line db 4," *.*",cr,0
;
;first default FCB to
fcb1 db 0 ;be passed to overlay
db 11 dup ("?")
db 25 dup (0)
;second default FCB to
fcb2 db 0 ;be passed to overlay
db 11 dup (" ")
db 25 dup (0)
;
data ends
;declare separate data
;segment to contain
;environment descriptor
envir segment para "ENVIR"
;
;Search path used by PC-DOS
;to look for commands or
;batch files not found in
db "PATH=",0 ;the current directory
;
;Search path used by PC-DOS
;to locate COMMAND.COM
db "COMSPEC=A:COMMAND.COM",0
db 0 ;extra 0 byte designates
;end of environment
envir ends
end demo