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

Вид материалаКонспект
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Подобный материал:
1   ...   32   33   34   35   36   37   38   39   ...   57

ROR


Циклический сдвиг операнда вправо

ASCII-коррекция после сложения

 

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

ror операнд,количество_сдвигов 

Назначение: операция циклического сдвига операнда вправо.

Синтаксис

Алгоритм работы:
  • сдвиг всех битов операнда вправо на один разряд, при этом младший бит операнда вдвигается в операнд слева и становится значением старшего бита операнда;
  • одновременно этот младший бит операнда становится значением флага переноса cf;
  • старое значение флага переноса cf вдвигается в операнд слева и становится значением старшего бита операнда;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

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

11

00

OF

CF

?r



Применение:

Команда ror используется для циклического сдвига разрядов операнда вправо. Отличие этого сдвига от rcr в том, что очередной сдвигаемый бит одновременно вдвигается в операнд слева и становится значением флага cf. Так же, как и для других сдвигов, значение второго операнда (счетчика сдвига) ограничено диапазоном 0...31. Это объясняется тем, что микропроцессор использует только пять младших разрядов операнда количество_разрядов. Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага of, значение которого имеет смысл только в операциях сдвига на один разряд:
  • если of=1, то текущее значение флага cf и вдвигаемого слева бита операнда различны;
  • если of=0, то текущее значение флага cf и вдвигаемого слева бита операнда совпадают;

Этот эффект, как вы помните, обусловлен тем, что флаг of устанавливается в единицу всякий раз при изменении знакового разряда операнда.

;поместить четыре младших бита ax на место старших битов:

        ror     ax,4

        

См. также: уроки 9 и команды rcl, rcr, ror, sal, sar, shl, shr

SAHF


(Store AH register into register Flags)

Загрузка регистра флагов eFlags/Flags из регистра AH

 

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

sahf 

Назначение: запись содержимого регистра ah в младший байт регистра eflags/flags, в котором содержатся пять флагов cf, pf, af, zf и sf.

Синтаксис

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

Команда загружает младший байт регистра eflags/flags содержимым регистра ah. В битах 7, 6, 4, 2 и 0 регистра ah должны, соответственно, содержаться новые значения флагов sf, zf, af, pf и cf.

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

07

06

04

02

00

SF

ZF

AF

PF

CF

r

r

r



r

Применение:

Эта команда используется совместно с командой lahf. Из-за того, что регистр флагов непосредственно недоступен, сочетание этих команд можно применять для анализа — и, возможно, изменения — состояния некоторых флагов в регистре eflags/flags. Содержимое старшей части регистра флагов не изменяется.

;сбросить в ноль флаг cf

        lahf

        and     ah,11111110b

        sahf

        

См. также: уроки 2, 7 и команду lahf

SAL


(Shift Arithmetic operand Left)

Сдвиг арифметический операнда влево

 

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

sal операнд,количество_сдвигов 

Назначение: арифметический сдвиг операнда влево.

Синтаксис

Алгоритм работы:
  • сдвиг всех битов операнда влево на один разряд, при этом выдвигаемый слева бит становится значением флага переноса cf;
  • одновременно справа в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

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

11

00

OF

CF

?r



Применение:

Команда sal используется для сдвига разрядов операнда влево. Так же, как и для других сдвигов, значение второго операнда (счетчика сдвига) ограничено диапазоном 0...31. Это объясняется тем, что микропроцессор использует только пять младших разрядов количество_разрядов. Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага of, значение которого имеет смысл только в операциях сдвига на один разряд:
  • если of=1, то текущее значение флага cf и выдвигаемого слева бита операнда различны;
  • если of=0, то текущее значение флага cf и выдвигаемого слева бита операнда совпадают.

Этот эффект, как вы помните, обусловлен тем, что флаг cf устанавливается в единицу всякий раз при изменении знакового разряда операнда.

Команду sal удобно использовать для умножения целочисленных операндов без знака на степени 2. Кстати сказать, это самый быстрый способ такого умножения; умножить содержимое ax на 16 (2 в степени 4):

        mov     ax,17

        sal     ax,4

        

См. также: уроки 8, 9 и команды rcr, rcl, ror, rol, sar, shl, shr