Иллюстрированный самоучитель по Assembler


386+ LODSD Загрузка двойного слова из строки - часть 2


Пример


;В полях данных, адресуемых через DS:

command db 80 dup (' ')

;В программном сегменте:

. . . ;Копирование в поле command строки,

;содержимое которой следует анализировать

lea SI, command ;Настроим DS:SI

сld ;Обработка вперед

mov CX,80 ;Обрабатывать не более 80

;байтов

pass: lodsb ;Загрузим в AL очередной

;символ

сmр АL, ' ' ;Пропустим все пробелы в

loopepass ;начале строки

dec SI ;Сдвиг на 1 символ назад

;DS:SI -> первый символ, отличный от пробела

При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того, чтобы в 16-разрядном приложении процессор при выполнении команд loope/loopz использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loope/loopz необходимо указать префикс замены размера адреса 67h.

Пример


mov ЕСХ, 1000000 ;Предельное число шагов

хххх: ... ;Тело цикла

db 67h

loopexxxx

LOOPNE/LOOPNZ Циклическое выполнение, пока не равно/циклическое выполнение, пока не нуль


Оба обозначения представляют собой синонимы и относятся к одной команде. Команда выполняет декремент содержимого регистра СХ, и если оно не равно 0, и флаг ZF сброшен, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128... + 127 байтов. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536. Команда не воздействует на флаги процессора.

Пример


;В полях данных:

command db 80 dup (0)

;В программном сегменте:

. . . ;Копирование в поле command строки,

; содержимое которой следует анализировать

lea SI,command ;Настроим DS:SI

cld ;Обработка вперед

mov CX,80 ;Обрабатывать не более 80

;байтов

slash: lodsb ;Загрузим в AL очередной символ

cmp AL, ' / ' ;Ищем знак ' / '

loopne slash ;во всей строке

;DS:SI -> первый символ за знаком '/'

При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того чтобы в 16-разрядном приложении процессор при выполнении команд loopne/loopnz использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loopne/loopnz необходимо указать префикс замены размера адреса 67h.

Пример


mov ЕСХ,1000000 ;Предельное число шагов

хххх: . . . ;Тело цикла

db 67h

loopne xxxx

386Р+ LSL Загрузка границы сегмента


Команда Isl загружает в первый операнд границу сегмента из дескриптора сегмента, заданного селектором во втором операнде.

В качестве первого операнда команды Isl можно использовать 16- или 32-разрядный регистр общего назначения; в качестве второго - 16- или 32-разрядный регистр общего назначения или 16- или 32-битовое поле памяти.

 




Начало  Назад  Вперед



Книжный магазин