Найти длину строки - 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 количество символов строки без символа '$'

Объяснение кода листинга программы

  1. mov cx,0FFFFh — устанавливает максимальное 16-разрядное число в регистре CX.
  2. mov al,'$' — ищет терминатор строки в DOS в регистре AL.
  3. lea di, str — в регистр DI записывается адрес начала строки.
  4. repne scasb — выполняет поиск до тех пор, пока не найдет символ '$'.
  5. not cx — инвертирует значение регистра CX, тем самым получая количество символов строки без символа '$'.

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы