1.  Условные флаги в алфавитном порядке.

AF (Auxiliary Carry flag) – флаг вспомогательного переноса, предназначенный для обработки чисел в BCD-формате, используется при выполнении арифметических операций над числами длиной 1 байт для индикации переноса из младшей тетрады в старшую (или займа из старшей тетрады). Здесь BCD (Binary Coded Decimal) – двоично-десятичное представление чисел (каждая десятичная цифра кодируется двоичной тетрадой)

CF (Carry flag) – флаг переноса, предназначен для индикации переноса из старшего байта, используется в операндах, разрядность которых больше 16 бит.

OF (Overflow flag) – флаг переполнения, предназначен для индикации переполнения результатов при выполнении арифметических операций. При сложении он устанавливается в 1, если есть перенос в старший бит, но нет переноса из старшего бита.

PF (Parity flag) – флаг четности, используется как контрольный бит, устанавливается в 1, если младший байт содержит четное число единиц.

SF (Sign flag) – флаг знака, равен 1 для отрицательного результата.

ZF (Zero flag) – признак нулевого результата.

Управляющие флаги устанавливаются программным путем и используются для изменения состояния МП.

DF (Direction flag) – флаг направления, применяется в командах обработки строк. При DF=1 обработка осуществляется от наибольшего адреса к меньшему, а при DF=0 – от начала к концу.

Установка флага осуществляется следующими командами ассемблера:

Команда

Устанавливает значение DF

STD

1

CLD

0

IF (Interrupt-Enable flag) – разрешение прерывания, используется для разрешения или запрета обработки внешнего маскируемого прерывания. Устанавливается командами ассемблера

НЕ нашли? Не то? Что вы ищете?

Команда

Значение IF

Результат установки

STI

1

Обработка прерывания разрешена

CLI

0

Обработка прерывания запрещена

TF (Trap flag) – трассировка, используется для осуществления покомандного (пошагового) выполнения программы. При TF=1 МП автоматически вырабатывает внутренние прерывания после каждой команды, что удобно для отладочного режима выполнения программы. Изменить состояние флага TF довольно сложно.

Две части МП:

ОУ – операционное устройство, выполняет команды; содержит АЛУ, УУ и 10 регистров. Эти устройства обеспечивают выполнение команд, арифметических вычислений и логических операций.

ШИ – шинный интерфейс, подготавливает команду и данные для выполнения; содержит 3 элемента:

1)  Блок управления шиной

2)  Очередь команд

3)  Сегментные регистры

Структура команд

Операционная часть

Адресная часть

В командах ЯА:

Мнемоника

Адресная часть

Машинные команды МП занимают от 1 до 6 байтов, причём операционная часть занимает 1 или 2 первых байтов команды, остальное адресная часть.

Операнды могут быть указаны:

§  В самой команде(непосредственная адресация)

§  В одном из регистров, тогда в команде указывается этот регистр (регистровая адресация)

§  В оперативной памяти (ОП) по адресу, который тем или иным образом описан в команде (прямая, базовая или индексная адресация)

§  Некоторые команды требуют, чтобы один из операндов находился в определённом регистре (например в AX), тогда он не указывается в команде( подразумеваемая адресация)

Результат выполнения команды обычно помещается на место первого операнда. Форматы команд разнообразны (в основном двухадресные).

В общем виде запишем : op1 := op1 * op2, где * - какая-то команда, заданная МНК(мнемоникой); op1 – регистр или ячейка памяти, 1 байт или одно слово (2 байта); op2 – непосредственный операнд - регистр или ячейка памяти, 1 байт или одно слово (2 байта).

Система команд МП Intel 80x86

Арифметические команды

1.  Команды сложения и вычитания

Операции сложения и вычитания одинаково для знаковых и беззнаковых целых. Используются две формы операндов: байт или слово, причем операнды должны быть одинаковой длины. Операнды могут храниться в регистре или в ОП, но второй операнд может быть непосредственным.

Перечислим команды, относящиеся к группе команд сложения и вычитания:

Группа а) ADD op1, op2 ; op1 := op1+op2

SUB op1, op2 ; op1 := op1 – op2

Сложение (вычитание) операндов в дополнительном двоичном коде, результат помещается на место первого операнда, второй операнд не изменяется.

Команды корректируют регистр флагов FLAGS в соответствии с результатом операции, а именно:

ZF – нулевой рез-т,

SF – знак результата,

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

CF, AF – флаги переносов,

OF – флаг переполнения.

Примеры:

ADD AH, 12 ; AH := AH + 12 (1Б)

SUB z, BX ; z := z – BX (2Б)

Группа б) ADC op1, op2 ; op1 := op1+op2+CF

SBC op1, op2 ; op1 := op1 – op2 – CF

Сложение (вычитание) операндов с переносом, образованным предыдущей командой. Модифицирует флаги аналогично группе а.

Например, если требуется сложить двойные слова, расположенные в парах регистров

(AX, BX) := (AX, BX) + (CX, DX),

причем AX, CX – старшие байты слагаемых,

BX, DX – младшие байты.

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

ADD BX, DX

ADC AX, CX

Группа в) Специальный случай сложения – изменение операнда на единицу.

INC op ; op := op +1 (инкремент)

DEC op ; op := op –1 (декремент)

Операнд может быть регистр, или ячейка памяти, байт или слово.

Группа г) Десятичная коррекция - анализ и преобразование сложения(вычитания) для BCD кодов. BCD-операнды обрабатываются обычными командами сложения и вычитания, а затем размещается команда десятичной коррекции, которая обрабатывает только один байт данных, находящихся в AL, поэтому команды десятичной коррекции операндов не имеют (подразумеваемая адресация).

DAA; коррекция после сложения

DAS; коррекция после вычитания.

Например:

ADD AL, y

DAA

SUB AL, DH

DAS

BCD-операнды, представленные более, чем одним байтом должны обрабатываться побайтно.

Команды десятичной коррекции модифицирует флаги аналогично п.(а), за исключением флагов AF и OF.

2.  Дополнительные команды

Группа а) Команда сравнения

CHP op 1, op 2; op 1 - op2

Результат нигде не запоминается, команда корректирует арифметические флаги ZF, SF, PF, CF, AF, OF.

Группа б) Команда изменения знака

NEG op ; op := - op.

Операнд может быть байт или слово в регистре или в ячейке памяти.

Пример,

MOV AH, 1 ; AH := 1

NEG AH ; AH := -1

Если операнд равен нулю, то его значение не изменяется.

Команда корректирует флаги аналогично группе а; причем

CF=1, кроме случая, когда операнд равен нулю;

OF=0, кроме случая, когда op=-128 (для 1Б) = 80h (это значит, что число заняло всю разрядность), тогда OF=1, а операнд остается без изменения.

3.  Команды умножения и деления

Группа а) Умножение

MUL op ; умножение целых чисел без знака

IMUL op ; умножение целых чисел со знаком

Операнд может быть слово или байт в регистре или в ячейке памяти, но не непосредственный операнд.

Команды действуют одинаково:

- для байтов AX := AL*op

- для слов (DX, AX) := AX*op

Т. к. результат получается удвоенной разрядности относительно операндов, то при умножении слов он располагается в стандартной паре регистров (DX, AX), причем DX хранит старшие разряды. Команды модифицируют флаги:

СF=OF=0 , если старшая половина результата AH нулевая или совпадает по знакам.

СF=OF=1 , если старшие разряды не нулевые.

Группа б) Деление

DIV op; деление целых чисел без знака

IDIV op; деление целых чисел со знаковом

где op – аналогично умножению.

Команды выполняют деление нацело и формируют два результата: целое частное и остаток.

Деление слова на байт выполняется по схеме

АН:=АХ mod op (остаток)

AL:=AX div op (частное)

Деление двойного слова на слово

DX := (DX, AX) mod op

AX := (DX, AX) div op

При делении слова на байт делимое заранее должно быть размещено в аккумуляторе и сдвинуто в сторону младшего байта в АХ или AL соответственно. Деление является дополнительной к умножению командой.

Флаги не модифицируются, но может возникнуть ошибка «деление на ноль или переполнение», которая возникает, если делитель нулевой или частное не помещается в соответствующее ему место.

При появлении этой ошибки микропроцессор прекращает выполнение программы.

4.  Команды преобразования длины

Эти команды часто требуются перед делением, флаги – не модифицируют.

CBW – преобразует байт со знаком в AL, в слово со знаком в АХ путем распространения старшего бита AL по всем разрядам AH;

CWD – преобразует слово со знаком в АХ в двойное слово со знаком в (DX, AX) аналогично CBW.

Так же существуют команды десятичной коррекции умножения и деления AAM, AAD

Команды обработки битов

Данная группа команд отличается отсутствием межразрядных переносов. Команды делятся на 2 группы.

1) Логические команды

Общие черты:

§  Выполняют побитовую обработку операндов параллельно, без переносов; единица трактуется как «истина», ноль – «ложь»;

§  модифицируют флаги, но важен только флаг ZF «нулевой результат»;

§  операндами могут быть байты или слова в регистрах или ячейках памяти; второй операнд может быть непосредственным операндом.

Перечислим основные команды

NOT op; отрицание (инверсия кода). Флаги не модифицирует.

AND op1, op2; op1:= op1^ op2

Например, 0Fh ^ 15h = 05h

^

00001111

00010101

00000101

OR op1, op2; op1:= op1 v op2

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11