敬业的IT人 >> 编程开发 >> 其他语言 >> 汇编源码--exec

汇编源码--exec

敬业的IT人 互联网 佚名 2008-2-19 14:37:54
    ·汇编源码--BRK
    ·汇编源码--CLOCK
    ·汇编源码--BURNOUT
    ·汇编源码--DOSSYM
    ·汇编源码--circle
    ·汇编源码--DEV
    ·汇编源码--getspace
    ·汇编源码--CLEAR
    ·汇编源码--col
    ·汇编源码--gameport
; 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 csegsegment para public 'code' publicexecsub execsub proc far assume cs:cseg,ds:cseg,ss:nothing,es:nothing basicds equ 510h i24ipequ 90h i24csequ 92h i1bipequ 6ch i1bcsequ 6eh i1cipequ 70h i1ccsequ 72h b24ipequ 51ah b24csequ 51ch b1bipequ 516h b1bcsequ 518h b1cipequ 512h b1ccsequ 514h push bp mov bp,sp jmp p010 stakequ this byte dw 0; save sp dw 0; save ss prm1equ this byte dw 0; environment prm2equ this word dw 0; command line - ip & cs dw 0 prm3equ this byte dw 0; default FCB - ip & cs dw 0 prm4equ 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 csegends end 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com