Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BUFSIZE equ 1
- dataseg segment para public
- StrInput db "Введите имя файла: ", 0Dh, 0Ah, '$'
- StrEmpty db "Введена пустая строка", 0Dh, 0Ah, '$'
- StrOpenError db 0Dh, 0Ah, "Невозможно открыть файл", 0Dh,0Ah, '$'
- StrReadError db "Ошибка чтения", 0Dh,0Ah, '$'
- Buf db BUFSIZE dup (?)
- HInput dw 0
- BufInput db 254, 255 dup (?)
- FlagEOF db ?
- i dw 0
- j dw 0
- k dw 0
- Lines dw 0
- Fd db 0
- Fu db 0
- FileSizeHigh dw 0
- FileSizeLow dw 0
- Endl db 0Dh, 0Ah, '$'
- Help db 'Up - вверх Down - вниз Esc - выход ',0
- dataseg ends
- stackseg segment para stack
- dw 128 dup(0)
- stackseg ends
- codeseg segment para public
- assume cs:codeseg,ds:dataseg,ss:stackseg
- ;=======================================
- ;Вход: AX - кол-во позиций
- ; BX - Handle
- ;=======================================
- SeekBack proc
- push cx
- push ax
- mov ah, 42h
- mov al, 1
- xor cx, cx
- xor dx, dx
- ;mov bx, FileHandle
- int 21h ; в DX:AX текущая позиция относительно начала файла
- pop cx
- sub ax, cx
- sbb dx, 0
- mov cx, dx
- mov dx, ax
- mov ah, 42h
- mov al, 0
- int 21h
- mov ah, 42h
- mov al, 1
- xor cx, cx
- xor dx, dx
- ;mov bx, FileHandle
- int 21h
- pop cx
- ret
- SeekBack endp
- ClrScr proc
- push ax
- mov ah, 0
- mov al, 2
- int 10h
- pop ax
- ret
- ClrScr endp
- ClrLine proc
- push ax
- push bx
- push dx
- push cx
- mov ah, 03
- mov bh, 0
- int 10h
- mov ax, 80
- mul dh
- mov di, ax
- push es
- mov ax, 0B800h
- mov es, ax
- mov cx, 80
- mov ax, 1020h
- rep stosw
- pop es
- pop cx
- pop dx
- pop bx
- pop ax
- ret
- ClrLine endp
- WriteStr proc
- push ax
- push bx
- push dx
- push cx
- mov ah, 13h
- mov al, 0
- mov cx, 79
- mov dh, 24
- mov dl, 0
- mov bh, 0
- mov bl, 01110000b
- int 10h
- pop cx
- pop dx
- pop bx
- pop ax
- ret
- WriteStr endp
- start:
- mov ax, dataseg
- mov ds, ax
- mov es, ax
- mov ax, stackseg
- mov ss, ax
- InputRead:
- mov ah, 9
- lea dx, StrInput
- int 21h
- mov ah, 0Ah
- lea dx, BufInput
- int 21h
- cmp [BufInput+1], 0
- jne OpenFile
- mov ah, 9
- lea dx, StrEmpty
- int 21h
- jmp InputRead
- OpenFile:
- xor ax, ax
- mov al, [BufInput+1]
- mov di, ax
- mov [BufInput+di+2], 0
- mov ax, 3D00h
- lea dx, [BufInput+2]
- int 21h ;Открыть файл в режиме чтения
- jnc Process
- mov ah, 9
- lea dx, StrOpenError
- int 21h
- jmp InputRead
- Process:
- mov HInput, ax
- mov i, 0
- call ClrScr
- mov FlagEOF, 0
- mov j, 0
- mov Fd, 1
- mov Fu, 0
- mov ah, 42h
- mov al, 2
- xor cx, cx
- xor dx, dx
- mov bx, hInput
- int 21h
- mov FileSizeHigh, dx
- mov FileSizeLow, ax
- mov ah, 42h
- mov al, 0
- xor cx, cx
- xor dx, dx
- mov bx, hInput
- int 21h
- ReadFile:
- cmp Lines, 23
- jna Read
- lea bp, Help
- call WriteStr
- jmp WaitKey
- Read:
- mov ah, 3Fh ;чтение из файла
- mov bx, HInput
- lea dx, Buf
- mov cx, BUFSIZE
- int 21h
- jnc NoError
- mov ah, 9
- lea dx, StrReadError
- int 21h
- jmp exit
- NoError:
- ;========
- mov ah, 42h
- mov al, 1
- xor cx, cx
- xor dx, dx
- mov bx, hInput
- int 21h
- cmp dx, FileSizeHigh
- jne NotEof
- cmp ax, FileSizeLow
- jne NotEOF
- mov FlagEOF, 1
- mov Fd, 0
- NotEOF:
- mov ah, 02h
- mov dl, Buf
- int 21h
- inc i
- cmp FlagEOF, 1
- jne TestEndl
- mov ah, 9
- lea dx, Endl
- int 21h
- lea bp, Help
- call WriteStr
- jmp WaitKey
- TestEndl:
- cmp dl, 0Ah
- jne ReadFile
- inc Lines
- cmp j, 0
- je ChangeJ
- jmp ReadFile
- ChangeJ:
- mov ax, i
- mov j, ax
- jmp ReadFile
- WaitKey:
- mov ah, 00
- int 16h
- cmp al, 27
- jne TestKeys
- jmp exit
- TestKeys:
- cmp al, 0
- jne WaitKey
- cmp ah, 50h ;DOWN
- jne CheckUp
- cmp Fd, 1
- jne CheckUp
- mov ax, j
- mov k, ax
- mov ax, i
- sub ax, j
- mov bx, hInput
- call SeekBack
- ;L7:
- mov ah, 9
- lea dx, Endl
- int 21h
- mov i, 0
- mov j, 0
- mov Lines, 0
- mov Fu, 1
- jmp ReadFile
- CheckUp:
- cmp ah, 48h
- jne TestEOF
- cmp Fu, 1
- jne WaitKey
- mov ah, 9
- lea dx, Endl
- int 21h
- mov ax, i
- mov bx, hInput
- call SeekBack
- Seek:
- mov ax, 2
- mov bx, hInput
- call SeekBack
- add ax, dx
- cmp ax, 0
- jne L1
- mov Fu, 0
- jmp StrFound
- L1:
- mov ah, 3Fh ;чтение из файла
- mov bx, HInput
- lea dx, Buf
- mov cx, BUFSIZE
- int 21h
- cmp Buf, 0Ah
- je StrFound
- jmp Seek
- StrFound:
- mov FlagEOF, 0
- mov i, 0
- mov j, 0
- mov Lines, 0
- mov k, 0
- mov Fd, 1
- jmp ReadFile
- TestEOF:
- cmp FlagEOF, 1
- jne _WaitKey
- jmp WaitKey
- _WaitKey:
- jmp ReadFile
- exit:
- mov ah, 3Eh
- mov bx, HInput
- int 21h
- mov ax, 4c00h
- int 21h
- codeseg ends
- end start
Add Comment
Please, Sign In to add comment