Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Юрий Владимирович самый уважаемы человек =)экза...doc
Скачиваний:
3
Добавлен:
12.09.2019
Размер:
1.41 Mб
Скачать

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 ; ячейки памяти.