Сравнить две строки и если в них есть разные буквы, то записать эти буквы в третью строку - 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 выводим на экран результат сравнения в виде трех строк.
- Завершение работы программы - здесь ничего не происходит, программа просто заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д