- •1.Способи адресації
- •3.Пряма адресація пам'яті. .
- •6. Сторінкова пам'ять.
- •7.Сегмента адресація.
- •8. Опосередкована адресація з масштабуванням
- •9.Адресація по базі з сувом.
- •10.Адресація по базі з індексуванням
- •11. Адресація по базі з індексуванням та масштабуванням
- •12.Вирівнювання даних та коду.
- •13. Регістри загального призначення
- •14. Сегментні регістри.
- •15.Індексні регістри.
- •16. Спеціальні регістри
- •17. Флаги ознак.
- •18. Регистры управления (Control Registers)
- •19.20. Стек, регітсри стека.
- •22. Флаг нуля zf
- •23. Флаг знака sf
- •25. Флаг четности.
- •26. Флаг полупереносу.
- •27. Флаг трассировки.
- •28. Флаг напрямку.
- •29. Флаг переривание.
- •35. Арифметические команды
- •36. Команди блочної обробки даних
- •37. Команды ввода и вывода
- •38. Команды управления флагами
- •39. Команда пересылки данных: возможности и ограничения
- •40. Команди керування
- •41. Стек математичного співпроцесора
- •42.Команди пересилки співпроцесора
- •43. Арифметические команды сопроцессора
- •46. Різновиди чисел
- •47. Способи округлення
- •48.Трансцендентні команди
- •49. Команди завантаження констант співпроцесора
- •50. Порівняння чисел з плаваючою комою
- •51. Структура жёсткого диска
- •58. Структура каталогов Linux
- •59. Структура ufs
- •60. Суперблок. Ufs
- •61. Индексный дескриптор ufs
- •62. Основні механізми передачі параметрів
- •63. Основні місця передачі параметрів
- •64. Вкладені обчислення
- •65. Різновиди комбінацій сегментів
- •66. Порядок завантаження сегментів, директиви
- •67. Оптимізація обчислень
- •68. Математична оптимізація
- •69. Алгоритмічна оптимізація
- •70 .Низькорівнева оптимізація
- •71. Основні методи алгоритмічної оптимізації
- •72. Основні рекомендації низького рівня
- •74. Особенности архитектуры процессоров Pentium Pro и Pentium II
- •76. Конвеєр fpu
- •77. Принципи роботи кешу
- •79. Регистры управления (Control Registers)
- •80. Індексні регістри дескрипторів
- •81. Віртуалізація пам’яті
- •82. Переривання, маскування та обробка.
- •84. Кеш з зворотнім записом
- •85. Кеш з відкладеним записом
- •86. Наскрізний кеш
- •87. Кеш читання
- •88. Повністю асоціативний кеш
- •91. Структура кешу
- •92. Теги, призначення
- •93. Конвеєри mmx та sse
38. Команды управления флагами
FLAGS – 16-битный регистр, вот его биты:
11 |
10 |
? |
7 |
6 |
4 |
2 |
0 |
OF |
DF |
IF |
SF |
ZF |
AF |
PF |
CF |
Что означают эти биты можно посмотреть здесь
Примечание: флаг IF не всегда меняется, так как существуют такие операционные системы, как Windows 2000 или Windows XP, которые считают, что чем меньше прикладным программам позволять, тем лучше
stc – установить CF в 1 |
clc – установить CF в 0 |
cld – установить DF=0 |
std – установить DF=1 |
cli – запретить прерывания (IF=0) |
sti – разрешить прерывания (IF=1) |
pushf – поместить FLAGS в стек |
popf – загрузить FLAGS из стека |
1) cmc – инвертировать флаг переноса (CF) 2) lahf – загрузить флаги состояния в ah. Копирует младший байт регистра FLAGS в ah, включая SF (бит 7), ZF (бит 6), AF (бит 4), PF (бит 2), CF (бит 0). Бит 1 устанавливается в 1, биты 3 и 5 – в ноль 3) sahf – загрузить флаги состояния из ah. Загружает флаги SF, ZF, AF, PF, CF значениями битов 7, 6, 4, 2, 0 соответственно. Остальные биты регистра флагов не меняются 4) salc – устанавливает al в 0FFh, если CF=1, иначе устанавливает в 00h. Эквивалентна "sbb al, al", но флаги не меняет
ZF – флаг нуля. Устанавливается в 1, если результат предыдущей операции – ноль SF – флаг знака. Он всегда равен старшему биту результата CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции над беззнаковыми числами не уместился в приёмнике и произошёл перенос из старшего бита, или если требуется заём (при вычитании), иначе 0 OF – флаг переполнения. Устанавливается в 1, если результат предыдущей арифметической операции над числами со знаком выходит за допустимые для них пределы AF – флаг полупереноса. Устанавливается в 1, если в результате предыдущей операции произошёл перенос или заём из третьего бита в четвёртый. Этот флаг используется автоматически командами двоично-десятичной коррекции.Например, после двух команд: mov eax, 15; inc eax; флаг AF будет равен единице. После последовательности команд: mov eax, 16; dec eax; флаг AF также будет равен единице PF – флаг чётности. Устанавливается в 1, если младший байт результата предыдущей команды содержит чётное число битов, равных единице, иначе 0. Например, после двух команд: mov al, 2; inc al; флаг PF установится в 1 IF – флаг прерываний. 1 – прерывания разрешены, 0 – прерывания запрещены DF – флаг направления. 0 – строки обрабатываются в сторону увеличения адресов, 1 – в сторону уменьшения адресов
39. Команда пересылки данных: возможности и ограничения
К этой группе команд относятся команды:
Mov <Операнд назначения (приемник)>, <операнд- источник>
Xchg <Операнд1>, <операнд2>.
Mov – это основная команда пересылки данных. В ней допустимо большинство из возможных сочетаний операндов:
Mov ax, table ; пересылка из памяти в регистр
Mov table, ax ; и наоборот
Mov ds, ax ; пересылка между 16-битовыми регистрами
Mov bl, al ; пересылка между 8-битовыми регистрами
Mov cl,-30 ; пересылка константы в регистр
Mov table, word ptr 25h ; пересылка константы в память
Если в команде пересылки одним из операндов является регистр, то ассемблер пересылает столько байтов, каков размер регистра. При отсутствии в команде регистра ассемблер не знает, одну, двух или четырехбайтовую константу необходимо пересылать в память. В таком случае подсказкой для ассемблера должны быть модификаторы BYTE PTR(пересылка одного байта), WORD PTR (пересылка слова – двух байтов),DWORD PTR (пересылка двойного слова – четырех байтов).
В команде Mov исключаются следующие сочетания операндов:
- сегментный регистр-память. Нельзя загрузить в сегментный регистр значение непосредственно из памяти. Поэтому для такой загрузки используют обычно 2 команды пересылки – через регистр общего назначения или через стек;
- ячейка памяти-ячейка памяти. Нельзя осуществлять непосредственную пересылку данных из одной ячейки памяти в другую.
- сегментный регистр-сегментный регистр. Нельзя пересылать содержимое одного сегментного регистра в другой сегментный регистр, однако при необходимости такой пересылки поступают так же, как и в предыдущих случаях: пересылку осуществляют через регистр общего назначения;
- нельзя использовать сегментный регистр CS в качестве операнда назначения (приемника).
Команда Xchg (exchange) меняет между собой значения двух регистров общего назначения или регистра ОН и ячейки памяти. Необходимое требование к операндам – чтобы они имели один тип. Например:
Xchg AX, BX ; обменять значения двух регистров (слова
Xchg AL, BH ; или байты)
Xchg WORD1, DX ; обменять значения регистра и
Xchg DL, BYTE1 ; ячейки памяти.