Ввести 2 строки и вывести(неправильная запись массивов) - Assembler

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

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

Я удалил из кода все лишние макросы, чтобы выделить ту часть, где возникают проблемы. Я пытаюсь заполнить 2 строкового массива с помощью макроса InputString, каждая строка читается пока не встретит клавишу Enter. Когда я пытаюсь вывести эти 2 строки, то выясняется, что 2 строка записывается еще и в первую, заменяя собой ее элементы, начиная с 1 элемента.
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. str1 db dup 255 (?)
  5. str2 db dup 255 (?)
  6. c1 db ?
  7. c2 db ?
  8. msg1 db 10,13,"Input sting: $"
  9. msg2 db 10,13,10,13,"Input substring: $"
  10. msg3 db 10,13,"Position : $"
  11. none db 10,"none $"
  12. msgErFind db 10,"Substring is not found! $"
  13. Press db 10,13,10,13,"Press any key...$"
  14. msgErLen db 10,13,"Error! Substring is longer than string. $"
  15. out1 db 10,13,"sting: $"
  16. out2 db 10,13,"substing: $"
  17. i dw 0
  18. j dw 0
  19. n1 dw 0
  20. p dw 0
  21. n2 dw 0
  22. n3 dw 0
  23. f dw 0
  24. .code
  25. exit macro
  26. lea dx,Press
  27. mov ah,09h
  28. int 21h
  29. mov ah,00h
  30. int 16h
  31. mov ax,4c00h
  32. int 21h
  33. endm
  34. inputString macro str, msg, i
  35. lea dx,msg
  36. mov ah,09h
  37. int 21h
  38. local while
  39. local break
  40. mov si,0
  41. while:
  42. mov ah,01h
  43. mov al,00h
  44. int 21h
  45. cmp al,0Dh
  46. je break
  47. mov [str+si],al
  48. inc si
  49. jmp while
  50. break:
  51. mov i,si
  52. endm
  53.  
  54. outp macro str, msg, n
  55. LOCAL put
  56. local exit
  57. lea dx,msg
  58. mov ah,09h
  59. int 21h
  60. mov cx,n ;cikl po 8 elementam
  61. mov si,0
  62. put:
  63. mov ah,02h ;func vivoda na ekran
  64. mov dl,[str+si];beret element massiva
  65. int 21h
  66. inc si
  67. loop put
  68. exit:
  69. endm
  70.  
  71. start:
  72. mov ax,@data
  73. mov ds,ax
  74. inputString str1,msg1,n1
  75. inputString str2,msg2,n2
  76.  
  77. ;****************************************
  78. outp str1,out1,n1
  79. outp str2,out2,n2
  80. ;*******************************************
  81.  
  82. next:
  83.  
  84. exit
  85. end start
Скриншот того как это выглядит я приложил(на то, что выводится дальше не обращайте внимания - там холостой ход)

Решение задачи: «Ввести 2 строки и вывести(неправильная запись массивов)»

textual
Листинг программы
  1. str1    db 255 dup(?)
  2. str2    db 255 dup(?)

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


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

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

8   голосов , оценка 3.625 из 5

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

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

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