- •Исследование процессов ввода/вывода информации и системы команд микропроцессоров семесйства intel 80×i86
- •Введение
- •1.Цель работ
- •2.1. Архитектура микропроцессора Intel 8086.
- •2.2. Адресация памяти и данных.
- •2.3. Синтаксис операндов языка assembler
- •2.4. Команды передачи данных.
- •Mov ax,segment
- •3) Mov [bx],dx переслать (dx) в ячейку адресованную (вх)
- •Mov al,es:[si]; ds заменен на es
- •Команды lea, lds, les.
- •Lea reg, memr
- •Команда xchg
- •Стековые команды push и рор
- •2.5 Префикс программного сегмента (psp)
- •2.6 Арифметические команды
- •Команды сложения и вычитания
- •0015 65А0
- •0037 1D3e
- •0004 В837
- •0001 F0f8
- •Команды расширения знака.
- •Команды inc, dec, neg, cmp.
- •Команды двоичного умножения и деления.
- •Дополнительные сведения.
- •2.7 Основные правила при разработке программ на языке assembler.
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •3. Лабораторные работы
- •Контрольные вопросы
- •Лабораторная работа № 2
- •Контрольные вопросы
- •Лабораторная работа № 3
- •Дополнительная информация для составления программы по данному заданию.
- •Лабораторная работа № 4
- •Контрольные вопросы
- •Лабораторная работа № 5
- •Контрольные вопросы
- •Лабораторная работа № 6
- •Контрольные вопросы
- •Лабораторная работа № 7
- •Рекомендации по выполнению лабораторной работы.
- •4.1. Тексты подпрограмм вывода на экран.
- •Int 21h
- •Int 21h
- •Контрольные вопросы
- •Лабораторная работа № 8
- •Контрольные вопросы
- •Лабораторная работа № 9
- •Контрольные вопросы
- •Лабораторная работа № 10
- •Контрольные вопросы
- •Контрольные вопросы
- •Лабораторная работа № 14
- •Контрольные вопросы
- •6. Требования к отчетам
- •7. Библиографический список
Команды расширения знака.
Команда 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 и переходит к соответствующей процедуре обработки этого прерывания. Аналогичная ситуация возникает если делитель равен нулю.