Вывести на экран символы, которые содержатся в обеих строках - Assembler

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

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

Здравствуйте! Нужна помощь с программой. Пишу под DOS. Условие: С клавиатуры вводятся две строки, вывести на экран символы, которые содержатся в обеих строках. Вот мой код, работает неправильно, не совсем разобрался с регистром si, а точнее тем, как с ним взаимодействовать.
Листинг программы
  1. data segment
  2. string1 db 100,100 dup ('$') ; буфер ввода
  3. string2 db 100,100 dup ('$') ; буфер ввода
  4. string3 db 100,100 dup ('$') ; буфер вывода
  5. len1 dw ?
  6. len2 dw ?
  7. data ends
  8. code segment
  9. assume cs:code, ds:data
  10. START:
  11. mov ax, data
  12. mov ds, ax
  13. mov dl, 0ah
  14. mov ah, 2
  15. int 21h
  16. lea dx, string1
  17. mov ah, 0ah
  18. int 21h
  19. xor ah, ah
  20. lea bx, string1+2
  21. xor cx, cx
  22. mov cl, string1+1
  23. xor si, si
  24. mov len1, cx
  25. BB1:
  26. mov al, [bx]
  27. mov string1[si] , al
  28. inc si
  29. inc bx
  30. loop BB1 ; окончание ввода 1й строки
  31. mov dl, 0ah
  32. mov ah, 2
  33. int 21h
  34. lea dx, string2
  35. mov ah, 0ah
  36. int 21h
  37. xor ah, ah
  38. lea bx, string2+2
  39. xor cx, cx
  40. mov cl, string2+1
  41. xor si, si
  42. mov len2, cx
  43. BB2:
  44. mov al, [bx]
  45. mov string2[si] , al
  46. inc si
  47. inc bx
  48. loop BB2 ; окончание ввода 2й строки
  49. mov dl, 0ah
  50. mov ah, 2
  51. int 21h
  52. xor bx, bx
  53. xor si, si
  54. xor di, di
  55. xor dx, dx
  56. compare:
  57. cmp si, len1 ; как только дойдем до конца первой строки, выход
  58. je OUT1
  59. mov ah, string1[si] ; в ah - элемент из 1й строки
  60. cmp1:
  61. mov al, string2[di] ; в al - элемент из 2й строки
  62. cmp ah, al
  63. jne NO
  64. mov string3[si], al ; если совпали, заношу элемент в строку на вывод
  65. jmp NEXT_SI
  66. NO:
  67. cmp di, len2
  68. jl NEXT_DI
  69. NEXT_SI:
  70. inc si
  71. xor di, di
  72. jmp compare
  73. NEXT_DI:
  74. inc di
  75. jmp cmp1
  76. loop compare
  77. OUT1:
  78. mov string3[si], '$'
  79. xor si, si
  80. lea dx, string3
  81. mov ah, 09h
  82. int 21h
  83. mov ah, 10h
  84. int 16h
  85. mov ax, 4C00h
  86. int 21h
  87. code ends
  88. end START

Решение задачи: «Вывести на экран символы, которые содержатся в обеих строках»

textual
Листинг программы
  1.     mov ax, ds
  2.      mov es, ax

Объяснение кода листинга программы

  1. Создается переменная ax, которая будет содержать значение текущего сегмента данных (ds - data segment).
  2. Значение переменной ax копируется в переменную es, которая будет использоваться в качестве сегмента данных для записи данных.

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


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

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

7   голосов , оценка 4.286 из 5

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

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

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