LEA SI, LINE_1 ; SI=адресу начала строки
;* начало цикла *
XOR CX, CX ; CX=0
CountCycle:
MOV AL, [SI] ; AL=очередному символу строки
OR AL, AL ; AL=0?
JZ SHORT EndCountCycle ; да - выход из цикла подсчета
INC SI ; нет - SI=SI+1
;* проверка на диапазон 041h - 05Ah (заглавные латинские буквы) *
CMP AL, 041h
JB SHORT CountCycle ; переход если код символа<041h
CMP AL, 05Ah
JA SHORT SmallSymbol ; переход если код символа>05Ah
;* символ в диапазоне 041h - 05Ah (заглавные латинские буквы) *
INC CX ; СХ=СХ+1
JMP SHORT CountCycle ; переход к проверке след.символа строки
;* проверка на диапазон 061h - 07Ah (строчные латинские буквы) *
SmallSymbol:
CMP AL, 061h
JB SHORT CountCycle ; переход если код символа<061h
CMP AL, 07Ah
JA SHORT CountCycle ; переход если код символа>07Ah
;* символ в диапазоне 061h - 07Ah (строчные латинские буквы) *
INC CX ; СХ=СХ+1
JMP SHORT CountCycle ; переход к проверке след.символа строки
EndCountCycle:
[asm] Кол-во латинских букв
Нужна Ваша помощь. Необходимо написать на ассемблере ф-цию для подсчета количества латинских букв в строке s..
Спасибо)
То есть строка может содержать и не латинские буквы??...Или просто посчитать количество букв в строке (если они все латинские)??
Необх. написать ф-цию на встроенном asm (сама прога на с++), которая будет считать кол-во лат. букв.
А потом, посчитав буквы, сравнить 5 строк (длина не больше 10) и найти ту, где лат. букв больше всего О_О
Вот фрагмент на АСМе (ТАСМ), который это делает. Вход - адрес начала строки в SI, выход - кол-во латинских букв в CX...если надо, могу оформить в виде нормальной процедуры...если что, присылай свой код С++, будем делать вставку
Код: