Найти длину строки - Assembler
Формулировка задачи:
Подскажите, как найти длину строки, если количество символов чётное и нечётное.
Вот так находится, если символов нечётное количество.
.model small .data str dw 'Hello','$' .code xor bx,bx lea di, str len: cmp [di+bx] ,0 jz en inc bx jmp len en: mov ax, bx; в ax длина строки end
Решение задачи: «Найти длину строки»
textual
Листинг программы
mov cx,0FFFFh; максимальное 16-разрядное число mov al,'$'; ищем терминатор строки в DOS lea di, str; в регистр DI адрес начала строки repne scasb; ищем not cx; в регистре CX количество символов строки без символа '$'
Объяснение кода листинга программы
- mov cx,0FFFFh — устанавливает максимальное 16-разрядное число в регистре CX.
- mov al,'$' — ищет терминатор строки в DOS в регистре AL.
- lea di, str — в регистр DI записывается адрес начала строки.
- repne scasb — выполняет поиск до тех пор, пока не найдет символ '$'.
- not cx — инвертирует значение регистра CX, тем самым получая количество символов строки без символа '$'.