Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Loope/loopz loopne/loopnz
Схема команды
Состояние флагов после выполнения команды
См. также
Состояние флагов после выполнения команды
См. также
Схема команды
См. также
Подобный материал:
1   ...   21   22   23   24   25   26   27   28   ...   57

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,str

cycl:

        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 приемник,источник 

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

Синтаксис

Алгоритм работы:

копирование второго операнда в первый.

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

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

r

r

r

r



r

Применение:

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

.286

;переключение микропроцессора в защищенный

режим36:

        mov     eax,cr0

        bts     eax,0

        mov     cr0,eax

        

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