dosstart.esm

来自「开放源码的编译器open watcom 1.6.0版的源代码」· ESM 代码 · 共 255 行

ESM
255
字号
.387
		PUBLIC	_AliasList
		EXTRN	SaveSave_:BYTE
		EXTRN	StringIn_:BYTE
		EXTRN	_end:BYTE
		EXTRN	_edata:BYTE
		EXTRN	InitRetrieve_:BYTE
dgroup		GROUP	_data,const,stack
fard		SEGMENT	PARA PUBLIC USE16 'far_data'
fard		ENDS
_TEXT		SEGMENT	PARA PUBLIC USE16 'code'
		ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
dosedit:
    jmp         near ptr L$13
L$1:
    DB	50H, 72H, 6fH, 67H, 72H, 61H, 6dH, 20H
    DB	69H, 73H, 20H, 61H, 6cH, 72H, 65H, 61H
    DB	64H, 79H, 20H, 6cH, 6fH, 61H, 64H, 65H
    DB	64H, 24H
L$2:
    DB	43H, 61H, 6eH, 6eH, 6fH, 74H, 20H, 6cH
    DB	6fH, 63H, 61H, 74H, 65H, 20H, 70H, 72H
    DB	65H, 76H, 69H, 6fH, 75H, 73H, 20H, 76H
    DB	65H, 72H, 73H, 69H, 6fH, 6eH, 24H, 0
    DB	0, 0, 0
L$3:
    DB	5, 0, 0d1H, 0ceH
    DD	SaveSave_
L$4:
    DB	0, 0
_AliasList:
    DB	0, 0, 0, 0
L$5:
    DB	0, 0
L$6:
    DB	0, 0
L$7:
    DB	0, 0, 0d1H, 0ceH
int21:
    cmp         ah,0aH
    jne         L$10
    push        ax
    push        dx
    push        bx
    push        cx
    mov         bx,0
    mov         ax,4400H
    int         21H
    test        dx,80H
    pop         cx
    pop         bx
    pop         dx
    pop         ax
    je          L$10
    sti         
    push        di
    mov         di,sp
    push        bp
    push        es
    push        si
    push        ax
    push        bx
    push        cx
    push        dx
    push        ds
    push        ds
    push        dx
    mov         ah,51H
    int         21H
    cmp         bx,word ptr cs:L$7
    jb          L$8
    mov         di,0
    jmp         L$9
L$8:
    mov         di,1
L$9:
    pop         si
    pop         ds
    lea         ax,2[si]
    mov         dx,ds
    mov         cl,byte ptr [si]
    mov         byte ptr cs:L$22,cl
    mov         cx,dgroup
    mov         bx,offset dgroup:L$22
    push        si
    mov         bp,sp
    mov         si,ss
    mov         ss,cx
    mov         sp,offset dgroup:L$21
    push        ds
    mov         es,word ptr cs:L$3
    push        es
    mov         ds,cx
    push        di
    call        near ptr StringIn_
    pop         ds
    mov         ss,si
    mov         sp,bp
    pop         si
    mov         cl,byte ptr cs:L$23
    mov         byte ptr 1[si],cl
    pop         ds
    pop         dx
    pop         cx
    pop         bx
    pop         ax
    pop         si
    pop         es
    pop         bp
    pop         di
    mov         al,0
    iret        
L$10:
    jmp         dword ptr cs:L$5
main:
    lea         dx,L$2
    jmp         L$12
L$11:
    lea         dx,L$1
L$12:
    push        cs
    pop         ds
    mov         ah,9
    int         21H
    jmp         near ptr L$18
L$13:
    mov         dx,es
    mov         ax,0
    mov         ds,ax
    mov         di,80H
    mov         cl,byte ptr es:[di]
    xor         ch,ch
L$14:
    inc         di
    dec         cx
    cmp         byte ptr es:[di],20H
    je          L$14
    inc         cx
    cmp         byte ptr es:[di],2dH
    jne         L$19
    cmp         byte ptr es:1[di],71H
    je          L$15
    cmp         byte ptr es:1[di],51H
    jne         L$19
L$15:
    cli         
    mov         dx,es
    mov         ax,di
    les         bx,dword ptr ds:[84H]
    push        es
    cmp         word ptr es:-2[bx],0ced1H
    jne         main
    mov         di,word ptr es:-8[bx]
    mov         word ptr ds:[84H],di
    mov         di,word ptr es:-6[bx]
    mov         word ptr ds:[86H],di
    cmp         word ptr es:-14H[bx],0ced1H
    jne         L$16
    mov         ds,word ptr es:-0eH[bx]
    mov         si,ss
    mov         di,sp
    mov         ss,word ptr es:-0eH[bx]
    mov         sp,offset dgroup:L$21
    call        dword ptr es:-12H[bx]
    mov         ss,si
    mov         sp,di
L$16:
    sti         
    pop         ds
    cmp         word ptr -0aH[bx],0
    je          L$17
    mov         es,word ptr -0aH[bx]
    mov         ah,49H
    int         21H
L$17:
    mov         es,word ptr -4[bx]
    mov         ah,49H
    int         21H
L$18:
    mov         al,0
    mov         ah,4cH
    int         21H
L$19:
    cli         
    les         bx,dword ptr ds:[84H]
    cmp         word ptr es:-2[bx],0ced1H
    jne         L$20
    jmp         near ptr L$11
L$20:
    mov         word ptr cs:L$5,bx
    mov         word ptr cs:L$6,es
    mov         word ptr ds:[84H],offset int21
    mov         word ptr ds:[86H],cs
    sti         
    mov         word ptr cs:L$7,dx
    mov         es,dx
    mov         bx,di
    add         bx,cx
    mov         byte ptr es:[bx],0
    mov         bx,dgroup
    mov         word ptr cs:L$4,bx
    mov         ss,bx
    mov         sp,offset dgroup:L$21
    push        di
    push        ax
    push        es
    mov         ax,dgroup
    mov         es,ax
    mov         cx,offset dgroup:_end
    mov         di,offset dgroup:_edata
    sub         cx,di
    mov         al,0
    rep stosb  
    pop         es
    pop         ax
    pop         di
    mov         ds,bx
    mov         bx,offset dgroup:_end
    mov         cl,4
    shr         bx,cl
    add         bx,dgroup
    mov         cx,es
    sub         bx,cx
    mov         cl,4
    inc         bx
    mov         ah,4aH
    int         21H
    mov         ax,di
    call        near ptr InitRetrieve_
    mov         al,0
    mov         ah,31H
    mov         dx,bx
    int         21H
_TEXT		ENDS
_data		SEGMENT	PARA PUBLIC USE16 'data'
    DB	03FH DUP(0,0,0,0,0,0,0,0)
    DB	0, 0, 0, 0, 0, 0, 0, 0
L$21:
    DB	0
L$22:
    DB	0, 0
L$23:
    DB	0, 0, 5cH, 41H, 4cH, 49H, 41H, 53H
    DB	2eH, 44H, 4fH, 53H, 0

_data		ENDS
const		SEGMENT	PARA PUBLIC USE16 'data'
const		ENDS
stack		SEGMENT	PARA STACK USE16 'stack'
    ORG 0
    ORG 200H
stack		ENDS

		END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?