Сравнить две строки и если в них есть разные буквы, то записать эти буквы в третью строку - Assembler
Формулировка задачи:
Дали задачку:
Ввести 2 строки символов и зарезервировать место под третью строку. Сравнить первые две и если в них есть разные буквы то записать эти буквы в третью строку.
Вот код:
Мне чутка подсказали и я переписал код и вот измененный:
Но проблема все осталась:C
Почему происходит такой странный вывод? я не могу разобраться уже 1.5 дня
Вот скрины:
include io.asm Sseg segment stack db 256 dup(?) Sseg ends Dseg segment v1 db 0dh,0ah,'Vvedite stroku N1: $' v2 db 0dh,0ah,'Vvedite stroku N2: $' s1 db 5 dup(?) s2 db 5 dup(?) s3 dw 5 dup(?) Dseg ends Cseg segment assume cs:Cseg,DS:Dseg,SS:Sseg,ES:Dseg start: mov ax,Dseg mov ds,ax mov es,ax cld lea dx,v1 outstr mov cx,5 mov si,0 vvod1: inch s1[si] inc si loop vvod1 newline lea dx,v2 outstr mov cx,5 mov si,0 vvod2: inch s2[si] inc si loop vvod2 lea si,s2 lea di,es:s1 mov cx,5 srav: repe cmps s1,s2 mov bx,0 dec di mov s3[bx],di inc di inc bx loop srav mov cx,5 mov ah, 09 lea dx, s3 int 21h finish Cseg ends end start
include io.asm Sseg segment stack db 256 dup(?) Sseg ends Dseg segment v1 db 0dh,0ah,'Vvedite stroku N1: $' v2 db 0dh,0ah,'Vvedite stroku N2: $' s1 db 5 dup(?) s2 db 5 dup(?) s3 db 6 dup(?) Dseg ends Cseg segment assume cs:Cseg,DS:Dseg,SS:Sseg,ES:Dseg start: mov ax,Dseg mov ds,ax mov es,ax cld lea dx,v1 outstr mov cx,5 mov si,0 vvod1: inch s1[si] inc si loop vvod1 newline lea dx,v2 outstr mov cx,5 mov si,0 vvod2: inch s2[si] inc si loop vvod2 lea si,s2 lea di,es:s1 mov cx,5 mov bx,0 srav: repe cmps s1,s2 dec di mov al, [di] mov s3[bx], al inc di inc bl loop srav mov s3[bx],'$' lea dx,s3 outstr finish Cseg ends end start
Решение задачи: «Сравнить две строки и если в них есть разные буквы, то записать эти буквы в третью строку»
textual
Листинг программы
include io.asm Sseg segment stack db 256 dup(?) Sseg ends Dseg segment v1 db 0dh,0ah,'Vvedite stroku N1: $' v2 db 0dh,0ah,'Vvedite stroku N2: $' s1 db 5 dup(?) s2 db 5 dup(?) s3 db 5 dup(?), '$' Dseg ends Cseg segment assume cs:Cseg,DS:Dseg,SS:Sseg,ES:Dseg start: mov ax,Dseg mov ds,ax mov es,ax cld lea dx,v1 outstr mov cx,5 mov si,0 vvod1: inch s1[si] inc si loop vvod1 newline lea dx,v2 outstr mov cx,5 mov di,0 vvod2: inch s2[di] inc di loop vvod2 lea si,s1 lea di,es:s2 mov cx,5 mov bx,0 srav: repe cmps s1,s2 jne p1 p1: dec si lods s1 mov s3[bx], al inc si inc bl loop srav exit: lea dx,s3 outstr finish Cseg ends end start
Объяснение кода листинга программы
- Включаем файл io.asm - это файл-библиотека ввода-вывода, который содержит процедуры для работы с консолью.
- Создаем сегменты данных Sseg и Dseg - в сегменте Sseg будет стек, а в сегменте Dseg будут размещены переменные.
- Переменные v1 и v2 - это строки, в которые считываются две строки от пользователя.
- Переменные s1, s2 и s3 - это строки, в которые будут записываться результаты сравнения.
- Начальная установка сегментов данных и стека - сегмент данных устанавливается в Dseg, а сегмент стека - в Sseg.
- Вывод первой строки на экран - с помощью процедуры outstr выводим на экран первую строку для ввода.
- Считывание первой строки от пользователя - с помощью цикла vvod1 считываем 5 символов из первой строки и записываем их в переменную s1.
- Вывод второй строки на экран - с помощью процедуры outstr выводим на экран вторую строку для ввода.
- Считывание второй строки от пользователя - с помощью цикла vvod2 считываем 5 символов из второй строки и записываем их в переменную s2.
- Сравнение символов двух строк - с помощью цикла srav сравниваем символы двух строк. Если символы не совпадают, то записываем их в переменную s3.
- Вывод результата на экран - с помощью процедуры outstr выводим на экран результат сравнения в виде трех строк.
- Завершение работы программы - здесь ничего не происходит, программа просто заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д