Вывести на экран символы, которые содержатся в обеих строках - Assembler
Формулировка задачи:
Здравствуйте! Нужна помощь с программой. Пишу под DOS. Условие: С клавиатуры вводятся две строки, вывести на экран символы, которые содержатся в обеих строках. Вот мой код, работает неправильно, не совсем разобрался с регистром si, а точнее тем, как с ним взаимодействовать.
data segment
string1 db 100,100 dup ('$') ; буфер ввода
string2 db 100,100 dup ('$') ; буфер ввода
string3 db 100,100 dup ('$') ; буфер вывода
len1 dw ?
len2 dw ?
data ends
code segment
assume cs:code, ds:data
START:
mov ax, data
mov ds, ax
mov dl, 0ah
mov ah, 2
int 21h
lea dx, string1
mov ah, 0ah
int 21h
xor ah, ah
lea bx, string1+2
xor cx, cx
mov cl, string1+1
xor si, si
mov len1, cx
BB1:
mov al, [bx]
mov string1[si] , al
inc si
inc bx
loop BB1 ; окончание ввода 1й строки
mov dl, 0ah
mov ah, 2
int 21h
lea dx, string2
mov ah, 0ah
int 21h
xor ah, ah
lea bx, string2+2
xor cx, cx
mov cl, string2+1
xor si, si
mov len2, cx
BB2:
mov al, [bx]
mov string2[si] , al
inc si
inc bx
loop BB2 ; окончание ввода 2й строки
mov dl, 0ah
mov ah, 2
int 21h
xor bx, bx
xor si, si
xor di, di
xor dx, dx
compare:
cmp si, len1 ; как только дойдем до конца первой строки, выход
je OUT1
mov ah, string1[si] ; в ah - элемент из 1й строки
cmp1:
mov al, string2[di] ; в al - элемент из 2й строки
cmp ah, al
jne NO
mov string3[si], al ; если совпали, заношу элемент в строку на вывод
jmp NEXT_SI
NO:
cmp di, len2
jl NEXT_DI
NEXT_SI:
inc si
xor di, di
jmp compare
NEXT_DI:
inc di
jmp cmp1
loop compare
OUT1:
mov string3[si], '$'
xor si, si
lea dx, string3
mov ah, 09h
int 21h
mov ah, 10h
int 16h
mov ax, 4C00h
int 21h
code ends
end STARTРешение задачи: «Вывести на экран символы, которые содержатся в обеих строках»
textual
Листинг программы
mov ax, ds mov es, ax
Объяснение кода листинга программы
- Создается переменная
ax, которая будет содержать значение текущего сегмента данных (ds - data segment). - Значение переменной
axкопируется в переменнуюes, которая будет использоваться в качестве сегмента данных для записи данных.