Переглядач для файлів різних типів, з визначенням типу файлу по розширенню і, відповідно, способу перегляду (txt, hex, bin)
pusha
mov cx,24
hsdn: call scroll_downhex
loop hsdn
popa
ret
scroll_pgdnhex endp
;=================================
scroll_pguphex proc
pusha
mov cx,24
hsdu: call scroll_uphex
loop hsdu
popa
ret
scroll_pguphex endp
;================================== B I N
;показ дампа для вигляду bin
showbindump proc
pusha
mov cx,2000
mov bx,word ptr fs:[filepointer]
add bx,offset file
mov bp,offset file
add bp,32767
mov ax,0b800h
mov es,ax
xor si,si
bin_l: mov al,byte ptr fs:[bx]
mov byte ptr es:[si],al
inc bx
cmp bx,bp
jb bin_loop
mov bx,offset file
mov word ptr fs:[filepointer],0
bin_loop:
inc si
inc si
loop bin_l
cmp bx,bp
jb bin_sav
sub bx,bp
bin_sav:
popa
ret
showbindump endp
;=================================================
scroll_downbin proc
pusha
mov bx,word ptr fs:[filepointer]
mov ax,bx
add ax,offset file+32767-80
cmp bx,ax
jae ok_scru
add bx,80
ok_scru:
mov word ptr fs:[filepointer],bx
call showbindump
popa
ret
scroll_downbin endp
;=================================================
scroll_upbin proc
pusha
mov bx,word ptr fs:[filepointer]
cmp bx,80
ja ok_up
mov bx,80
ok_up:
sub bx,80
mov word ptr fs:[filepointer],bx
call showbindump
popa
ret
scroll_upbin endp
;=================================
scroll_pgdnbin proc
pusha
mov cx,24
sdn: call scroll_downbin
loop sdn
popa
ret
scroll_pgdnbin endp
;=================================
scroll_pgupbin proc
pusha
mov cx,24
sdu: call scroll_upbin
loop sdu
popa
ret
scroll_pgupbin endp
;==================================
getfilename proc
pusha
;введення iменi файла
push fs
pop ds
mov dx,offset msg_enter
mov ah,9
int 21h
mov bx,offset filename
ent_l: mov ah,1
int 21h
cmp al,13
mov byte ptr ds:[bx],al
inc bx
cmp al,13
jne ent_l
dec bx
mov byte ptr ds:[bx],0
;визначення типу файла
mov bx,offset filename
dec bx
name_s: inc bx
mov al,byte ptr fs:[bx]
cmp al,0
jne name_s
sub bx,2
mov ah,byte ptr fs:[bx]
mov al,byte ptr fs:[bx+1]
cmp ax,6578h ;HEX
jne other1
mov byte ptr fs:[filetype],1
jmp typ_exit
other1:
cmp ax,696eh ;BIN
jne other2
mov byte ptr fs:[filetype],0
jmp typ_exit
other2:
mov byte ptr fs:[filetype],2 ;TXT
typ_exit:
popa
ret
getfilename endp
;==================================
readfile proc
pusha
;open
mov ah,3dh
xor al,al
push fs
pop ds
mov dx,offset filename
int 21h
jc read_error
mov bx,ax
;read
mov ah,3fh
mov cx,32767
push fs
pop ds
mov dx,offset file
int 21h
jc read_error
mov word ptr fs:[filelength],ax
;close
mov ah,3eh
mov bx,word ptr fs:[handle]
int 21h
popa
ret
read_error:
push fs
pop ds
mov dx,offset errmsg
mov ah,9
int 21h
popa
mov ah,4ch
int 21h
readfile endp
;==================================
begin:
xor ah,ah
mov al,3
int 10h
mov ax,seg handle
mov fs,ax
call getfilename
call readfile
mov ah,5
mov ch,48h
int 16h
work:
mov ah,0
int 16h
mov bl,byte ptr fs:[filetype]
cmp ah,50h
jne work_1
cmp bl,0
jne d1
call scroll_downbin
jmp work
d1: cmp bl,1
jne d2
call scroll_downhex
jmp work
d2:
call scroll_downtxt
jmp work
work_1:
cmp ah,48h
jne work_2
cmp bl,0
jne u1
call scroll_upbin
jmp work
u1: cmp bl,1
jne u2
call scroll_uphex
jmp work
u2:
call scroll_uptxt
jmp work
work_2:
cmp ah,51h
jne work_3
cmp bl,0
jne pd1
call scroll_pgdnbin
jmp work
pd1: cmp bl,1
jne pd2
call scroll_pgdnhex
jmp work
pd2:
call scroll_pgdntxt
jmp work
work_3:
cmp ah,49h
jne work_4
cmp bl,0
jne pu1
call scroll_pgupbin
jmp work
pu1: cmp bl,1
jne pu2
call scroll_pguphex
jmp work
pu2:
call scroll_pguptxt
jmp work
work_4:
cmp ah,1
jne work
mov ah,4ch
int 21h
end start
Блок-схема алгоритму