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