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

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

Команды сложения и вычитания, используемые микропроцессором 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

.

.

.