- •Исследование процессов ввода/вывода информации и системы команд микропроцессоров семесйства 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. Библиографический список
Команды сложения и вычитания
Команды сложения и вычитания, используемые микропроцессором Intel 80×86 приведены в табл. 3.
Таблица 3
Название |
Мнемоника и формат |
Описание |
Сложение Сложение с переносом Вычитание Вычитание с заёмом |
add dst,src adc dst,src sub dst,src sbb dst,src |
(dst)←(src)+(dst) (dst)←(src)+(dst)+(CF) (dst)←(src) – (dst) dst)←(src)–(dst) – (CF) |
В качестве операндов dst и src в этих командах могут быть указаны общие регистры и ячейки памяти с любым режимом адресации. Кроме того, в качестве src может быть указан и непосредственный операнд. Результат выполнения этих команд изменяет состояние следующих флагов: OF, SF, AF, PF, CF.
Отметим, что бит CF устанавливается в “1”, когда возникает перенос из 16-ого разряда при сложении и заём в 16-й разряд при вычитании. Состояние этого флага можно использовать для анализа переполнения при работе с беззнаковыми операндами. В арифметике двойной и т.д. точности этот флаг используется в командах adc и sbb. Признаком переполнении при работе со знаковыми числами служит состояние флага OF.
Приведём пример сложения с двойной точностью:
перенос
←
0015 65А0
+ 0021 В79Е
0037 1D3e
Фрагмент программы, реализующий данную операцию:
.
.
.
mov ax,x1; сложить младшие слова из x1 и y1
add ax,y1; и поместить сумму в sum
mov sum,ax
mov ax,x1+2; сложить старшие слова из x1 и y1
adc ax,y1+2; и поместить сумму в sum+2
mov sum+2,ax
.
.
.
В нём предполагается, что младшие слова операндов и суммы находятся соответственно в x1, y1 и sum, а старшие слова в x1, y1 и sum+2. Младшие слова складываются командой add (поскольку нет необходимости учитывать значение флага CF от предыдущей операции), а старшие слова – adc. Аналогичным образом при операции с большей точностью операнды следует хранить в последовательно расположенных ячейках памяти, причём младшее слово имеет наименьший адрес, следующее слово – адрес больший на 2 и т.д.
Рассмотрим вычитание с двойной точностью.
Заем 1
– 0006→A92F
0004 В837
0001 F0f8
По прежнему правильные результаты получаются при обработке операндов по 16 бит. Приведем пример программы вычисляющей выражение U=X+Y+24–Z с двойной точностью:
.
.
.
mov ax,x ; сложить числа с двойной
mov dx,x+2 ; точностью x, x+2 и y,y+2
add ax,y
adc dx,y+2
add ax,24 ; прибавить к результату число 24
adc dx,0 ; с двойной точностью
sub ax,z ; вычесть из суммы число z, z+2
sbb dx,z+2 ; с двойной точностью
mov w,ax ; запомнить весь результат в w, w+2
mov w+2,dx
.
.
.