Программа посчета нулей в числах и запись их в файл - Assembler

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

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

Доброго времени суток. Предупреждение - мой уровень ассемблера примерно равен 0. Особенностей этого языка не знаю, поэтому попрошу сильно не судить. Код мой, алгоритм тоже. Частично рабочий. Проблема в том, что заносит в файл В1, В2 и В3 только первое число, все остальные игнор. задание: Разработать программу, которая отслеживает появление указанных цифр в числовом файле. Создать файл В1 с четырехзначных чисел путем ввода с клавиатуры, образуя файл В2 с цифр файла В1, имеющих один ноль, образуя файл В3 с цифр файла В1, имеющих два нуля и создать файл В4 с цифр файла В1, имеющих три нуля. Готовый код у меня есть, только вот с самим занесением в файлы В2, В3, В4 проблема. Заносит только первое Четырехцифровое число в эти три файла, причем не обращает внимание на нуле. А должно было бы) Комментируемый код:
Листинг программы
  1. org 100h
  2. jmp start
  3. b1 db 'b1.txt',0
  4. b2 db 'b2.txt',0
  5. b3 db 'b3.txt',0
  6. b4 db 'b4.txt',0
  7. k db 0 ;счетчик нулей
  8. handle dw ?
  9. handleb2 dw ?
  10. handleb3 dw ?
  11. handleb4 dw ?
  12. bufer db 50 DUP (?)
  13. bufer2 db 50 DUP (?)
  14. size = $ - offset bufer
  15. size2 = $ - offset bufer2
  16. start:
  17. mov ax, cs
  18. mov dx, ax
  19. mov es, ax
  20. mov ah, 3ch
  21. mov cx, 0
  22. mov dx, offset b1 ;создание файла В1
  23. int 21h
  24. mov handle, ax
  25. ;--------scan, check, write in file----------
  26. level1:
  27. mov ah,1
  28. int 21h ;считывание чисел с клавиатури
  29. mov dl,al
  30. cmp al,13 ;проверка на Enter
  31. je call write ;если да - переход на метку записи файла
  32. mov [bufer+si], al ;запис введеных даних в масив
  33. add si, 1
  34. jne level1
  35. level2:
  36. call b2proc
  37. call b3proc ;создание 3 файлов "В"
  38. call b4proc
  39. call read ;процедура считывания с файла В1
  40. ;---------------------------------------------------proc--------------
  41. ;------------write to file b1-----------
  42. write proc
  43. mov ah, 42h
  44. mov bx, handle
  45. mov al, 0
  46. mov cx, 0
  47. mov dx, 0
  48. int 21h
  49. inc k
  50. mov ah, 40h
  51. mov bx, handle
  52. mov dx, offset bufer ;Процедура записи в В1
  53. mov cx, size
  54. int 21h
  55. mov ah, 3eh
  56. mov bx, handle
  57. int 21h
  58. write endp
  59. ;-----------create file b2, b3, b4------------
  60. b2proc proc
  61. mov ah, 3ch
  62. mov cx, 0
  63. mov dx, offset b2
  64. int 21h
  65. mov handleb2, ax
  66. b2proc endp
  67. b3proc proc
  68. mov ah, 3ch
  69. mov cx, 0
  70. mov dx, offset b3 ;создание 3 файлов В
  71. int 21h
  72. mov handleb3, ax
  73. b3proc endp
  74. b4proc proc
  75. mov ah, 3ch
  76. mov cx, 0
  77. mov dx, offset b4
  78. int 21h
  79. mov handleb4, ax
  80. b4proc endp
  81. ;----------read the file b1---------
  82. read proc
  83. MOV AH,3DH
  84. MOV AL,0
  85. MOV DX,OFFSET b1
  86. INT 21H
  87. MOV HANDLE, AX
  88. MOV AH,3FH
  89. MOV BX,HANDLE
  90. MOV CX,512
  91. MOV DX,OFFSET bufer ;считывание с файла В1
  92. INT 21H
  93. CMP AX,512
  94. read endp
  95. ;----------main logic----------
  96. compare proc ;цикл проверки считаних чисел с В1 і записи в другие файлы
  97. mov cx, 50
  98. mov si, 0
  99. mov di, 0
  100. input:
  101. mov al, [bufer+si] ;заносим в регистр al si член масива
  102. cmp al, 0 ; проверяем на нуль
  103. je call increment ; если 0 - инкрементуєм счетчик нуля
  104. mov [bufer2+di],al ;записываем символ в буфер 2
  105. inc si
  106. inc di
  107. cmp di, 4 ; если di = 4 -
  108. je call crossroads ; - вызываем процедуру "crossroads"
  109. loop input
  110. compare endp
  111. ;----------inc k-----------
  112. increment proc
  113. inc k ;процедура инкремента счетчика нулей
  114. increment endp
  115. ;----------crossroads----------
  116. crossroads proc ;
  117. cmp k, 1 ;если к=1
  118. je call writeb2 ;вызываем запись в файл В2
  119. cmp k, 2 ;если к=2
  120. je call writeb3 ;вызываем запись в файл В3
  121. cmp k, 3 ;если к=3
  122. je call writeb3 ;вызываем запись в файл В2
  123. mov k, 0
  124. mov di, 0 ;обнуляєм счетчики
  125. inc si ;инкремент си чтоб пропустить пробел
  126. ;(числа в файл заносяться через "пробел")
  127. crossroads endp
  128. ;---------write to files------------
  129. ;---------b2---------
  130. writeb2 proc ;функции записи в файли числа с буфера2
  131. mov ah, 42h
  132. mov bx, handleb2
  133. mov al, 0
  134. mov cx, 0
  135. mov dx, 0
  136. int 21h
  137. inc k
  138. mov ah, 40h
  139. mov bx, handleb2
  140. mov dx, offset bufer2
  141. mov cx, size2
  142. int 21h
  143. mov ah, 3eh
  144. mov bx, handleb2
  145. int 21h
  146. writeb2 endp
  147. ;---------b3---------
  148. writeb3 proc
  149. mov ah, 42h
  150. mov bx, handleb3
  151. mov al, 0
  152. mov cx, 0
  153. mov dx, 0
  154. int 21h
  155. inc k
  156. mov ah, 40h
  157. mov bx, handleb3
  158. mov dx, offset bufer2
  159. mov cx, size2
  160. int 21h
  161. mov ah, 3eh
  162. mov bx, handleb3
  163. int 21h
  164. writeb3 endp
  165. ;---------b4---------
  166. writeb4 proc
  167. mov ah, 42h
  168. mov bx, handleb4
  169. mov al, 0
  170. mov cx, 0
  171. mov dx, 0
  172. int 21h
  173. inc k
  174. mov ah, 40h
  175. mov bx, handleb4
  176. mov dx, offset bufer2
  177. mov cx, size2
  178. int 21h
  179. mov ah, 3eh
  180. mov bx, handleb4
  181. int 21h
  182. writeb4 endp
  183. ret

Решение задачи: «Программа посчета нулей в числах и запись их в файл»

textual
Листинг программы
  1.    inc Byte Ptr [b1+4]

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


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

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

6   голосов , оценка 4.5 из 5

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

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

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