Здравствуйте!
Не могу понять в чем ошибка в программе написана на Assembler для Turbo_Dedugger..Надо Сравнить строки и выявить не совпадающие символы.
Вот код программы:
Код:
MODEL small
STACK 256
.data
cod1 db 3ah
match db 0ah, 0dh, 'Strings are equal ','$'
failed db 0ah, 0dh, 'Strings are not equal:mistakes - ','$'
string1 db "RGZ_VARIANT_№5_A", 0ah, 0dh, '$' ;Сравниваемая строка_1
string2 db "RGZ_VARIANT_№1_B", '$' ;Сравниваемая строка_2
dest db 64 dup (?) ;строка-приемник несовпавших символов и их адресов
.code
assume ds:@data, es:@data ;привязка DS и ES к сегменту данных
main :
;загрузка сегментных регистров
mov ax, @data
mov ds, ax
mov es, ax
;вывод на экран исходных сравниваемых строк
mov ah, 09h
lea dx, string1
int 21h
lea dx, string2
int 21h
;сброс флага DF – сравнение строк
;в направлении возрастания адресов, т.е. справа налево
cld
lea si, string1 ;загрузка в si смещения адреса строки string1
lea di, string2 ;загрузка в di смещения адреса строки string2
mov cx, 16 ;длина строки для префикса repe
;сравнение строк,пока сравниваемые элементы строк равны, и выход при
;обнаружении несовпавшего элемента
mov bp, 0000 ;переменная для подсчета числа несовпадающих символов
lea bx, dest ;занесение в 'bx'начального адреса массива результатов
cycl :
repe cmps string1, string2
jcxz equal
;cx = 0, то есть,если все элементы строк совпадают то переход по equal
jne not_match ;если обнаружены неравные элементы строк,
;то переход по not_match
equal : cmp bp,0
jnz nos
;вывод на экран сообщения о совпадении строк
mov ah, 09h ;вывод сообщения о совпадении строк
lea dx, match
int 21h
nos: jmp exit ;выход
not_match:
cmp bp,0
jnz nrep
;вывод сообщения о несовпадении строк
mov ah, 09h
lea dx,failed
int 21h
nrep:
;теперь, чтобы обработать несовпавшие элементы в строке,
;необходимо уменьшить значения регистров si и di
dec si
dec di
;занести в al несовпавший символ из первой строки по указателю si
mov al,[si]
;занести в ah несовпавший символ из второй строки по указателю di
mov ah,[di]
;занесение в dest выводимой на экран информации
add bx,bp
mov dl,cod1
mov byte ptr[bx],al ;добавление в dest несовпавшего символа первой строки
mov [bx+1],dl
mov [bx+2],si ;занесение его адреса
mov word ptr[bx+4],0000h
mov byte ptr[bx+6],ah ;добавление в dest несовпавшего символа второй строки
mov [bx+7],dl
mov [bx+8],di ;занесение его адреса
mov word ptr[bx+10],0000h
;переход к адресам следующих несовпадающих символов
add bp,12
;после этого продолжить поиск в строке:
inc si
inc di
jmp cycl
exit :
;выдача на экран несовпадающих символов с их адресами и выход
mov ah, 40h
mov bx, 01h
mov cx,64
lea dx,dest
int 21h
mov ax, 4c00h
int 21h
end main ;конец программы
Помогите плиз уже после завтра сдавать работу на проверку
___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.