WEB开发网
开发学院软件开发汇编语言 汇编源码系列之exec 阅读

汇编源码系列之exec

 2008-04-29 09:33:43 来源:WEB开发网   
核心提示:这个都是过去DOS时代的汇编源码,虽然已经过去了,汇编源码系列之exec,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言

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

; 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


Tags:汇编 源码 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接