AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--exec

51自学网 http://www.51zixue.net
; 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 compiledcseg	segment para public 'code'public	execsubexecsub proc far	assume cs:cseg,ds:cseg,ss:nothing,es:nothingbasicds equ 510hi24ip	equ 90hi24cs	equ 92hi1bip	equ 6chi1bcs	equ 6ehi1cip	equ 70hi1ccs	equ 72hb24ip	equ 51ahb24cs	equ 51chb1bip	equ 516hb1bcs	equ 518hb1cip	equ 512hb1ccs	equ 514h	push bp	mov bp,sp	jmp p010stak	equ this byte	dw 0			; save sp	dw 0			; save ssprm1	equ this byte	dw 0			; environmentprm2	equ this word	dw 0			; command line - ip & cs	dw 0prm3	equ this byte	dw 0			; default FCB - ip & cs	dw 0prm4	equ this byte	dw 0			; second default FCB - ip & cs	dw 0p010:	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 controlp020:	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 p060p050:	mov ax,0		; clear errorp060:	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,cxp090:	mov si,[bp+6]		; point to RETCD%	mov [si],ax		; return error, if any	pop bp			; return to caller	ret 10execsub endpcseg	endsend

 

 

 
上一篇:汇编源码--free  下一篇:汇编源码--dskwatch