Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает
Вид материала | Конспект |
Схема команды Состояние флагов после выполнения команды См. также Схема команды Состояние флагов после выполнения команды См. также |
- 8Б класс Химия Пар. 30 (№1-3), Пар. 31 (№1-5), рабочая тетрадь эти же темы Биология, 8.14kb.
- Рабочая программа учебной дисциплины (модуля) Системное программирование, 108.12kb.
- Смирнягин курс США население Лекция население США этой теме будут посвящены три лекции, 288.75kb.
- Инструкция подумайте о ситуациях, в которых Ваши желания отличаются от желаний другого, 98.01kb.
- Лекция 8 Системное программирование. Системное проектирование взаимодействия процессов., 225.21kb.
- Программа лекций Будущее начинается сегодня! После каждой лекции конкурс с розыгрышем, 75.64kb.
- Программа лекций Будущее начинается сегодня! После каждой лекции конкурс с розыгрышем, 73.71kb.
- Конспект лекций по курсу "Информатика и использование компьютерных технологий в образовании", 1797.24kb.
- Календарно-тематический план лекций по факультетской терапии 4 курс (8 семестр) специальность, 119.31kb.
- Программа вступительного экзамена по специальности 05. 13. 18 Математическое моделирование,, 115.33kb.
PUSHFD
(PUSH eFlags Double word register onto stack)
Размещение расширенного регистра флагов в стеке
Схема команды: | pushfd |
Назначение: размещение в стеке содержимого регистра флагов eflags.
Синтаксис
Алгоритм работы:
- уменьшить значение указателя стека esp на 4;
- записать в вершину стека двойное слово, представляющее собой содержимое регистра eflags.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команды pushfd и popfd используются аналогично командам pushf и popf. Команда pushfd применяется для получения содержимого регистра флагов. Как известно, прямой доступ к регистру флагов невозможен, поэтому данная команда является одной из немногих команд, позволяющих получить доступ к регистру флагов как к содержимому обычного регистра. Обратное действие, то есть восстановление — возможно измененного слова — в регистр флагов, осуществляется командой popfd. Эта команда может использоваться в программах обработки прерываний или в других случаях, когда необходимо сохранить локальный контекст процесса вычисления.
.386 ;извлечь значение регистра eflags и изменить ;значение флага cf на обратное pushfd pop eax xor eax,01h push eax popfd |
См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, popfd, push, pusha, pushad, pushf
RCL
(Rotate operand through Carry flag Left)
Циклический сдвиг операнда влево через флаг переноса
Схема команды: | rcl операнд,количество_сдвигов |
Назначение: операция циклического сдвига операнда влево через флаг переноса cf.
Синтаксис
Алгоритм работы:
- сдвиг всех битов операнда влево на один разряд, при этом старший бит операнда становится значением флага переноса cf;
- одновременно старое значение флага переноса cf вдвигается в операнд справа и становится значением младшего бита операнда;
- указанные выше два действия повторяются количество раз, равное значению второго операнда команды rcl.
Состояние флагов после выполнения команды:
11 | 00 |
OF | CF |
?r | r |
Здесь обозначение ?r означает то, что анализ состояния флага имеет смысл при определенном сочетании операндов. В случае команды rcl флаг of представляет интерес, если сдвиг осуществляется на один разряд (см. ниже описание применения команды rcl).
Применение:
Команда rcl используется для циклического сдвига разрядов операнда влево. Особенность этого сдвига в том, что он происходит с некоторой задержкой, так как очередной сдвигаемый бит оказывается на некоторое время вне операнда. В это время можно произвести его извлечение и (или) подмену. Другой важный момент заключается в том, что для счетчика сдвига микропроцессор использует только пять младших разрядов операнда количество_разрядов. Таким образом, значение, большее 31, микропроцессором не допускается (аппаратно это ограничение реализуется тем, что игнорируются значения всех битов счетчика, кроме первых пяти). Обратите внимание на еще один интересный эффект, связанный с поведением флага of. В операциях сдвига на один разряд по изменению этого флага можно судить о факте изменения знакового (старшего) разряда операнда:
- of=1, если текущее значение флага cf и выдвигаемого бита операнда слева различны;
- of=0, если текущее значение флага cf и выдвигаемого бита операнда слева совпадают.
;сдвиг операнда, занимающего два двойных слова ;на четыре разряда влево ch_l dd ... ;младшая часть 64-битного операнда ch-2 dd ... ;старшая часть 64-битного операнда ... mov cx,4 ;счетчик сдвигов в cx mov eax,ch_l mov edx,ch_h m1: clc ;очистка флага cf rcl eax,1 ;старший бит eax в cf rcl edx,1 ;cf в младший бит edx, старший бит edx в cf loop m1 |
См. также: урок 9 и команды rcr, rol, ror, sal, sar, shl, shr