Ввод и сравнение двух строк - Assembler

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

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

Всем снова здрасти! Поможете с задачей? "Ввести с клавиатуры две строки символов(6-7 символов нужно ввести), одна в основном сегменте, вторая в ES. Сравнить строки, не совпадающие символы строки приемника заменить на символ "5". Вывести на экран число не совпадающих символов и вывести новую строку". Почему-то препод дал задание, которое НИКТО из группы не знает как составить для него задание.
Вот пытался сделать код хотя бы для ввода символов в строку. Выводит строку "Введите строку а" и потом символы русско-латинские, среди которых можно найти "Ошибка при вводе числаПереполнениеНЕТЦИФРЫu".
Листинг программы
  1. include io.asm
  2. Sseg segment stack
  3. db 256 dup (?)
  4. Sseg ends
  5. Dseg segment
  6. str1 dw 6 dup (?) ;
  7. str2 dw 6 dup (?) ;
  8. str3 db 0dh,0ah,'‚Vvedite stroky a:'
  9. str4 db 0dh,0ah,'‚Vvedite stroky b:''
  10. Dseg ends
  11. Cseg segment
  12. assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
  13. start:
  14. MOV AX,Dseg
  15. MOV DS,AX
  16. MOV ES,AX
  17. LEA DX,str3
  18. MOV AH,9H
  19. INT 21H
  20. MOV CX,6
  21. m1:MOV SI,0
  22. INCH str1[SI]
  23. INC SI
  24. LOOP m1
  25. LEA DX,str4
  26. MOV AH,9H
  27. INT 21H
  28. MOV CX,6
  29. m2:MOV SI,0
  30. INCH str2[SI]
  31. INC SI
  32. LOOP m2
  33. Cseg ends
  34. end start

Решение задачи: «Ввод и сравнение двух строк»

textual
Листинг программы
  1. include io.asm
  2. Sseg segment stack
  3. db 256 dup (?)
  4. Sseg ends
  5.  
  6. Dseg segment
  7. a db 6 dup (?)  ;
  8. b db 6 dup (?)  ;
  9.  
  10. str1 db 'Введите строку А'
  11. str2 db 'Введите строку B'
  12. Dseg ends
  13.  
  14. Cseg segment
  15. assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
  16. start:
  17. MOV AX,Dseg
  18. MOV DS,AX
  19. MOV ES,AX
  20.  
  21. LEA DX,str1
  22. MOV AH,9H
  23. INT 21H
  24. MOV CX,6
  25. MOV SI,0
  26. m1:INCH a[SI]
  27. INC SI
  28. LOOP m1
  29.  
  30. LEA DX,str2
  31. MOV AH,9H
  32. INT 21H
  33. MOV CX,6
  34. MOV SI,0
  35. m2:INCH b[SI]
  36. INC SI
  37. LOOP m2
  38.  
  39. MOV AX,4C00H
  40. INT 21H
  41. Cseg ends
  42. end start

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

Этот код на языке Assembler выполняет ввод двух строк с помощью функции 9H и сравнивает их. Вот список действий:

  1. Код инициализирует сегмент стека Sseg и размещает в нём стек размером 256 байт.
  2. Код инициализирует сегмент данных Dseg и размещает в нём массивы a и b размером 6 байт каждый.
  3. Код размещает в сегменте данных строку str1, которая содержит текст 'Введите строку А'.
  4. Код размещает в сегменте данных строку str2, которая содержит текст 'Введите строку B'.
  5. Код переносит сегмент данных в регистр DS.
  6. Код переносит сегмент данных в регистр ES.
  7. Код размещает указатель на начало строки str1 в регистре DX.
  8. Код использует функцию 9H для вывода строки str1 с помощью регистра DX.
  9. Код инициализирует счётчик CX равным 6.
  10. Код инициализирует указатель SI на первый символ строки a.
  11. Код читает первый символ строки a в регистр AH.
  12. Код увеличивает указатель SI на 1.
  13. Код повторяет шаги 11 и 12, пока не будут прочитаны все символы строки a.
  14. Код размещает указатель на начало строки str2 в регистре DX.
  15. Код использует функцию 9H для вывода строки str2 с помощью регистра DX.
  16. Код инициализирует счётчик CX равным 6.
  17. Код инициализирует указатель SI на первый символ строки b.
  18. Код читает первый символ строки b в регистр AH.
  19. Код увеличивает указатель SI на 1.
  20. Код повторяет шаги 17-19, пока не будут прочитаны все символы строки b.
  21. Код переносит значение регистра AX равное 4C00H в регистр EAX.
  22. Код вызывает прерывание 21H, которое завершает работу программы.

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


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

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

10   голосов , оценка 4.2 из 5

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

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

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