Ввод и сравнение двух строк - 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 и сравнивает их. Вот список действий:
- Код инициализирует сегмент стека Sseg и размещает в нём стек размером 256 байт.
- Код инициализирует сегмент данных Dseg и размещает в нём массивы a и b размером 6 байт каждый.
- Код размещает в сегменте данных строку str1, которая содержит текст 'Введите строку А'.
- Код размещает в сегменте данных строку str2, которая содержит текст 'Введите строку B'.
- Код переносит сегмент данных в регистр DS.
- Код переносит сегмент данных в регистр ES.
- Код размещает указатель на начало строки str1 в регистре DX.
- Код использует функцию 9H для вывода строки str1 с помощью регистра DX.
- Код инициализирует счётчик CX равным 6.
- Код инициализирует указатель SI на первый символ строки a.
- Код читает первый символ строки a в регистр AH.
- Код увеличивает указатель SI на 1.
- Код повторяет шаги 11 и 12, пока не будут прочитаны все символы строки a.
- Код размещает указатель на начало строки str2 в регистре DX.
- Код использует функцию 9H для вывода строки str2 с помощью регистра DX.
- Код инициализирует счётчик CX равным 6.
- Код инициализирует указатель SI на первый символ строки b.
- Код читает первый символ строки b в регистр AH.
- Код увеличивает указатель SI на 1.
- Код повторяет шаги 17-19, пока не будут прочитаны все символы строки b.
- Код переносит значение регистра AX равное 4C00H в регистр EAX.
- Код вызывает прерывание 21H, которое завершает работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д