Guest User

Untitled

a guest
May 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. BUFSIZE equ 1
  2.  
  3. dataseg segment para public      
  4.     StrInput         db "Введите имя файла: ", 0Dh, 0Ah, '$'  
  5.     StrEmpty         db "Введена пустая строка", 0Dh, 0Ah, '$'
  6.     StrOpenError     db 0Dh, 0Ah, "Невозможно открыть файл", 0Dh,0Ah, '$'
  7.     StrReadError     db "Ошибка чтения", 0Dh,0Ah, '$'
  8.  
  9.     Buf            db BUFSIZE  dup (?)     
  10.     HInput         dw 0
  11.     BufInput       db 254, 255 dup (?)
  12.     FlagEOF        db ?
  13.     i              dw 0
  14.     j   dw 0
  15.     k dw 0
  16.     Lines   dw 0
  17.     Fd db 0
  18.     Fu db 0
  19.     FileSizeHigh dw 0
  20.     FileSizeLow  dw 0
  21.     Endl    db 0Dh, 0Ah, '$'
  22.     Help    db 'Up - вверх   Down - вниз  Esc - выход                             ',0
  23. dataseg ends
  24.  
  25. stackseg segment para stack
  26.     dw 128 dup(0)
  27. stackseg ends
  28.  
  29. codeseg segment para public
  30. assume cs:codeseg,ds:dataseg,ss:stackseg
  31. ;=======================================
  32. ;Вход:  AX - кол-во позиций
  33. ;       BX - Handle
  34. ;=======================================
  35. SeekBack proc
  36.     push cx
  37.    
  38.     push ax
  39.    
  40.     mov ah, 42h        
  41.     mov al, 1          
  42.     xor cx, cx          
  43.     xor dx, dx          
  44.     ;mov bx, FileHandle
  45.     int 21h             ; в DX:AX текущая позиция относительно начала файла
  46.    
  47.     pop cx
  48.  
  49.     sub ax, cx          
  50.     sbb dx, 0
  51.          
  52.     mov cx, dx          
  53.     mov dx, ax          
  54.     mov ah, 42h
  55.     mov al, 0          
  56.     int 21h            
  57.  
  58.  
  59.     mov ah, 42h        
  60.     mov al, 1          
  61.     xor cx, cx          
  62.     xor dx, dx          
  63.     ;mov bx, FileHandle
  64.     int 21h  
  65.  
  66.     pop cx
  67.     ret
  68. SeekBack endp
  69.  
  70. ClrScr proc
  71.     push ax
  72.     mov ah, 0
  73.     mov al, 2
  74.     int 10h
  75.     pop ax
  76.     ret
  77. ClrScr endp
  78.  
  79. ClrLine proc
  80.    
  81.     push ax
  82.     push bx
  83.     push dx
  84.     push cx
  85.     mov ah, 03
  86.     mov bh, 0
  87.     int 10h
  88.  
  89.     mov ax, 80
  90.     mul dh
  91.     mov di, ax
  92.    
  93.     push es
  94.     mov ax, 0B800h
  95.     mov es, ax
  96.     mov cx, 80
  97.     mov ax, 1020h
  98.     rep stosw
  99.     pop es 
  100.  
  101.     pop cx
  102.     pop dx
  103.     pop bx
  104.     pop ax
  105.     ret
  106. ClrLine endp
  107.  
  108. WriteStr proc
  109.  
  110.     push ax
  111.     push bx
  112.     push dx
  113.     push cx
  114.    
  115.    
  116.     mov ah, 13h
  117.     mov al, 0
  118.     mov cx, 79
  119.     mov dh, 24
  120.     mov dl, 0
  121.     mov bh, 0
  122.     mov bl, 01110000b
  123.     int 10h
  124.    
  125.     pop cx
  126.     pop dx
  127.     pop bx
  128.     pop ax
  129.     ret
  130.  
  131. WriteStr endp
  132. start:
  133.     mov ax, dataseg
  134.     mov ds, ax
  135.     mov es, ax
  136.     mov ax, stackseg
  137.     mov ss, ax        
  138.  
  139. InputRead:
  140.     mov ah, 9
  141.     lea dx, StrInput
  142.     int 21h
  143.  
  144.     mov ah, 0Ah
  145.     lea dx, BufInput
  146.     int 21h
  147.  
  148.     cmp [BufInput+1], 0
  149.     jne OpenFile
  150.     mov ah, 9
  151.     lea dx, StrEmpty
  152.     int 21h
  153.     jmp InputRead
  154. OpenFile:
  155.     xor ax, ax
  156.     mov al, [BufInput+1]
  157.     mov di, ax
  158.     mov [BufInput+di+2], 0
  159.  
  160.     mov ax, 3D00h
  161.     lea dx, [BufInput+2]
  162.     int 21h               ;Открыть файл в режиме чтения
  163.     jnc Process
  164.     mov ah, 9
  165.     lea dx, StrOpenError
  166.     int 21h
  167.     jmp InputRead
  168. Process:   
  169.     mov HInput, ax
  170.     mov i, 0
  171.  
  172.     call ClrScr
  173.  
  174.         mov FlagEOF, 0
  175.         mov j, 0
  176.     mov Fd, 1
  177.     mov Fu, 0
  178.  
  179.  
  180.     mov ah, 42h        
  181.     mov al, 2          
  182.     xor cx, cx          
  183.     xor dx, dx          
  184.     mov bx, hInput
  185.     int 21h  
  186.     mov FileSizeHigh, dx
  187.     mov FileSizeLow, ax
  188.  
  189.     mov ah, 42h        
  190.     mov al, 0          
  191.     xor cx, cx          
  192.     xor dx, dx          
  193.     mov bx, hInput
  194.     int 21h  
  195.  
  196. ReadFile:
  197.     cmp Lines, 23
  198.     jna Read
  199.     lea bp, Help
  200.     call WriteStr
  201.     jmp WaitKey
  202. Read:  
  203.     mov ah, 3Fh         ;чтение из файла
  204.     mov bx, HInput
  205.     lea dx, Buf
  206.     mov cx, BUFSIZE
  207.     int 21h
  208.  
  209.     jnc NoError
  210.         mov ah, 9
  211.         lea dx, StrReadError
  212.         int 21h
  213.         jmp exit
  214. NoError:  
  215.     ;========  
  216.    
  217.     mov ah, 42h        
  218.     mov al, 1          
  219.     xor cx, cx          
  220.     xor dx, dx          
  221.     mov bx, hInput
  222.     int 21h
  223.  
  224.     cmp dx, FileSizeHigh
  225.     jne NotEof
  226.     cmp ax, FileSizeLow
  227.     jne NotEOF
  228.         mov FlagEOF, 1
  229.         mov Fd, 0      
  230. NotEOF:
  231.     mov ah, 02h
  232.     mov dl, Buf
  233.     int 21h
  234.     inc i
  235.     cmp FlagEOF, 1
  236.     jne TestEndl
  237.         mov ah, 9
  238.         lea dx, Endl
  239.         int 21h
  240.  
  241.         lea bp, Help
  242.         call WriteStr
  243.  
  244.     jmp WaitKey
  245. TestEndl:
  246.     cmp dl, 0Ah
  247.     jne ReadFile
  248.     inc Lines
  249.     cmp j, 0
  250.     je ChangeJ
  251.     jmp  ReadFile
  252. ChangeJ:   
  253.     mov ax, i
  254.     mov j, ax
  255.     jmp ReadFile
  256.    
  257.     WaitKey:
  258.    
  259.         mov ah, 00
  260.         int 16h
  261.         cmp al, 27
  262.         jne TestKeys
  263.         jmp exit   
  264.     TestKeys:
  265.         cmp al, 0
  266.         jne WaitKey
  267.         cmp ah, 50h  ;DOWN
  268.         jne CheckUp
  269.         cmp Fd, 1
  270.         jne CheckUp
  271.        
  272.         mov ax, j
  273.         mov k, ax
  274.         mov ax, i  
  275.         sub ax, j
  276.         mov bx, hInput
  277.         call SeekBack
  278.    
  279.     ;L7:
  280.         mov ah, 9
  281.         lea dx, Endl
  282.         int 21h
  283.  
  284.         mov i, 0
  285.         mov j, 0            
  286.         mov Lines, 0
  287.         mov Fu, 1
  288.         jmp ReadFile   
  289.     CheckUp:
  290.         cmp ah, 48h
  291.         jne TestEOF
  292.         cmp Fu, 1
  293.         jne WaitKey
  294.  
  295.         mov ah, 9
  296.         lea dx, Endl
  297.         int 21h
  298.  
  299.         mov ax, i
  300.         mov bx, hInput
  301.         call SeekBack
  302.     Seek:
  303.         mov ax, 2
  304.         mov bx, hInput
  305.         call SeekBack
  306.         add ax, dx
  307.         cmp ax, 0
  308.         jne L1
  309.         mov Fu, 0
  310.         jmp StrFound
  311.     L1:
  312.          
  313.         mov ah, 3Fh         ;чтение из файла
  314.         mov bx, HInput
  315.         lea dx, Buf
  316.         mov cx, BUFSIZE
  317.         int 21h
  318.        
  319.         cmp Buf, 0Ah
  320.         je StrFound
  321.         jmp Seek
  322.                
  323.     StrFound:  
  324.         mov FlagEOF, 0
  325.         mov i, 0
  326.         mov j, 0
  327.         mov Lines, 0
  328.         mov k, 0
  329.         mov Fd, 1
  330.         jmp ReadFile
  331. TestEOF:
  332.     cmp FlagEOF, 1
  333.     jne _WaitKey
  334.         jmp WaitKey
  335. _WaitKey:
  336.     jmp ReadFile
  337.  
  338.    
  339.  
  340. exit:
  341.     mov ah, 3Eh
  342.     mov bx, HInput
  343.     int 21h
  344.    
  345.     mov ax, 4c00h
  346.     int 21h
  347.        
  348. codeseg ends
  349. end start
Add Comment
Please, Sign In to add comment