У вас вопросы?
У нас ответы:) SamZan.net

. PF флаг четности

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос из старшего бита или если требуется заем (при вычитании) , иначе устанавливается в 0. Например, после сложения слова 0FFFFh и 1, если регистр, в который надо поместить результат, — слово, в него будет записано 0000h и флаг CF = 1. 
PF — флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число бит, равных 1; устанавливается в 0, если число единичных бит нечетное. (Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, если он равен 1.) 
AF — флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически командами двоично-десятичной коррекции. 
ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль. 
SF — флаг знака. Этот флаг всегда равен старшему биту результата.
TF — флаг ловушки. Этот флаг был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой команды программы управление временно передается отладчику (вызывается прерывание 1 — см. описание команды INT). 
IF — флаг прерываний. Установка этого флага в 1 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств (см. описание команды INT). Обычно его устанавливают на короткое время для выполнения критических участков кода. 
DF — флаг направления. Этот флаг контроллирует поведение команд обработки строк — когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, а когда DF = 0 — наоборот. 
OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей арифметической операции над числами со знаком выходит за допустимые для них пределы. Например, если при сложении двух положительных чисел получается число со старшим битом, равным единице (то есть отрицательное) и наоборот.

Регистры – это ячейки памяти расположенные в процессоре. Их достоинство заключается в гораздо большем быстродействии, чем у оперативной памяти. Недостаток – их очень мало, всего чуть больше десятка.
На рисунке ниже представлены регистры процессора 8086. Такие же самые регистры имеются во всех старших моделях процессоров - 286, 386, 486 и Pentium (хотя старшие процессоры имеют дополнительные регистры и расширения). Если использовать при написании программ только эти регистры, то программы (по идее) будут исполнятся на всех компьютерах с Intel совместимыми процессорами.

Регистры делятся на пять категорий:

  •  Регистры общего назначения (ax, bx, cx, dx)
  •  Регистровые указатели и индексные регистры (sp, bp, si, di)
  •  Сегментные регистры (cs, ds, ss, es)
  •  Регистр командного указателя (ip)
  •  Регистр флагов

Все регистры процессора 8086 являются 16-битовыми. Кроме того, четыре регистра общего назначения – ax, bx, cd, dx - разделены на старшую (high) и младшую (low) 8-битовые половины. Это позволяет оперировать либо всем 16-битовым регистром (например, ax), либо обращаться отдельно к старшей (ah) или младшей (al) половинам регистра.

Регистры общего назначения — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение:

  •  регистр AX (accumulator) — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);
  •  регистр BX (base) — базовый регистр в вычислениях адреса, часто указывает на начальный адрес (называемый базой) структуры в памяти;
  •  регистр CX (count) — счетчик циклов, определяет количество повторов некоторой оперции;
  •  регистр DX (data) — определение адреса ввода/вывода, так же может содержать данные, передаваемые для обработки в подпрограммы.

Эти определения, ни коим образом, не являются полными, и большую часть времени вы сами решаете, как использовать эти регистры общего назначения. Например, несмотря на то, что cx назван регистром-счетчиком, ни что не мешает использовать для подсчета регистр bx. Однако в ряде случаев некоторые команды процессора 8086 требуют строго определенных регистров.

Регистровые указатели и индексные регистры тесно связаны сопределенными операциями.

Регистровые указатели SP и BP обеспечивают доступ к данным в сегменте стека.

  •  регистр SP (Stack Pointer) – всегда указывает на вершину стека, позволяет временно хранить адреса и иногда данные;
  •  регистр BP (Base Pointer) – обычно адресует переменные, хранимые в стеке, облегчает доступ к параметрам (данным и адресам), переданным через стек.

Индексные регистры SI и DI могут применятся для расширенной адресации, для использования в операциях сложения и вычитания, а так же для операций над байтовыми строками (в языке ассемблера байтовая строка представляет собой просто ряд последовательных байт).

  •  регистр SI (Source Index) – является индексом источника и применяется для некоторых операций над строками (обычно связан с регистром DS);
  •  регистр DI (Destination Index) – является индексом назначения и применяется так же для строковых операций (обычно связан с регистром ES).

Сегментные регистры (CS, DS, SS, ES) определяют в памяти начала четырех 64 Кбайтовых сегментов, которые называются текущими сегментами.
Программа может распределять более четырех сегментов, но при этом для адресации дополнительных сегментов она должна перемещать, соответствующие им правильные значения адресов между одним или несколькими сегментными регистрами. Сегментные регистры строго специализированны. С помощью них нет возможности выполнять математические вычисления или хранить в них результаты других операций. Действительный порядок сегментов не обязательно совпадает с порядком, показанным на рисунке. Сегменты могут в любом порядке храниться в произвольных местах памяти.

  •  регистр CS (Code Segment) – содержит начальный адрес сегмента когда (начало машинного кода программы). Этот адрес плюс значение смещения в командном указателе (IP) определяет адрес команды, которая должна быть выбрана для выполнения;
  •  регистр DS (Data Segment) – содержит начальный адрес сегмента данных (переменных, строк и т.п. данных, которыми оперирует программа);
  •  регистр SS (Stack Segment) – содержит начальный адрес сегмента стека;
  •  регистр ES (Extra Segment) – является вспомогательным регистром, используется при некоторых операциях над строками. В большинстве программ в ES и DS содержатся одинаковые адреса, но он может упрощать некоторые операции связанные с этими регистрами.

Регистр командного указателя IP (Instruction Pointer) содержит смещение на команду, которая должна быть выполнена. Обычно при программировании этот регистр не используют. Но очень удобно наблюдать за изменениями его значений при отладке программы в различных отладчиках, например debug.exe, TurboDebugger и т.п.

Регистр флагов так же состоит из 16 бит, из них используются только 9.

Это регистр состояния процессора. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора. Отдельные биты флагов представляют одиночными буквами o, d, i, t, s, z, a, p, c или двумя буквами of, df, if, tf, sf, zf, af, pf и cf.

CF (Carry Flag) — флаг переноса при арифметических операциях. Содержит перенос из старшего бита после арифметических операций, а так же последний бит при сдвигах или циклических сдвигах.
PF (Parity Flag) — флаг четности результата, показывает четность младших восьмибитовых данных (1 – четное, 0 – нечетное).
AF (Auxiliary Flag) — флаг дополнительного переноса. Содержит перенос из 3 бита для 8-битовых данных, используется для специальных арифметических операций.
ZF (Zero Flag) — флаг нулевого результата. Показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат).
SF (Sign Flag) — флаг знака (совпадает со старшим битом результата, 0 – плюс, 1 - минус).
TF (Trap Flag) — флаг пошагового режима (используется при отладке).
IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний.
DF (Direction Flag) — флаг направления при строковых операциях. Обозначает левое или правое направление пересылки или сравнения строковых данных.
OF (Overflow Flag) — флаг переполнения. Указывает на переполнение старшего бита при арифметических командах.

1) mov приёмник, источник – команда пересылки данных. Копирует содержимое источника в приёмник, источник не изменяется. Например: mov ax, 1 присваивает регистру ax значение 1. Команда mov ax, word ptr eax – записывает в ax слово, лежащее по адресу eax. Байт по адресу eax записывается в младшую половину ax (в al), а байт по адресу eax+1 записывается в ah (по закону Intel). Но не обязательно, записывая команды, использовать такую сложную адресацию. Например, если у нас есть переменая "y" типа longint, то при помощи следующей команды ей можно присвоить значение 10000: mov y, 10000; Можно также записать mov dword ptr y, 10000, показывая, что "y" – 32-разрядная переменная. Если записать mov dword ptr [y+10], 5000, то, начиная с адреса [y+10] в память будет записано 32-битное число 5000. Можете не бояться писать подобные вещи (прибавление константы к адресу), так как все эти выражения вычисляются на стадии компиляции и на скорость программы не влияют. Пусть, например, "y" находится по адресу 34567. Если мы запишем [y+10], то компилятор просто поймёт это как [32577], так как он знает адрес переменной "y". Операнды команды mov могут быть как регистрами, так и переменными, но одновременно оба операнда не могут быть переменными 
 
2) xchg операнд1, операнд2 – обменивает операнды. Например, если al=45, ah=37, то после выполнения xchg al, ah будет al=37, ah=45 
 
3) add приёмник, источник – выполняет сложение приёмника и источника, результат заносится в приёмник. Источник не изменяется. Но зато меняются флаги
 
4) adc приёмник, источник – выполняет сложение приёмника, источника и флага CF. Обычно эта команда используется для сложения чисел повышенной точности. Пусть, например, у нас имеются два 64-битных числа: первое в edx:eax (младшее двойное слово в eax, старшее двойное слово в edx), второе – в ebx:ecx. Тогда после выполнения команд: add eax, ecx; adc edx, ebx; в паре регистров edx:eax будет находиться сумма этих 64-битных чисел. Когда были 16-разрядные процессоры, подобным образом складывали 32-битные числа (считая, что каждое состоит из двух 16-битных). Сейчас это не имеет смысла. Более того, процессору всё равно, какие числа складывать – 16-разрядные, или 32-разрядные. Скорость одинаковая. Поэтому сложение 32-битных чисел напрямую быстрее, чем с разбиением и сложением 16-битных (в 2 раза). Но иногда это может понадобиться (например, Турбо-Паскаль не понимает 32-битные регистры). Если в Турбо-Паскале вы заведёте переменную типа longint, то он будет таким тупым образом выполнять над ней операции. Этим и объясняется, что 16-битные программы медленнее, чем 32-битные 
 
5) sub приёмник, источник – вычитает источник из приёмника, результат заносит в приёмник 
 
6) sbb приёмник, источник – вычитает из приёмника значение источника, затем вычитает значение CF. Её можно использовать для вычитания 64-битных слов
 
7) inc приёмник – то же самое, что и add приёмник, 1 
 
8) dec приёмник – то же самое, что и sub приёмник, 1 
 
9) cmp операнд1, операнд2 – по сути вычитание операнда2 из операнда1, только операнды не меняется (команда меняет только флаги). С помощью этой команды обычно выполняются условные переходы (самый очевидный способ) 
 
10) and|or приёмник, источник – выполняет логическое побитовое И|ИЛИ над приёмником и источником, и помещает результат в приёмник. Часто используется для выборочного обнуления|объединичивания отдельных битов. Например, команда and al, 00001111b обнулит старшие 4 бита регистра al, а младшие не изменит 
 
11)
 xor приёмник, источник – логическое исключающее ИЛИ. Выполняет побитое логическое исключающее ИЛИ над приёмником и источником, результат заносится в приёмник. Часто используется для обнуления регистров. Например, xor ax, ax обнуляет регистр ax, и делает это быстрее, чем mov ax, 0. Этой командой следует пользоваться для обнуления регистров. Можете не бояться экзотичности этой команды. Она будет эффективно работать на любом Intel-совместимом компьютере. Эта команда официально поддерживается Intel как каманда обнуления регистра 
 
12) test операнд1, операнд2 – по сути выполняет команду and над операндами, но операнды не меняет, а меняет только флаги аналогично and 
 
13) not приёмник – каждый бит приёмника, равный нулю, устанавливается в 1, и каждый бит, равный 1, устанавливается в 0. Флаги не меняются 




1. Стратагемы- китайские секреты успеха
2. на тему- Сказочные перчатки Краснодарский край г
3. Олонки ~ Захаровская
4. гарантію роботи для молоді
5. 2006 г ИЗУЧЕНИЕ ПРИНЦИПА ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ ПРИ ПОМОЩИ ТЕРМОМЕТРА СОПРОТИВЛЕНИЯ
6. Лекции по мобилизационной подготовке здравоохранения
7. на тему ldquo;Основи конституційного права країн Азіїrdquo; Японія довідка складається в письмовій формі за та
8. Основание и деятельность фирмы Appl
9. Антропоцентризм и биоцентризм
10. технических свойств в процессе экспл
11. Тема- Анализ и оценка работы HDD 1.html
12. вариант по почте dmin@nbot
13. Театр комедии Дель Арт
14. гармонизацией взаимоотношений общества с природной средой 2 разре
15. Курсовая работа- Сравнение управленческого и финансового учета
16. Аутгоинговый туроператор специализируется на разработке продвижении и реализации выездных международны
17. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата економічних наук Маріуполь 2006
18. Социальная философия вышел первым изданием в 1993 г
19. статья была написана кемто из девушек женщин но подобной инициативы с их стороны не видно поэтому я взял на
20. Модуль 2 Заболевания желчных протоков и поджелудочной железы Методическое пособие для подготовки к эк