Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС_ответы.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
21.59 Mб
Скачать

28 Асемблер. Арифметичні операції додавання та віднімання чисел зі знаком та беззнакових, з урахуванням ознаки переносу, інкрементування й декрементування

ADD (ADDition) Сложение

Назначение: сложение двух операндов, источник и приемник размерностью байт, слово или двойное слово.

add приемник,источник 

Алгоритм работы:

  • сложить операнды источник и приемник;

  • записать результат сложения в приемник;

  • установить флаги.

Состояние флагов после выполнения команды:

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

r

r

r

r

r

r

Команда add используется для сложения двух целочисленных операндов. Результат сложения помещается по адресу первого операнда. Если результат сложения выходит за границы операнда приемник (возникает переполнение), то учесть эту ситуацию следует путем анализа флага cf и последующего возможного применения команды adc. Например, сложим значения в регистре ax и области памяти ch. При сложении следует учесть возможность переполнения.

chiclo  dw   2015

rez     dd   0

...

    add  ax,chislo       ;(ax)=(ax)+ch

    mov  word ptr rez,ax

    jnc  dop_sum           ;переход, если результат не вышел за разрядную сетку

    adc  word ptr rez+2,0  ;расширить результат, для учета переноса

                           ;в старший разряд

dop_sum:

...

ADC (Addition with Carry) Сложение с переносом

Назначение: сложение двух операндов с учетом переноса из младшего разряда.

adc приемник,источник 

Алгоритм работы:

  • сложить два операнда;

  • поместить результат в первый операнд: приемник=приемник+источник;

  • в зависимости от результата установить флаги.

Состояние флагов после выполнения команды:

11

07

06

04

02

02

OF

SF

ZF

AF

PF

CF

r

r

r

r

r

r

Команда adc используется при сложении длинных двоичных чисел. Ее можно использовать как самостоятельно, так и совместно с командой add. При совместном использовании команды adc с командой add сложение младших байтов/слов/двойных слов осуществляется командой add, а уже старшие байты/слова/двойные слова складываются командой adc, учитывающей переносы из младших разрядов в старшие. Таким образом, команда adc значительно расширяет диапазон значений складываемых чисел. В приложении 7 приведен пример программы сложения двоичных чисел произвольной размерности.

.data

sl1   dd   01fe544fh

sl2   dd   005044cdh

elderREZ     db    0 ;для учета переноса из старшего разряда результата

rez  dd    0

.code

...

    mov   ax,sl1

    add   ax,sl2  ;сложение младших слов слагаемых

    mov   rez,ax

    mov   ax,sl+2

    adc   ax,sl2+2        ;сложение старших слов слагаемых плюс cf

    mov   rez+2,ax

    adc   elderREZ,0      ;учесть возможный перенос

SUB (SUBtract) Вычитание

Назначение: целочисленное вычитание.

sub операнд_1,операнд_2 

Алгоритм работы:

  • выполнить вычитание операнд_1=операнд_2-операнд_1;

  • установить флаги.

Состояние флагов после выполнения команды:

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

r

r

r

r

r

r

Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

;выполнить вычитание 64-битных значений: vich_1-vich_2