Команды ADDC и SUBB учитывают предыдущее состояние флажка переноса (заема), что позволяет производить вычисления с двойной точностью путем повторения операции над последующими старшими байтами операнда. Если входными данными для операции является строка целых чисел без знака, то флажок переноса установится после завершения операции при переполнении (для ADDC) или при исчезновении значащих разрядов (для SUBB). Для отрицательных данных, представленных дополнительным кодом, старший разряд старшего байта исходных данных содержит знак строки, поэтому флажок переполнения (OV) будет указывать на переполнение или исчезновение значащих разрядов.
Рассмотрим выполнение программы, суммирующей два двоичных многобайтных числа. Оба слагаемых располагаются в резидентной памяти данных (РПД), начиная с младшего байта. При сложении чисел без знака на переполнение укажет флаг С, а в случае сложения чисел со знаком – флаг OV.
N EQU 10 ; Формат операндов в байтах
ORG 20H
NUM1 DS N ; Память для первого числа
NUM2 DS N ; Память для второго числа
ORG 0C100H ; Установка программного счетчика на адрес 0C100h
MOV R0,#NUM1 ;Запись в R0 начального адреса первого числа
MOV R1,#NUM2 ;В R1 – начальный адрес второго числа
MOV R2,#N ;В R2 – формат операндов в байтах
CLR C ;Сброс переноса
L1: MOV A,@R0 ;Загрузка в аккумулятор текущего байта первого слагаемого
ADDC A,@R1 ;Сложение байт с учетом переноса
MOV @R0,A ;Размещение байта результата
INC R0 ;Продвижение указателей
INC R1
DJNZ R2,L1 ;Цикл, если не все байты просуммированы
END
|