Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vvod_inform_s_klav_v_pamyat_i_vyvod_eyo_na_ekr.doc
Скачиваний:
23
Добавлен:
07.06.2015
Размер:
699.9 Кб
Скачать

Команды расширения знака.

Команда cbw расширяет знак байта из регистра al, образуя в регистре ax эквивалентное слово в дополнительном коде. Если например, (al) = 11001000, то после выполнения команды cbw в регистре ax получится код 1111111111001000. Аналогично команда cwd расширяет знак слова из ax в регистр dx, формирую двойное слово dx:ax. В обеих командах операнд неявно указывается кодом операции и должен находиться в al или ax, Флажки не модифицируются. Рассмотренные команды используются для выравнивания длины операндов, участвующих в операциях сложения и вычитания.

Команды inc, dec, neg, cmp.

Специальные арифметические команды микропроцессора Intel 80×86 приведены в табл. 4.

Таблица 4.

Название

Мнемоника и формат

Описание

Инкремент

Декремент

Изменение знака

Сравнение

inc opr

dec opr

neg opr

cmp opr1,opr2

(opr)←(opr) + 1

(opr)←(opr) – 1

(opr)← – (opr)

(opr1) – (opr2)


Эти команды воздействуют на все арифметические флажки, но команды inc и dec не воздействуют на флаг CF. Команды inc, dec и neg имеют один операнд. Команда inc производит инкремент операнда на 1, а команда decдекремент операнда на 1. Команда neg изменяет знак операнда. В них допускается любой режим адресации, кроме непосредственного. Команды inc и dec предназначены главным образом для счёта и широко используются для организации программных циклов. Если в команде neg операнд был равен 00000000 либо 100000, то в результате выполнения команды его значение не изменится. Команда сравнения cmp идентична команде sub, но результат вычитания нигде не запоминается. Она используется только для установки флагов на основе соотношения между операндами и обычно применяется перед командами условного перехода. В табл. 5 приведены результаты выполнения команды cmp.

Таблица 5

Условие

Флаг

OF

SF

ZF

CF

Беззнаковые операнды

(opr1) < (opr2)

(opr1) = (opr2)

(opr1) > (opr2)

Знаковые операнды

(opr1) < (opr2)

(opr1) = (opr2)

(opr1) > (opr2)

0/1

0

0/1

1

0

0

1

0

1

0

1

0

0


Команды двоичного умножения и деления.

Команды, выполняющие двоичное умножение и деление для рассматриваемого микропроцессора, приведены в табл. 6.

Таблица 6

Название

Мнемоника

и формат

Описание

Умножение

со знаком

Умножение

без знака

imul src

mul src

Операнды – байты

(ax)← (al)×(src)

Операнды – слова

(dx:ax)← (ax)×(src)

произведение со знаком

аналогично команде imul, но операнды

и произведение без знака

Продолжение таблицы 6

Название

Мнемоника

и формат

Описание

Разделить

со знаком

Разделить

без знака

idiv src

div src

Делитель – байт

(al)← частное (ax)/(src)

(ah))← остаток (ax)/(src)

Делитель – слово

(ax)← частное (dx:ax)/(src)

(dx)← остаток (dx:ax)/(src)

Частное и остаток имеют знаки.

Знак остатка равен знаку делимого.

Аналогично команде idiv, но операнды,

частное и остаток без знака


Команды умножения осуществляют умножение байт с получением результата-слова и умножения слов, давая в результате двойное слово. При этом, умножая байты необходимо использовать указатель типа byte ptr после команды mul (imul), а при умножении слов – word ptr. Команды imul и mul устанавливают флаги OF и CF в состояние ”1”, если для результата требуется два байта или два слова одновременно. Проверяя состояние этих флажков, можно определить, размещается произведение в одном байте или слове. Остальные Флажки могут модифицироваться, но их состояния не определены, т. е. не предсказуемы. В качестве src может быть общий регистр или ячейка памяти с любым режимом адресации, но не может быть непосредственный операнд. Отметим, что в обоих командах imul и mul переполнение невозможно, так как для произведения отводится достаточное место. Например: пусть в al находится чело 0В4h, которое можно интерпретировать как знаковое -76или беззнаковое 180. В регистре BL поместим число 11h, которое соответствует 17 Тогда, применив команду imul bl, получим (ax)=0FAF4h= –1292 и (CF)=(OF)=1, так как результат велик для 8 бит. Если применить команду mul bl, то получим (ax)=0BF4h =3060 и (CF)=(OF)=1.

Команды деления idiv и div дают неопределенное состояние флагов и, как команды умножения, не допускают непосредственных операндов, т.е. делитель должен находиться в одном из РОН или ячейки памяти. В команде idiv знакового деления знак частного, определяется по алгебраическому правилу, а остатку присваивается знак делимого. Отметим, что для получения правильного результата, операция деления накладывает определенные ограничения на размерность, делимого и делителя, а именно: если делитель слово, то делимое должно иметь формат двойного слова; если делитель байт, то делимое слово. В некоторых случаях длина частного может превысить длину аккумулятора (ax или al). В этом случае МП генерирует внутреннее прерывание типа 0 и переходит к соответствующей процедуре обработки этого прерывания. Аналогичная ситуация возникает если делитель равен нулю.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]