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

Программирование цифровых вычислительных устройств.

Числа делятся на виды:

  1. целые

  2. дробные

Могут быть :

- без знака

  • со знаком

Целые числа делят на :

  • двоичные

  • десятичные ( в двоично – десятичном коде )

Дробные числа:

- c фиксированной запятой ( ф3 )

  • с плавающей запятой ( пз )

Число могут иметь размер 1, 2, 3, … и т. д. байт

Арифмитические операции с целыми числами без знака.

Обратный код – инверсия каждого двоичного числа:

[ A ]ОБР = [ A ]ПР

использ. для выполнения операции вычитания.

Дополнительный код: [ A ]ДОП = [ A ]ОБР + 1

LDA MEM ; MEM – адрес числа в ком.

CMA

STA MEM ; число в обр. коде

INR A

STA MEM ; число в доп. Коде

00Н = 0

FFH = 255

Увеличение разрядности чисел резко уменьшает производительность МП

ADD – сложение

SUB – вычитание

ADC – сложение с учётом переноса

Пример:

; п / п сложение 2 – х целых беззнаковых

; двоичных чисел формата 8 * N

; N – число байт

; вх. пар – ры: рег. В, С – адрес мл. б. слог. 1

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

; рег. Е – кол – во N байт числа

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

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

ADD8N: MOV D, E; сохранить рег. Е

PUSH B; сохранить адрес 1

XRA A; ( CY ) 0

; многобайтное двоичное сложение

CYCLE : LDAX B ; ( A )адрес ВС

( SBB M ) ADC M ; сложить ( вычесть )

STAX B ; запомнить

INX B

INX H

DCR E

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

; восстановление регистров

MOV E, D

POP B

RET

Умножение и деление:

1010 - Мж

* 1101 - Мн

1010 - частное произведение

0000

1010

1010 _

10000010 - произведение ( рез – т )

разряды:

8 * 8 = 16

  1. * 16 = 24

16 * 16 = 32

При делении получается целое и целый остаток

Быстрое умножение и деление двоичных чисел.

Использ. команды сдвига

00000100 = 4

 сдвиг

00001000 = 8

00010000 = 16

при сдвиге влево происходит умножение на 2: Aрез. = А исх. * 2N

N – число сдвигов

Рез – т будет правильный, если не произошёл перенос из старшего разряда

00001000 = 8

00000100 = 4

00000010 = 2

т. е. при сдвиге вправо происходит деление на 2: Арез. = Аисх / 2N

00001001 = 9

 сдвиг через перенос

У = х * 6 = 4 * х + 2 * х

У = 10 * х = 8 * х + 2 * х

У = 6,5 * х = 4 * х + 2 * х + х / 2

Пример: исходное однобайтное число поступает в порт. Надо * 6,5 и записать в память

IPORT – адрес порта ввода

SAVE – адрес яч. памяти

IN IPORT ; ( A )  x

MOV C, A ; ( C )  X

RLC ; ( A ) = 2 * x

MOV B, A ; ( B )  2 * x

RLC ; ( A ) = 4 * x

ADD B ; ( A ) = ( A ) + ( B ) = 6 * x

MOV B, A ; ( B ) = 6 * x

ORA A ; ( CY )  0

MOV A, C ; ( A )  ( C ) = x

RAR ; сдвиг вправо ( А ) = х / 2

ADD B ; ( A )  ( A ) + ( B ) = 6.5 * x

STA SAVE ; запомнить

Число должно быть меньше 255 !

Упакованный формат удобен для хранения чисел в памяти, но не удобен для ввода и вывода чисел.

Неупакованный формат

Преобразование десятичного числа из неупаков. Формата в упаков. наз. упаковкой десятичн. чисел.

Обратное преобразование наз. распаковкой десятичн. чисел.

1