Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сравнение строк на асме

1.8K
14 июня 2010 года
Death Knight
139 / / 19.02.2006
написал процедуру для сравнение строк, но мне надо учесть сравнение только русского алфавита, т е англ символы должны пропускаться, кто подскажет как сделать. Код ниже:

Код:
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
399
15 июня 2010 года
KIV
432 / / 20.01.2009
Варианта два: либо перед сравнением заменить все не русские символы на один и тот же. Либо отказаться от использования rep cmpsb и сравнивать посимвольно при этом пропуская не русские буквы. Насчёт замены могу набросать вот такой код:
Код:
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

Аналогично для второй строки
7
15 июня 2010 года
@pixo $oft
3.4K / / 20.09.2006
Или можно немного проще:накатать таблицу(максимум 256 символов) для замены неугодных символов на что-то с помощью Xlat,а затем уже сравнивать полученные строки
252
16 июня 2010 года
koderAlex
1.4K / / 07.09.2005
можно ещё проще .
нацинальные символы находятся во второй половине таблицы ascii кодов , то есть больше чем 127 .
однако вариант с xlatb более правильный и универсальный .
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог