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

汇编源码系列之cobload

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

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

;COBLOAD.ASM   07/09/84 - DKeels
;----------------------------------------------------------------------------
;This program provides COBOL programs with access to the program loader (LOAD)
;by passing parameters via the system parameter area (SYSPARM).
;
;Inputs:
;01 COBLOAD-PARMS
; 05 FILE-SPEC-1  PIC X(80).  Contains complete drive, path and filename.
; 05 PARAMETER-1  PIC X(80).  Contains command line parameters.
; 05 FILE-SPEC-2  PIC X(80).  Same as 1.
; 05 PARAMETER-2  PIC X(80).  Same as 1.
;
;Outputs:
; None.
;----------------------------------------------------------------------------
CL_CODE_SEG  SEGMENT PUBLIC 'CODE'
    ASSUME  CS:CL_CODE_SEG,DS:CL_CODE_SEG,ES:CL_CODE_SEG
STACK_PARM  STRUC
PUSHED_SI  DW  ?
PUSHED_DI  DW  ?
PUSHED_DS  DW  ?
PUSHED_ES  DW  ?
PUSHED_BP  DW  ?
RETURN_IP  DW  ?
RETURN_CS  DW  ?
PARM1_OFFSET  DW  ?
PARM1_DS  DW  ?
STACK_PARM  ENDS
    PUBLIC  COBLOAD    ;make known to COBOL at link time
COBLOAD    PROC  FAR
  ;prologue
    PUSH  BP
    PUSH  ES
    PUSH  DS
    PUSH  DI
    PUSH  SI
    MOV  BP,SP    ;set base for stack parm structure
  ;address caller's parameter block
    MOV  AX,[BP].PARM1_DS
    MOV  DS,AX      ;DS -> cobol data seg
    MOV  SI,[BP].PARM1_OFFSET  ;SI -> offset to parm block
  ;address load's parameter block in sysparm
    MOV  DX,'dk'    ;verification switch
    INT  77H    ;get seg addr in AX
    MOV  ES,AX    ;ES -> sysparm
    MOV  DI,0    ;DI -> offset to LOAD parms
  ;move cobol's parm block to load's parm block (in sysparm)
    CLD        ;set direction for moves
    MOV  CX,80      ;length of move
    REP  MOVSB      ;move file spec 1
ASCIIZ1:  MOV  BYTE PTR ES:[DI],0  ;make asciiz string
    DEC  DI
    MOV  AL,BYTE PTR ES:[DI]
    CMP  AL,' '      ;nullify trailing spaces
    JE  ASCIIZ1
    MOV  BX,81      ;point to parm length byte
    MOV  BYTE PTR ES:[BX],82  ;init length of parm, + 2
    MOV  DI,82      ;point to 1st parm position
    MOV  CX,80      ;length of move
    REP  MOVSB      ;move parm
ADD_CR_1:  MOV  BYTE PTR ES:[DI],13  ;add carriage return
    DEC  BYTE PTR ES:[BX]  ;sub 1 from length of parm
    DEC  DI
    MOV  AL,BYTE PTR ES:[DI]
    CMP  AL,' '      ;put cr in trailing spaces
    JE  ADD_CR_1
    MOV  DI,163
    MOV  CX,80      ;length of move
    REP  MOVSB      ;move file spec 2
ASCIIZ2:  MOV  BYTE PTR ES:[DI],0  ;make asciiz string
    DEC  DI
    MOV  AL,BYTE PTR ES:[DI]
    CMP  AL,' '      ;nullify trailing spaces
    JE  ASCIIZ2
    MOV  BX,244      ;point to parm length byte
    MOV  BYTE PTR ES:[BX],82  ;init length of parm, + 2
    MOV  DI,245      ;point to 1st parm position
    MOV  CX,80      ;length of move
    REP  MOVSB      ;move parm
ADD_CR_2:  MOV  BYTE PTR ES:[DI],13  ;add carriage return
    DEC  BYTE PTR ES:[BX]  ;sub 1 from length of parm
    DEC  DI
    MOV  AL,BYTE PTR ES:[DI]
    CMP  AL,' '      ;put cr in trailing spaces
    JE  ADD_CR_2
  ;return to caller
    POP  SI
    POP  DI
    POP  DS
    POP  ES
    POP  BP
    RET  4
COBLOAD    ENDP
CL_CODE_SEG  ENDS
    END


Tags:汇编 源码 系列

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