.model tiny, C
.data
;Зададим два буфера для ввода строки по ф-и 0ah
max1 db 129 ;максимальная длина строки1
len1 db 0 ;реальная длина строки1
buf1 db 129 dup (?) ;сама строка1, в конце код 0dh
max2 db 129 ;максимальная длина строки2
len2 db 0 ;реальная длина строки2
buf2 db 129 dup (?) ;сама строка1, в конце код 0dh
Prompt1 db 'Enter first string: $' ;Подсказка 1
Prompt2 db 0dh,0ah,'Enter second string: $' ;Подсказка 2
Msg1 db 0dh,0ah,'Strings are equals!$' ;Сообщение, что строки равны
Msg2 db 0dh,0ah,'Strings are NOT equals!$' ;не равны
Any db 0dh,0ah,'Press any key$' ;понятно :)
.code
.startup ;точка входа
.286
;Вводим первую строку
call GetString, offset prompt1, offset max1
;Вводим вторую строку
call GetString, offset prompt2, offset max2
;сравниваем
call CmpStrings, offset buf1, offset buf2
;сообщение, что равны
lea dx, msg1
;результат в ax (=0 -> равны)
test ax, ax
jz PrMessage
;сообщение, что не равны
lea dx, msg2
PrMessage:
mov ah, 9
int 21h ;выводим
lea dx, Any
mov ah, 9
int 21h ;Any key
mov ah, 0
int 16h ;Ждем any key
mov ax, 4c00h
int 21h ;выходим
;вводим строку
;параметры:
;pPrompt - адрес строки подсказки
;pData - адрес буфера для ввода
GetString proc pPrompt:word, pData:word
mov dx, pPrompt
mov ah, 9
int 21h ;подсказка
mov dx, pData
mov ah, 0ah
int 21h ;вводим
ret
GetString endp
;сравниваем две строки по адресам pStr1 и pStr2
;результат: ax=0 - равны, ax=1 - не равны
CmpStrings proc pStr1:word, pStr2:word
mov ax, 1 ;считаем пока, что не равны
mov si, pStr1 ;адрес первой строки
mov di, pStr2 ;адрес второй строки
CmpLoop:
cmpsb ;сравниваем один байт [ds:si] и [es:di],si=si+1,di=di+1
jne CmpRet ;если не равно, сразу на выход
cmp byte ptr [si-1], 0dh ;если равно, то проверим проверенный байт,
jne CmpLoop ; дошли ли до конца строк, признаком конца является байт 0dh
xor ax, ax ; и если 0dh и равно, значит строки равны!
CmpRet:
ret
CmpStrings endp
end
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.