庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>相关源码>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

汇编的的各类源码--exec

 作者:本站收集   日期:2005-8-1 15:39:14
字号选择〖 〗/ 双击滚屏 单击停止   
; EXECSUB - execute program from compiled BASIC - requires DOS 2.00
; This version allows one BASIC program to call another
;
; CALL EXECSUB(PROG$,PARM$,FCB1$,FCB2$,RETCD%)
; PROG$ is the program name (e.g. 'command.com')
; PARM$ is the parameter to be passed to the program (e.g. '/c dir *.bas')
; FCB1$ is the first file control block (required by some programs)
; FCB2$ is the second file control block (required by some programs)
; RETCD% is the error return code

	skip equ 2		; 1 for interpretive, 2 for compiled

cseg	segment para public 'code'
public	execsub
execsub proc far

	assume cs:cseg,ds:cseg,ss:nothing,es:nothing

basicds equ 510h
i24ip	equ 90h
i24cs	equ 92h
i1bip	equ 6ch
i1bcs	equ 6eh
i1cip	equ 70h
i1ccs	equ 72h

b24ip	equ 51ah
b24cs	equ 51ch
b1bip	equ 516h
b1bcs	equ 518h
b1cip	equ 512h
b1ccs	equ 514h

	push bp
	mov bp,sp
	jmp p010

stak	equ this byte
	dw 0			; save sp
	dw 0			; save ss

prm1	equ this byte
	dw 0			; environment
prm2	equ this word
	dw 0			; command line - ip & cs
	dw 0
prm3	equ this byte
	dw 0			; default FCB - ip & cs
	dw 0
prm4	equ this byte
	dw 0			; second default FCB - ip & cs
	dw 0

p010:
	xor ax,ax		; get psp
	mov es,ax		; es=0
	mov bx,ds		; save ds
	mov ds,ax		; ds=0
	cli

	push ds:[basicds]	; save basic's ds

	push ds:[i24ip] 	; save int 24h and shadow
	push ds:[b24ip]
	push ds:[b24ip]
	pop ds:[i24ip]

	push ds:[i24cs]
	push ds:[b24cs]
	push ds:[b24cs]
	pop ds:[i24cs]

	push ds:[i1bip] 	; save int 1bh and shadow
	push ds:[b1bip]
	push ds:[b1bip]
	pop ds:[i1bip]

	push ds:[i1bcs]
	push ds:[b1bcs]
	push ds:[b1bcs]
	pop ds:[i1bcs]

	push ds:[i1cip] 	; save int 1ch and shadow
	push ds:[b1cip]
	push ds:[b1cip]
	pop ds:[i1cip]

	push ds:[i1ccs]
	push ds:[b1ccs]
	push ds:[b1ccs]
	pop ds:[i1ccs]

	sti
	mov ds,bx		; restore ds

	mov di,4f2h		; point to dos comm. area
	mov ax,es:[di]		; get psp segment
	mov es,ax
	mov di,2
	mov bx,es:[di]		; get top of memory
	sub bx,ax		; subtract psp
	mov ah,4ah
	int 21h 		; free memory
	jnc p020		; no error
	mov ah,0		; memory error
	jmp p090		; to error control

p020:	mov si,[bp+12]		; point to parm$
	add si,skip
	mov ax,[si]
	mov si,offset prm2	; establish command line
	mov cs:[si],ax
	mov ax,ds
	mov cs:[si+2],ax

	mov si,[bp+10]		; point to fcb1$
	add si,skip
	mov ax,[si]
	mov si,offset prm3
	mov cs:[si],ax
	mov ax,ds
	mov cs:[si+2],ax

	mov si,[bp+8]		; point to fcb2$
	add si,skip
	mov ax,[si]
	mov si,offset prm4	; establish second fcb
	mov cs:[si],ax
	mov ax,ds
	mov cs:[si+2],ax

	push bp 		; save registers
	push ds
	push es
	pushf
	mov si,offset stak	; save stack
	mov cs:[si],sp
	mov cs:[si+2],ss

	mov ah,4bh		; load prog
	mov al,0		; load & execute
	mov si,[bp+14]		; point to prog$
	add si,skip
	mov dx,[si]
	push cs
	pop es
	mov bx,offset prm1	; point to parameter
	int 21h 		; load & execute program
	jnc p050		; no error
	mov ah,1		; set error code
	jmp p060

p050:	mov ax,0		; clear error

p060:	mov bx,cs		; restore stack
	mov ds,bx
	mov si,offset stak
	cli			; no interrupts
	mov sp,cs:[si]
	mov ss,cs:[si+2]
	sti			; allow interrupts

	popf			; restore registers
	pop es
	pop ds
	pop bp

	mov cx,ds		; save ds
	xor bx,bx
	mov ds,bx		; ds=0
	cli

	pop ds:[b1ccs]		; restore int 1ch
	pop ds:[i1ccs]
	pop ds:[b1cip]
	pop ds:[i1cip]

	pop ds:[b1bcs]		; restore int 1bh
	pop ds:[i1bcs]
	pop ds:[b1bip]
	pop ds:[i1bip]

	pop ds:[b24cs]		; restore int 24h
	pop ds:[i24cs]
	pop ds:[b24ip]
	pop ds:[i24ip]

	pop ds:[basicds]	; restore basic's ds
	sti
	mov ds,cx

p090:	mov si,[bp+6]		; point to RETCD%
	mov [si],ax		; return error, if any

	pop bp			; return to caller
	ret 10

execsub endp
cseg	ends
end

上一篇:汇编的的各类源码--free    下一篇:汇编的的各类源码--dskwatch  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:39:14
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿