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


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


Команда аналогична командам МП 86 lodb и lodsw, но позволяет загрузить из строки, адресуемой через регистры DS:ESI (DS:SI для 16-разрядных приложений), двойное слово в регистр ЕАХ.

Пример


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

dat dd 12789,200000,550000,8000000

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

mov SI,offset dat

add SI, 4*3 ;DS:SI -> 4-й элемент массива чисел

lodsd ;EAX=8000000

LOOP Циклическое выполнение, пока содержимое СХ не равно нулю


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

Пример 1


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

array dw 4096 dup (?) ;Массив из 4096 слов

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

lea BX,array ;ВХ -> array

xor SI,SI ;SI=0

mov CX,4096 ;Счетчик повторений

mov AX,1 ;Число-заполнитель

array: mov [BX] [SI],AX ;Очистка элемента массива

inc SI ;Сдвиг к следующему

inc SI ;слову массива

loop array ;Повторить СХ раз

Пример 2


mov CX,20

delay :loop delay ;Небольшая задержка

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

Пример


mov ЕСХ,О

zzzz: db 67h ;Префикс замены размера адреса

loop zzzz ;Цикл из 232: шагов, реализующий

;программную задержку порядка минут

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


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




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



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