www.pudn.com > Demo_asm_80x86.rar > ExecDemo.asm


;****************************************************** 
;* 文件名:ExecDemo.asm 
;* 创建日期:2001.7.17 
;* 作者:陈文尧 
;* 功能:测试未来汇编库函数Exec和GetEnv 
;* 备注:本程序是由Turbo Pascal的一个例子改编而来 
;****************************************************** 
include system.inc 
 
;****************************************************** 
;* 以下代码由汇编专家产生,不要随便修改 
;****************************************************** 
.CODE 
	ifdef __COM__ 
		org	100h 
	endif 
@@Start: 
;------------------------------------------------------ 
; 初始化数据段 
;------------------------------------------------------ 
	InitDS	cs 
;------------------------------------------------------ 
; 释放多余内存 
;------------------------------------------------------ 
	ModifyMemory	;xxx 
;------------------------------------------------------ 
; 调用主函数 
;------------------------------------------------------ 
	call	main 
;------------------------------------------------------ 
; 正常返回DOS 
;------------------------------------------------------ 
@@Exit: 
	ReturnDos 
 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 主函数,加入实现程序功能的代码 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
main	proc 
	; 
	;GetEnv函数返回字符串字符数在ax(不包括结尾的0),但这儿不用 
	; 
	LibCall		GetEnv,, 
@Next: 
	DisplayMessage	Prompt 
	; 
	;Gets函数返回字符串字符数在ax(不包括结尾的0) 
	; 
	LibCall		Gets, 
	or			ax,ax 
	jz			@End 
	add			ax,03h 
	mov			ds:Count,al 
	; 
	;Exec有两个参数:第一个是程序名,是以0结束的字符串地址偏移(其段地址为ds); 
	;                第二个是参数名,是前面冠以其长度的字符串的地址偏移 
	;如果调用成功cf=0,否则cf=1错误代码在ax 
	; 
	LibCall		Exec,, 
	jnc			@Skip 
	DisplayMessage	ErrMsg 
@Skip: 
	jmp			@Next 
@End: 
	; 
	ret 
main	endp 
 
Prompt	db	'Enter Dos Command:$' 
ErrMsg	db	'Could not execute COMMAND.COM$' 
EnvName	db	'COMSPEC',00h 
Comspec	db	80h dup(?) 
CmdLine	label	byte 
Count		db	? 
		db	'/C '    ;/C 选项为:执行命令并返回 
@CmdLine	db	80h dup(?) 
;****************************************************** 
;* 标志程序结束并指定程序入口 
;****************************************************** 
	end	@@Start