Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
5.93 Mб
Скачать

Сложение десятичных чисел

ADD – слож. двоичных чисел

DAA – десятич. коррекц. аккумулятора

Пример

; П / п сложения десятичн. чисел

; Вх. пар – р : рег. ВС – адрес Мл. б. слог. 1

; Рег. HL – адрес Мл. б. слог. 2

; Рег. Е – кол – во байт N

; Вых. пар – р : рег. ВС – адрес суммы

; CY – признак переполнения суммы

ADD10N: MOV D, E

PUSH B

XRA A

; сложение ВСD – чисел

CYCLE: LDAX B

ADC M ; двоичное сложение

DAA ; десятичная коррекция

STAX B

INX B

INX H

; проверка конца цикла

DCR E

JNZ CYCLE ; если ( Е )  0

; выход

MOV E, D

POP B

RET

Для вычитания коррекция не применяется поэтому так нельзя отнимать.

Вычитаемое преобр. в дополн. код и производится сложение.

Умножение и деление десятичных чисел очень сложно. Поэтому такие программы неиспользуются. Для необходимости производят преобразование десятичных чисел в двоичные, затем производят необходимые действия, а затем осуществляют обратное преобразование.

Преобразование двоичных чисел в десятичные и наоборот.

Преобраз. 2 – х – разряд. десятичн. число в эквивалентное двоичное

; Вх. пар – р : рег. А – двоич. – десят. число

; Вых. пар – р : рег. А – эквивал. двоичн. число

PR 102 : ; распаковка дв. – дес. число

MOV B, A ; копия дв. – дес. число

ANI OFH ; выделить Мл. ц.

MOV C, A ;

MOV A, B ;

ANI OFOH ; выделить Ст. ц.

RRC ; Ст. ц. * 10

MOV B, A ; в рег. в – Ст. ц. * 8

RRC

RRC ; Ст. ц. * 2

ADD B ; Ст. ц. * 10

ADD C ; в рег. А – двоичн. число

RET

Преобразование 1 – байтного двоичного числа в эквивалент. десятичном

; Вх. пар – р : рег. С – двоичное число

; Вых. пар – р : рег. HL – 3 – разр. десятичн. число

PR810 : LXI H, O

MVI B, 8 ; счётчик циклов

; сдвиг влево

CYCLE: MOV A, C

RLC

MOV C, A

; дв. – дес. удвоение суммы

MOV A, L

ADC L

DAA

MOV L, A

MOV A, H

ADC H

DAA

MOV H, A

; проверка конца цикла

DCR CYCLE

RET

Операции с целыми двоичными числами со знаком !

S = 0 – положит. число

S = 1 – отриц. число

1) прямой код – ст. разряд – знаковый, остальные разряды – этомодули числа.

0 1 1 1 1 1 1 1 = + 127

1 1 1 1 1 1 1 1 = - 127

возможно появление 2 – х видов нуля: положит. и отриц.

2) обратный код

если S = 0 обр. код совпадает с прям.

S = 1 обр. код = инверсии

0 1 0 1 0 1 0 1 – прямой код

0 1 0 1 0 1 0 1 – обр. код

1 0 1 0 1 0 1 0 – прямой код

1 1 0 1 0 1 0 1 – обр. код

возможность появления 2 – х видов нулей.

3) дополнительный код

S = 0 – доп. код совпад. с прям. код

S = 1 – [ AДОП ] = [ AОБР.] + 1 = [ ]ПР + 1

Достоинство – слож. и вычит. выполняется одинаково ; имеется только один нуль.

Недостаток – громоздкость получения доп. кода ( особенно для многобайтных чисел )

[ A ]ДОП = [ A ]ОБР + 1 = [ ]ПР + 1

[ A ]ПР = [ ] = [ AДОП ] + 1

- 1 = 1 0 0 0 0 0 0 1 – пр. код

инверсия

0 1 1 1 1 1 1 0

+ 1

0 1 1 1 1 1 1 1 = ошибка

1 1 1 1 1 1 1 1 = FFH

П / п преобраз. однобайтных чисел из прям. кода в дополнит. и наоборот

; Вх. рар – р : рег. А – исх. число

; Вых. пар – р : рег. А – вых. число

DOP : MOV C, A

RLC

JC PREOBR ; если S = 1

MOV A, C

RET

PREOBR : MOV A, C

CMA ; инверсия числа

INR A ; ( A )  ( A ) + 1

RET

; П / п преобраз. из прям. кода в допол.

; Вх. пар – ры : IPORT 1 – ввод Мл. б., IPORT 2 – ввод Ст. б.

; Рег. HL – адрес Мл. б. доп. кода в ОЗУ

DOP 2 : IN IPORT 2: Ввод Ст. б.

RLC

JC PREOBR ; если S = 1

IN IPORT 1 ; ввод Мл. б.

MOV M, A

INX H

IN IPORT 2 ; ввод Ст. б.

MOV M, A

RET

PREOBR: IN IPORT 1 : ввод Мл. б.

CMA

ADI 1

MOV M, A ; запомнить в ОЗУ

IN IPORT 2 ; ввод Ст. б.

CMA

ACI O

ORI 80 ; установить S = 1

MOV M, A

RET

1) С использованием специального порта состояний – кода ВУ выставляет данные, оно записывает в определённые ячейки порта “ 1 ”

Если D7 = 1 – данные имеются

D7 = 0 – данных нет

MAIN : LXI H, BASE

MVI C, 100 ; загрузить счётчик

WAIT : IN PORTSTAS ; ввод состояния

ANI 1000 0000 B ; выделить D7

JZ WAIT ; цикл ожидания

CALL DOP 2 ; ввод данных и преобразование

DCR C ;

JNZ WAIT ; цикл, если ( С )  0

HLT ; остановить МП

2) Использование запросов прерывания.

RST 7 – команда прерыв. вектор прерывания : 0038 H

ORG 0000H

JMP MAIN ; переход к главн. программе

ORG 0038H ; вектор прерывания

CALL DOP 2

DCR E

JNZ NEXT ; если ( С )  0

JMP EXIT

NEXT : EI

RET

ORG 0100H

MAIN : LXI H, BASE

MVI E, 100

EI ; разрешить прерывание

WAIT : JMP WAIT ; зацикливание

EXIT : HLT