masm
.model small
.stack 256
.data
NAME1 db 'абFвг'
NAME2 db 'абGвг'
.code
main:
mov ax,@DATA
mov ds,ax
mov es,ax
xor ax,ax
call G10CMPS
G10CMPS PROC NEAR
CLD
MOV CX,5
LEA SI,NAME1
LEA DI,NAME2
REPE CMPSB ; Сравнить NAME1 и NAME2
JE G20 ;равны
MOV BH,02
jmp short g30
G20:
mov bh,01
G30: RET
G10CMPS endp
exit:
mov ax,4c00h
int 21h
end main
Сравнение строк на асме
написал процедуру для сравнение строк, но мне надо учесть сравнение только русского алфавита, т е англ символы должны пропускаться, кто подскажет как сделать. Код ниже:
Код:
lea si, name1
lea di, name1
mov cx, 5
.0:
lodsb
cmp al, 'a'
jb .1
cmp al, 'z'
ja .1
jmp .2
.1:
cmp al, 'A'
jb .3
cmp al, 'Z'
ja .3
.2:
mov al, ' ' ; На какой символ заменяем
.3:
stosb
loop .0
lea di, name1
mov cx, 5
.0:
lodsb
cmp al, 'a'
jb .1
cmp al, 'z'
ja .1
jmp .2
.1:
cmp al, 'A'
jb .3
cmp al, 'Z'
ja .3
.2:
mov al, ' ' ; На какой символ заменяем
.3:
stosb
loop .0
Аналогично для второй строки
Или можно немного проще:накатать таблицу(максимум 256 символов) для замены неугодных символов на что-то с помощью Xlat,а затем уже сравнивать полученные строки
нацинальные символы находятся во второй половине таблицы ascii кодов , то есть больше чем 127 .
однако вариант с xlatb более правильный и универсальный .