Найти количество вхождений подстроки в строку - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то, начиная с какой позиции. Не могу понять почему программа зациклилась на вводе второй строки.
Листинг программы
  1. .model small
  2. stack 100h
  3. dataseg
  4. InviteStr1 db 0Dh, 0Ah, 'Enter the string 1: $'
  5. StringINP1 db 160, ?, 160 dup(?)
  6. InviteStr2 db 0Dh, 0Ah, 'Enter the string 2: $'
  7. StringINP2 db 150, ?, 150 dup(?)
  8. Number db 0
  9. Count db 0
  10. ErrorStr db 0Dh, 0Ah, 'Not found $'
  11. OutStr db 0Dh, 0Ah, 'Result: $'
  12. codeseg
  13. start:
  14. startupcode
  15. ;-------------------------------------------------------------
  16. lea DX, InviteStr1 ;приглашение ввести первую строку
  17. mov AH, 09h
  18. int 21h
  19. lea DX, StringINP1 ;ввод первой строки
  20. mov AH, 0Ah
  21. int 21h
  22. ;-------------------------------------------------------------
  23. lea DX, InviteStr2 ;приглашение ввести втрорую строку
  24. mov AH, 09h
  25. int 21h
  26. lea DX, StringINP2 ;ввод второй строки
  27. mov AH, 0Ah
  28. int 21h
  29. ;--------------------------------------------------------------
  30. xor CL,CL
  31. mov CL, StringINP1+1
  32. COUNTER:
  33. lea BX, StringINP1+2 ;строка
  34. push BX
  35. lea BX, StringINP2+2 ;подстока
  36. push BX
  37. mov BL, StringINP1+1 ;длина строки
  38. add DL, AL
  39. push BX
  40. call SEARCH
  41. sub BX, AX
  42. mov AX, DX
  43. add BX, AX
  44. cmp AL, -1
  45. je BREAK
  46. inc BX
  47. loop COUNTER
  48. BREAK:
  49. mov AX, DX
  50. cmp AX, -1
  51. je No
  52. jmp Yes
  53. NO:
  54. lea DX, ErrorStr
  55. mov AH, 09h
  56. int 21h
  57. Yes:
  58. lea DX, OutStr
  59. mov AH, 09h
  60. int 21h
  61. mov DX, BX
  62. int 21h
  63. quit:
  64. exitcode 0
  65. SEARCH proc near
  66. pop CX ;длина строки
  67. pop DX ;подстрока
  68. pop BX ;строка
  69. mov SI, BX
  70. mov DI, DX
  71. xor DX, DX
  72. SEAR:
  73. inc DL
  74. lodsb
  75. cmp AL, [DI]
  76. jne STOP
  77. repne cmpsb
  78. jne STOP
  79. jmp EXIT
  80. STOP: loop SEAR
  81. mov AL, -1
  82. EXIT:
  83. mov AL, DL
  84. ret
  85. SEARCH endp
  86. end

Решение задачи: «Найти количество вхождений подстроки в строку»

textual
Листинг программы
  1. ;строка(29)
  2. jmp  yes
  3.  
  4. ; в строке(61)
  5. xor  ax,ax
  6. int  16h
  7. mov  ax,4c00h
  8. int  21h

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы