|
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
2. Программа складывает многобайтные BCD-числа, расположенные в резидентной памяти данных (РПД). Регистры R0 и R1 указывают начальные адреса слагаемых. Слагаемые расположены в РПД, начиная с младших байтов. Формат слагаемых одинаков и задается в R2 числом байтов. Результат сложения помещается на место первого слагаемого:
; Суммирование Z=W+Y
; (R0) – начальный адрес W
; (R1) – начальный адрес Y
; (R2) – длина слагаемых W и Y
CLR C; Сброс флага переноса
L: MOV A,@R0; Загрузка текущего байта W
ADDC A,@R1; Сложение
DAA; Коррекция
MOV @R0,A; Размещение текущего байта результата
INC R0; Продвижение указателей байт слагаемых
INC R1
DJNZ R2,L; Декремент R2, повтор, пока R2 не равно 0
Программа вычитает строку, указанную регистром R1, из строки, указанной регистром R0, с точностью, указанной регистром R2. После выполнения операции проверяется переполнение результата.
SUB: CLR C; 3аем=0
BEG: MOV A,@R0; Загрузка байта уменьшаемого
SUBB A,@R1; Вычитание байта
MOV @R0,A; Запоминание байта разности
INC R0; Установка указателей на следующее
INC R1; поле
DJNZ R2,BEG; Выполнение цикла до завершения операции
; После завершения цикла проверяется ситуация переполнения в последней итерации.
Дата добавления: 2015-07-11; просмотров: 92 | Нарушение авторских прав