首页 / 软件开发 / 汇编语言 / 汇编源码系列之basload
        
            汇编源码系列之basload2008-04-30这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... ;BASLOAD.ASM   07/09/84 - DKeels
;----------------------------------------------------------------------------
;This program provides BASIC programs with access to the program loader (LOAD)
;by passing parameters via the system parameter area (SYSPARM).
;
;Inputs:
; FILE SPEC 1  - A string (len <= 80) with the complete name, including
;     path, of the file to be loaded and executed.
;     Example: "MAINMENU.EXE" or "C:FORMAT.COM"
; PARAMETER 1 - A string (len <= 80) with the command line parameters
;     to be passed to the program specified in FILE SPEC 1.
;     Example: "" or "A:"
; FILE SPEC 2 - Same as 1.
; PARAMETER 2 - Same as 1.
;
;Outputs:
; This program gives control to LOAD.
;----------------------------------------------------------------------------
CODE    SEGMENT "CODE"
    ASSUME  CS:CODE
    PUBLIC  BASLOAD    ;make known to BASIC at link time
BASLOAD    PROC  FAR
  ;prologue
    PUSH  BP    ;save BP
    MOV  BP,SP    ;set base for parm list
    PUSH  DS    ;DS -> basic work area
    PUSH  ES    ;ES -> basic work area
    MOV  DX,"dk"    ;interrupt verification switch
    INT  77H    ;get seg address of sysparm area in AX
    MOV  ES,AX    ;ES -> sysparm area
    CLD      ;set direction for all moves
  ;move file spec 1 to sysparm
    MOV  BX,SS:[BP+12]  ;get addr of string descriptor
    MOV  CX,DS:[BX]  ;get length of string into CX
    MOV  SI,DS:[BX+2]  ;get addr of string into SI
    MOV  DI,0    ;offset into sysparm
    REP  MOVSB    ;move string
    MOV  BYTE PTR ES:[DI],0  ;make it asciiz string
  ;move parameter 1 to sysparm
    MOV  BX,SS:[BP+10]  ;get addr of string descriptor
    MOV  CX,DS:[BX]  ;get length of string into CX
    MOV  SI,DS:[BX+2]  ;get addr of string into SI
    MOV  DI,81    ;offset into sysparm
    INC  CL    ;adjust for cr to be added at end
    MOV  BYTE PTR ES:[DI],CL  ;1st byte is length of string
    DEC  CL    ;re-adjust for move operation
    INC  DI
    REP  MOVSB    ;move string
    MOV  BYTE PTR ES:[DI],13  ;add cr to end
  ;move file spec 2 to sysparm
    MOV  BX,SS:[BP+8]  ;get addr of string descriptor
    MOV  CX,DS:[BX]  ;get length of string into CX
    MOV  SI,DS:[BX+2]  ;get addr of string into SI
    MOV  DI,163    ;offset into sysparm
    REP  MOVSB    ;move string
    MOV  BYTE PTR ES:[DI],0  ;make it asciiz string
  ;move parameter 2 to sysparm
    MOV  BX,SS:[BP+6]  ;get addr of string descriptor
    MOV  CX,DS:[BX]  ;get length of string into CX
    MOV  SI,DS:[BX+2]  ;get addr of string into SI
    MOV  DI,244    ;offset into sysparm
    INC  CL    ;adjust for cr to be added at end
    MOV  BYTE PTR ES:[DI],CL  ;1st byte is length of string
    DEC  CL    ;re-adjust for move operation
    INC  DI
    REP  MOVSB    ;move string
    MOV  BYTE PTR ES:[DI],13  ;add cr to end
  ;exit to BASIC
    POP  ES
    POP  DS
    POP  BP
    RET  8
BASLOAD    ENDP
CODE    ENDS
    END  BASLOAD