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

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

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

Всем снова здрасти! Поможете с задачей? "Ввести с клавиатуры две строки символов(6-7 символов нужно ввести), одна в основном сегменте, вторая в ES. Сравнить строки, не совпадающие символы строки приемника заменить на символ "5". Вывести на экран число не совпадающих символов и вывести новую строку". Почему-то препод дал задание, которое НИКТО из группы не знает как составить для него задание.
Вот пытался сделать код хотя бы для ввода символов в строку. Выводит строку "Введите строку а" и потом символы русско-латинские, среди которых можно найти "Ошибка при вводе числаПереполнениеНЕТЦИФРЫu".
include io.asm
Sseg segment stack
db 256 dup (?)
Sseg ends
 
Dseg segment
str1 dw 6 dup (?)  ;
str2 dw 6 dup (?)  ;
 
str3 db 0dh,0ah,'‚Vvedite stroky a:'
str4 db 0dh,0ah,'‚Vvedite stroky b:''
Dseg ends
 
Cseg segment
assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
start:
MOV AX,Dseg
MOV DS,AX
MOV ES,AX
 
LEA DX,str3
MOV AH,9H
INT 21H
MOV CX,6
m1:MOV SI,0
INCH str1[SI]
INC SI
LOOP m1
 
LEA DX,str4
MOV AH,9H
INT 21H 
MOV CX,6
m2:MOV SI,0
INCH str2[SI]
INC SI
LOOP m2
 
Cseg ends
end start

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

textual
Листинг программы
include io.asm
Sseg segment stack
db 256 dup (?)
Sseg ends
 
Dseg segment
a db 6 dup (?)  ;
b db 6 dup (?)  ;
 
str1 db 'Введите строку А'
str2 db 'Введите строку B'
Dseg ends
 
Cseg segment
assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
start:
MOV AX,Dseg
MOV DS,AX
MOV ES,AX
 
LEA DX,str1
MOV AH,9H
INT 21H
MOV CX,6
MOV SI,0
m1:INCH a[SI]
INC SI
LOOP m1
 
LEA DX,str2
MOV AH,9H
INT 21H 
MOV CX,6
MOV SI,0
m2:INCH b[SI]
INC SI
LOOP m2
 
MOV AX,4C00H
INT 21H 
Cseg ends
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