Мегаобучалка Главная | О нас | Обратная связь


LODS/LODSB/LODSW/LODSD



2016-01-02 1115 Обсуждений (0)
LODS/LODSB/LODSW/LODSD 0.00 из 5.00 0 оценок




(LOad String Byte/Word/Double word operands)

Загрузка строки байтов/слов/двойных слов

 

Схема команды: lods источник lodsb lodsw lodsd

Назначение: загрузка элемента из последовательности (цепочки) в регистр-аккумулятор al/ax/eax.

Синтаксис
Алгоритм работы:

  • загрузить элемент из ячейки памяти, адресуемой парой ds:esi/si, в регистр al/ax/eax. Размер элемента определяется неявно (для команды lods) или явно в соответствии с применяемой командой (для команд lodsb, lodsw, lodsd);
  • изменить значение регистра si на величину, равную длине элемента цепочки. Знак этой величины зависит от состояния флага df:
    • df=0 — значение положительное, то есть просмотр от начала цепочки к ее концу;
    • df=1 — значение отрицательное, то есть просмотр от конца цепочки к ее началу.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:
Команды извлекают элемент из ячейки памяти в один из регистров. Перед командой lods можно указать префикс повторения rep, но в этом нет особого смысла, так как обычно эту команду используют в некотором цикле для просмотра некоторой цепочки с элементами фиксированного размера.

str db ...... cld lea si,str lodsb ;загрузить первый байт из str в al

См. также: урок 11 и команды ins/insb/insw/insd, cmps/cmpsb/cmpsw/cmpsd, movs/movsb/movsw/movsd, outs, scas/scasb/scasw/scasd, stos/stosb/stosw/stosd, rep/repe/repz/repne/repnz

LOOP

(LOOP control by register cx)

Управление циклом по cx

 

Схема команды: loop метка

Назначение: организация цикла со счетчиком в регистре cx.

Синтаксис
Алгоритм работы:

  • выполнить декремент содержимого регистра ecx/cx;
  • анализ регистра ecx/cx:
    • если ecx/cx=0, передать управление следующей за loop команде;
    • если ecx/cx=1, передать управление команде, метка которой указана в качестве операнда loop.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:
Команду loop применяют для организации цикла со счетчиком. Количество повторений цикла задается значением в регистре ecx/cx перед входом в последовательность команд, составляющих тело цикла. Помните о двух важных моментах:

  • для предотвращения выполнения цикла при нулевом ecx/cx используйте команду jecxz/jcxz. Если этого не сделать, то при изначально нулевом ecx/cx цикл повторится 4 294 967 295/65 536 раз;
  • смещение метки, являющейся операндом loop, не должно выходить из диапазона -128...+127 байт. Это смещение, как и в командах условного перехода, является относительным от значения счетчика адреса следующей за loop команды.

 

mov cx,10... jcxz m1cycl:;тело цикла loop cyclm1:

См. также: урок 10 и команды jecxz/jcxz, loope/loopz, loopne/loopnz

LOOPE/LOOPZ
LOOPNE/LOOPNZ

(LOOP control by register cx not equal 0 and ZF=1)

(LOOP control by register cx not equal 0 and ZF=0)

Управление циклом по cx c учетом значения флага ZF

 

Схема команды: loope/loopz метка loopne/loopnz метка

Назначение: организация цикла со счетчиком в регистре cx с учетом флага zf.

Синтаксис
Алгоритм работы:

  • выполнить декремент содержимого регистра ecx/cx;
  • проанализировать регистр ecx/cx:
    • если ecx/cx=0, передать управление следующей за loopxx команде;
    • если ecx/cx=1, передать управление команде, метка которой указана в качестве операнда loopxx;
  • анализ флага zf:
    • если zf=0, для команд loope/loopz это означает выход из цикла, для команд loopne/loopnz — переход к началу цикла;
    • если zf=1, для команд loope/loopz это означает переход к началу цикла, для команд loopne/loopnz — выход из цикла.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:
Команды loopxx удобно использовать вместе с командами, которыe в результате своей работы меняют значение флага zf. Типичный пример — команда сравнения cmp.

;найти первый пробел в строке символовstr db 'Найти первый пробел'str_size=$-str... cld mov cx,str_size lea si,strcycl: lodsb cmp al,' ' loopne cycl jcxz m1 ;переход, если пробелов нет dec si ;в si — адрес пробела в строке str...m1

См. также: уроки 8, 10, 11 и команду loop

MOV

(MOVe operand)

Пересылка операнда

 

Схема команды: mov приемник,источник

Назначение: пересылка данных между регистрами или регистрами и памятью.

Синтаксис
Алгоритм работы:
копирование второго операнда в первый операнд.
Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:
Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции:

  • направление пересылки в команде mov всегда справа налево, то есть из второго операнда в первый;
  • значение второго операнда не изменяется;
  • оба операнда не могут быть из памяти (при необходимости можно использовать цепочечную команду movs);
  • лишь один из операндов может быть сегментным регистром;
  • желательно использовать в качестве одного из операндов регистр al/ax/eax, так как в этом случае TASM генерирует более быструю форму команды mov.

 

mov al,5 mov bl,al mov bx,ds

См. также: урок 10 и команды movs, lods/lodsb/lodsw/lodsd, stos/stosb,
stosw/stosd

MOV

(MOVe operand to/from system registers)

Пересылка операнда в системные регистры (или из них)

 

Схема команды: mov приемник,источник

Назначение: пересылка данных между регистрами или регистрами и памятью.

Синтаксис
Алгоритм работы:
копирование второго операнда в первый.
Состояние флагов после выполнения команды:

OF SF ZF AF PF CF
r r r r r r

Применение:
Команда mov применяется для обмена данными между системными регистрами. Это одна из немногих возможностей доступа к содержимому этих регистров. Данную команду можно использовать только на нулевом уровне привилегий либо в реальном режиме работы микропроцессора.

.286;переключение микропроцессора в защищенныйрежим36: mov eax,cr0 bts eax,0 mov cr0,eax

См. также: уроки 16, 17 и команды mov, bts



2016-01-02 1115 Обсуждений (0)
LODS/LODSB/LODSW/LODSD 0.00 из 5.00 0 оценок









Обсуждение в статье: LODS/LODSB/LODSW/LODSD

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1115)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)