Advertisement
SquirrelInBox

entryCount

Oct 25th, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model tiny
  2. .code
  3. org 100h
  4.  
  5. entry:
  6.     ;открыли файл, в ax - дескриптор файла
  7.     mov ah, 3dh
  8.     mov al, 00000010b
  9.     mov dx, offset filename
  10.     int 21h
  11.     jc @error
  12.    
  13.     ; считали в dx его содержимое
  14.     mov bx, ax
  15.     mov ah, 3fh
  16.     mov cx, 127
  17.     mov dx, offset buffer
  18.     int 21h
  19.     jc @error
  20.    
  21.     ; закрыли файл
  22.     mov cx, ax
  23.     xor dh, dh
  24.     mov ah, 3eh
  25.     int 21h
  26.     jc @error
  27.    
  28.     ; нашли длину подстроки
  29.     mov dx, cs:[80h]
  30.     xor dh, dh
  31.     dec dx
  32.  
  33.     ; получили места, где начинается строка и подстрока
  34.     mov si, offset buffer
  35.     mov di, 82h
  36.  
  37.     ;здесь будет счетчик повторений
  38.     xor bx, bx
  39.    
  40. ; сравниваем строки. Если не совпадают, то сдвигаем si в большой строке на 1
  41.  
  42. ;dx - длина подстроки; di - на подстроку
  43. ;cx - длина строки в файле; si - на строку
  44.  
  45. circle:
  46.     ;поменяли, чтобы сравнивать по длине подстроки
  47.     xchg cx, dx
  48.     jmp check_substr
  49.    
  50. ; если строки совпали
  51. ; увеличиваем счетчик, возвращаем все на место, уменьшаем длину большой строки
  52. s:  inc bx
  53.     mov di, 82h
  54.     mov cx, cs:[80h]
  55.     dec cx
  56.     xor ch, ch
  57.  
  58.     sub dx, cx
  59.    
  60.     xchg cx, dx
  61.     jcxz w
  62.     jmp circle
  63.    
  64. jmp w
  65.  
  66. ; сравниваем строки и уходим на нужные метки
  67. check_substr:
  68.     repe cmpsb
  69.     jnz f
  70.     jz s
  71.    
  72.  
  73. ; чтобы перепрыгнуть плохой случай
  74. ;jmp w
  75.  
  76. ; тут появимся, если не совпали
  77. ; возвращаем все на место для подстроки
  78. f:
  79.     mov di, 82h
  80.     mov cx, cs:[80h]
  81.     dec cx
  82.     xor ch, ch
  83.    
  84.     jcxz w
  85.     xchg cx, dx
  86.     jcxz w
  87.     dec cx
  88.    
  89.     jmp circle
  90.  
  91.    
  92. ; вывод
  93. w:
  94.     mov dl, bl
  95.     add dl, '0'
  96.     mov ah, 02h
  97.     int 21h
  98.     ret
  99.    
  100. @error:
  101.     mov ah, 09h
  102.     mov dx, offset errormsg
  103.     int 21h
  104.    
  105. filename db "1.txt", 0
  106. errormsg db "Error", 0dh, 0ah, '$'
  107. buffer db 127 dup(?)
  108. buffer_s db ?
  109. num db 0
  110. end entry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement