- •Исследование процессов ввода/вывода информации и системы команд микропроцессоров семесйства 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 и переходит к соответствующей процедуре обработки этого прерывания. Аналогичная ситуация возникает если делитель равен нулю.