dos16m.esm
来自「开放源码的编译器open watcom 1.6.0版的源代码」· ESM 代码 · 共 487 行
ESM
487 行
.387
PUBLIC _cstart_
PUBLIC _Not_Enough_Memory_
PUBLIC __exit_
PUBLIC __exit_with_msg_
PUBLIC __GETDS
PUBLIC __DOSseg__
PUBLIC __first_data_16M
PUBLIC d16_seginfo_struct
PUBLIC __gdt
PUBLIC __idt
PUBLIC __rtcode
PUBLIC __d16info
PUBLIC __psp16M
PUBLIC __env16M
PUBLIC __mem16M
PUBLIC __dummy16M
PUBLIC __nullarea
PUBLIC __main_data_16M
PUBLIC __curbrk
PUBLIC __psp
PUBLIC __osmajor
PUBLIC __osminor
PUBLIC __osmode
PUBLIC __HShift
PUBLIC __STACKLOW
PUBLIC __STACKTOP
PUBLIC __cbyte
PUBLIC __child
PUBLIC __no87
PUBLIC __get_ovl_stack
PUBLIC __restore_ovl_stack
PUBLIC __close_ovl_file
PUBLIC ___FPE_handler
PUBLIC __FPE_handler
PUBLIC __LpCmdLine
PUBLIC __LpPgmName
PUBLIC __ovlflag
PUBLIC __intno
PUBLIC __ovlvec
PUBLIC __stack_16M
PUBLIC __end_16M
EXTRN stackavail_:BYTE
EXTRN _end:BYTE
EXTRN _edata:BYTE
EXTRN __FInitRtns:BYTE
EXTRN __CMain:BYTE
EXTRN __FFiniRtns:BYTE
EXTRN ___d16_selectors:BYTE
EXTRN __acrtused:BYTE
DGROUP GROUP _NULL,_AFTERNULL,CONST,STRINGS,_DATA,DATA,BCSD,XIB,XI,XIE,YIB,YI,YIE,_BSS,STACK,verylast
_TEXT SEGMENT WORD PUBLIC USE16 'CODE'
ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
_startup_:
DD stackavail_
_cstart_:
jmp near ptr L$5
DB 57H, 41H, 54H, 43H, 4fH, 4dH, 20H, 43H
DB 20H, 52H, 75H, 6eH, 2dH, 54H, 69H, 6dH
DB 65H, 20H, 73H, 79H, 73H, 74H, 65H, 6dH
DB 20H, 63H, 6fH, 64H, 65H, 20H, 69H, 73H
DB 20H, 70H, 72H, 6fH, 76H, 69H, 64H, 65H
DB 64H, 20H, 6fH, 6eH, 20H, 61H, 6eH, 20H
DB 22H, 61H, 73H, 20H, 69H, 73H, 22H, 20H
DB 62H, 61H, 73H, 69H, 73H, 20H, 61H, 6eH
DB 64H, 20H, 69H, 73H, 20H, 28H, 63H, 29H
DB 20H, 43H, 6fH, 70H, 79H, 72H, 69H, 67H
DB 68H, 74H, 20H, 62H, 79H, 20H, 57H, 41H
DB 54H, 43H, 4fH, 4dH, 20H, 49H, 6eH, 74H
DB 65H, 72H, 6eH, 61H, 74H, 69H, 6fH, 6eH
DB 61H, 6cH, 20H, 43H, 6fH, 72H, 70H, 2eH
DB 20H, 31H, 39H, 38H, 38H, 2dH, 31H, 39H
DB 39H, 33H, 2eH, 20H, 41H, 6cH, 6cH, 20H
DB 72H, 69H, 67H, 68H, 74H, 73H, 20H, 72H
DB 65H, 73H, 65H, 72H, 76H, 65H, 64H, 2eH
L$1:
DB 0dH, 0aH, 2aH, 2aH, 2aH, 20H, 4eH, 55H
DB 4cH, 4cH, 20H, 61H, 73H, 73H, 69H, 67H
DB 6eH, 6dH, 65H, 6eH, 74H, 20H, 64H, 65H
DB 74H, 65H, 63H, 74H, 65H, 64H, 0dH, 0aH
DB 0
L$2:
DB 4eH, 6fH, 74H, 20H, 65H, 6eH, 6fH, 75H
DB 67H, 68H, 20H, 6dH, 65H, 6dH, 6fH, 72H
DB 79H, 0dH, 0aH, 0
L$3:
DB 63H, 6fH, 6eH, 0, 0, 0
L$4:
DB 72H, 65H, 71H, 75H, 69H, 72H, 65H, 73H
DB 20H, 44H, 4fH, 53H, 2fH, 31H, 36H, 4dH
DB 0aH, 0dH, 24H
_Not_Enough_Memory_:
mov bx,1
mov ax,offset L$2
mov dx,cs
jmp near ptr __exit_with_msg_
L$5:
mov ax,0ff00H
mov dx,78H
int 21H
inc ax
je L$6
mov ah,9
mov dx,offset L$4
push cs
pop ds
int 21H
mov ax,4cffH
int 21H
L$6:
sti
mov cx,DGROUP
mov es,cx
mov bx,offset DGROUP:_end
add bx,0fH
and bl,0f0H
mov word ptr es:__STACKLOW,bx
mov word ptr es:__psp,ds
mov bx,offset DGROUP:__end_16M
add bx,0fH
and bx,0fff0H
jne L$7
mov bx,0fffeH
L$7:
mov word ptr es:__curbrk,bx
mov ss,cx
mov sp,bx
mov word ptr es:__STACKTOP,bx
mov di,ds
mov es,di
mov di,81H
mov cl,byte ptr -1[di]
mov ch,0
cld
mov al,20H
repe scasb
lea si,-1[di]
mov dx,DGROUP
mov es,dx
mov di,word ptr es:__STACKLOW
mov word ptr es:__LpCmdLine,di
mov word ptr es:L$24,es
je L$8
inc cx
rep movsb
L$8:
sub al,al
stosb
mov al,0
stosb
dec di
mov ah,30H
int 21H
mov byte ptr es:__osmajor,al
mov byte ptr es:__osminor,ah
mov cx,di
cmp al,3
jb L$12
mov ax,word ptr ds:[2cH]
mov dx,word ptr es:__psp
mov ds,ax
sub si,si
xor bp,bp
L$9:
mov ax,word ptr [si]
or ax,2020H
cmp ax,6f6eH
jne L$10
mov ax,word ptr 2[si]
cmp ax,3738H
jne L$10
inc bp
L$10:
cmp byte ptr [si],0
lodsb
jne L$10
cmp byte ptr [si],0
jne L$9
lodsb
inc si
inc si
L$11:
cmp byte ptr [si],0
movsb
jne L$11
L$12:
mov si,cx
mov word ptr es:__LpPgmName,si
mov word ptr es:L$25,es
mov dx,DGROUP
mov ds,dx
mov es,dx
mov word ptr DGROUP:__no87,bp
mov word ptr DGROUP:__STACKLOW,di
mov cx,offset DGROUP:_end
mov di,offset DGROUP:_edata
sub cx,di
mov al,0
rep stosb
cmp word ptr DGROUP:__get_ovl_stack,0
jne L$13
mov ax,offset __null_ovl_rtn
mov word ptr DGROUP:__get_ovl_stack,ax
mov word ptr DGROUP:L$20,cs
mov word ptr DGROUP:__restore_ovl_stack,ax
mov word ptr DGROUP:L$21,cs
mov word ptr DGROUP:__close_ovl_file,ax
mov word ptr DGROUP:L$22,cs
L$13:
xor bp,bp
push bp
mov bp,sp
mov ax,offset __null_FPE_rtn
mov word ptr DGROUP:___FPE_handler,ax
mov word ptr DGROUP:L$23,cs
call far ptr __FInitRtns
call far ptr __CMain
__exit_:
push ax
mov dx,DGROUP
mov ds,dx
cld
lea di,DGROUP:__nullarea
mov es,dx
mov cx,10H
mov ax,101H
repe scasw
pop ax
je L$15
mov bx,ax
mov ax,offset L$1
mov dx,cs
__exit_with_msg_:
mov sp,offset DGROUP:_end+80H
push bx
push ax
push dx
mov dx,_TEXT
mov ds,dx
mov dx,offset L$3
mov ax,3d01H
int 21H
mov bx,ax
pop ds
pop dx
mov si,dx
cld
L$14:
lodsb
cmp al,0
jne L$14
mov cx,si
sub cx,dx
dec cx
mov ah,40H
int 21H
pop ax
L$15:
mov dx,DGROUP
mov ds,dx
cmp byte ptr DGROUP:__ovlflag,0
je L$16
push ax
mov al,byte ptr DGROUP:__intno
mov ah,25H
lds dx,dword ptr DGROUP:__ovlvec
int 21H
pop ax
L$16:
push ax
call far ptr __FFiniRtns
pop ax
mov ah,4cH
int 21H
__GETDS:
push ss
pop ds
ret
__null_FPE_rtn:
retf
__null_ovl_rtn:
retf
__DOSseg__:
_TEXT ENDS
C_ETEXT SEGMENT PARA PUBLIC USE16 'ENDCODE'
ASSUME CS:C_ETEXT, DS:DGROUP, SS:DGROUP
__first_data_16M:
DW seg __first_data_16M
add byte ptr [bx+si],al
add byte ptr [bx+si],al
add byte ptr [bx+si],al
add byte ptr [bx+si],al
add byte ptr [bx+si],al
add byte ptr [bx+si],al
add byte ptr [bx+si],al
C_ETEXT ENDS
nullseg SEGMENT PARA PUBLIC USE16 'CODE'
ASSUME CS:nullseg, DS:DGROUP, SS:DGROUP
jmp L$17
nop
nop
d16_seginfo_struct:
DB 44H, 4fH, 53H, 2fH, 31H, 36H, 4dH, 0
DB 3, 0
DW offset _cstart_
DW seg _startup_
DB 0, 0, 0, 0
DW seg L$19
DW seg _startup_
DW seg __first_data_16M
DW seg DGROUP:__nullarea
DW seg DGROUP:__nullarea
DW seg DGROUP:__end_16M
DW seg __gdt
DW seg __idt
DW seg __d16info
DB 0, 0
DW seg __rtcode
DW seg __psp16M
DW seg __env16M
DW seg __mem16M
DW seg __dummy16M
L$17:
mov dx,offset L$18
mov ax,cs
mov ds,ax
mov ah,9
int 21H
mov ax,4cffH
int 21H
L$18:
DB 2eH, 45H, 58H, 45H, 20H, 68H, 61H, 73H
DB 20H, 6eH, 6fH, 74H, 20H, 62H, 65H, 65H
DB 6eH, 20H, 70H, 72H, 6fH, 63H, 65H, 73H
DB 73H, 65H, 64H, 20H, 62H, 79H, 20H, 4dH
DB 41H, 4bH, 45H, 50H, 4dH, 0aH, 0dH, 24H
nullseg ENDS
gdtseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__gdt:
DB 0, 0
gdtseg ENDS
idtseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__idt:
DB 0, 0
idtseg ENDS
rtcodeseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__rtcode:
DB 0, 0
rtcodeseg ENDS
rtdataseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__d16info:
DB 0, 0
rtdataseg ENDS
pspseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__psp16M:
DB 0, 0
pspseg ENDS
envseg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__env16M:
DB 0, 0
envseg ENDS
mem0seg SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__mem16M:
DB 0, 0
mem0seg ENDS
dummy14 SEGMENT PARA PUBLIC USE16 'FAR_DATA'
__dummy16M:
DB 0, 0
dummy14 ENDS
ovi_data SEGMENT PARA PUBLIC USE16 'CODE'
L$19:
ovi_data ENDS
FAR_DATA SEGMENT BYTE PUBLIC USE16 'FAR_DATA'
FAR_DATA ENDS
_NULL SEGMENT PARA PUBLIC USE16 'BEGDATA'
__nullarea:
__main_data_16M:
DB 1, 1, 1, 1, 1, 1, 1, 1
DB 1, 1, 1, 1, 1, 1, 1, 1
DB 1, 1, 1, 1, 1, 1, 1, 1
DB 1, 1, 1, 1, 1, 1, 1, 1
_NULL ENDS
_AFTERNULL SEGMENT WORD PUBLIC USE16 'BEGDATA'
DB 0, 0
_AFTERNULL ENDS
CONST SEGMENT WORD PUBLIC USE16 'DATA'
CONST ENDS
STRINGS SEGMENT WORD PUBLIC USE16 'DATA'
STRINGS ENDS
XIB SEGMENT WORD PUBLIC USE16 'DATA'
XIB ENDS
XI SEGMENT WORD PUBLIC USE16 'DATA'
XI ENDS
XIE SEGMENT WORD PUBLIC USE16 'DATA'
XIE ENDS
YIB SEGMENT WORD PUBLIC USE16 'DATA'
YIB ENDS
YI SEGMENT WORD PUBLIC USE16 'DATA'
YI ENDS
YIE SEGMENT WORD PUBLIC USE16 'DATA'
YIE ENDS
_DATA SEGMENT WORD PUBLIC USE16 'DATA'
__curbrk:
DB 0, 0
__psp:
DB 0, 0
__osmajor:
DB 0
__osminor:
DB 0
__osmode:
DB 1
__HShift:
DB 3
__STACKLOW:
DB 0, 0
__STACKTOP:
DB 0, 0
__cbyte:
DB 0, 0
__child:
DB 0, 0
__no87:
DB 0, 0
__get_ovl_stack:
DB 0, 0
L$20:
DB 0, 0
__restore_ovl_stack:
DB 0, 0
L$21:
DB 0, 0
__close_ovl_file:
DB 0, 0
L$22:
DB 0, 0
___FPE_handler:
__FPE_handler:
DB 0, 0
L$23:
DB 0, 0
__LpCmdLine:
DB 0, 0
L$24:
DB 0, 0
__LpPgmName:
DB 0, 0
L$25:
DB 0, 0
__ovlflag:
DB 0
__intno:
DB 0
__ovlvec:
DB 0, 0, 0, 0
_DATA ENDS
DATA SEGMENT WORD PUBLIC USE16 'DATA'
DATA ENDS
BCSD SEGMENT WORD PUBLIC USE16 'DATA'
BCSD ENDS
_BSS SEGMENT WORD PUBLIC USE16 'BSS'
_BSS ENDS
STACK SEGMENT PARA STACK USE16 'STACK'
ORG 0
__stack_16M LABEL BYTE
ORG 1000H
STACK ENDS
verylast SEGMENT PARA PRIVATE USE16 'STACK'
ORG 0
__end_16M LABEL BYTE
verylast ENDS
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?