Смекни!
smekni.com

Микропроцессорные средства и системы (стр. 2 из 4)

POP H ;

RET ;

;

EXIT:

HLT ; Останов

;

;

;

;Загрузка Х в EHLLOAD: LXI H,1000h ;загрузка в HL адреса порядка Х MOV E,M ;загрузка порядка Х в Е LHLD 1001h ;загрузка мантиссы в HL

RET ;

;Загрузка Х в DBC

LOAD1:

PUSH H ;выгрузка в стек HL

LXI H,1000h ;загрузка в HL адреса порядка Х

MOV D,M ;загрузка порядка Х в D

INX H ;

MOV B,M ;

INX H ;

MOV C,M ;загрузка мантиссы в BC

POP H ;загрузка из стека HL

RET ;

;Образование дополнительного кода числа в регистре HL

comp:

mov A,H ;

CMA ;

MOV H,A ;

MOV A,L ;

CMA ;

MOV L,A ;

INX H ;

RET ;

;Проверка знака и образование дополнительного кода

NEG:

MOV A,E ;

ORA E ;

JP NOTDK ;

CALL COMP ; Образование дополнительного кода числа в регистре HL

NOTDK: RET ;

;Сдвиг содержимого HL вправо на 1 бит:

SHIFT:

MOV A,H ;

RAR ;

MOV H,A ;

MOV A,L ;

RAR ;

MOV L,A ;

RET ;

;Обмен содержимого регистров EHL и DBC

SWAP:

PUSH B ;

XTHL ;

POP B ;

MOV A,D ;

MOV D,E ;

MOV E,A ;

RET ;

;Восстановление числа с плавающей точкой

REC:

MOV A,H ;

ADD A ;

MOV A,E ;

RAL ;

MOV E,A ;

MOV A,H ;

ORI 80H ;

MOV H,A ;

RET ;

;Преобразование числа в стандартный формат

PACK:

LDA SIGN ;

ADD A ;

MOV A,E ;

MOV D,A ;

RAR ;

MOV E,A ;

MOV A,H ;

ANI 7FH ;

MOV H,A ;

MOV A,D ;

RRC ;

ANI 80H ;

ORA H ;

MOV H,A ;

RET ;

;Сложение чисел с плавающей точкой

ADDF:

MOV A,D ;

XRA E ;

JP ADDF1 ;

MOV A,D ;

XRI 80H ;

MOV D,A ;

JMP SUBF ;

;

ADDF1:

MOV A,D ;

ORA B ;

ORA C ;

JZ ADDF8 ;

MOV A,E ;

ORA H ;

ORA L ;

JNZ ADDF2 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

JMP ADDF8 ;

;

ADDF2:

MOV A,D ;

STA SIGN ;

CALL REC ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

CALL REC ; Восстановление числа с плавающей точкой

;

MOV A,E ;

SUB D ;

JNC ADDF3 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

MOV A,E ;

SUB D ;

;

; В EHL большее число, в аккумуляторе разность потенциалов

ADDF3:

JZ ADDF6 ;

CPI 16 ;

JC ADDF4 ;

JMP ADDF7 ;

;

;Можно сдвигать мантиссу меньшего числа

ADDF4:

MOV E,A ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

ADDF5:

ORA A ;

CALL SHIFT ; Сдвиг содержимого HL вправо на 1 бит:

INR E ;

DCR D ;

JNZ ADDF5 ;

;

;В регистре Е общий порядок. Можно складывать мантиссы

ADDF6:

DAD B ;

JNC ADDF7 ;

INR E ;

JZ ADDF8 ;

ORA A ;

CALL SHIFT ; Сдвиг содержимого HL вправо на 1 бит:

;

ADDF7:

CALL PACK ; Преобразование числа в стандартный формат

;

ADDF8:

RET ;

;

;Вычитание чисел с плавающей точкой

SUBF:

MOV A,D ;

XRA E ;

JP SUBF1 ;

MOV A,D ;

XRI 80H ;

MOV D,A ;

JMP ADDF ; Сложение чисел с плавающей точкой

SUBF1:

MOV A,D ;

ORA B ;

ORA C ;

JZ SUBFA ;

MOV A,E ;

ORA H ;

ORA L ;

JNZ SUBF2 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

MOV A,E ;

XRI 80H ;

MOV E,A ;

JMP SUBFA ;

SUBF2:

MOV A,E ;

STA SIGN ;

CALL REC ; Восстановление числа с плавающей точкой

CALL SWAP ; Обмен содержимого регистров EHL и DBC

CALL REC ; Восстановление числа с плавающей точкой

MOV A,D ;

SUB E ;

JNZ SUBF3 ;

MOV A,B ;

CMP H ;

JNZ SUBF3 ;

MOV A,C ;

CMP L ;

JNZ SUBF3 ;

MVI E,0 ;

LXI H,0 ;

JMP SUBFA ;

;

;операнды не равны, необходимо вычитать

SUBF3:

JNC SUBF4 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

LDA SIGN ;

XRI 80H ;

STA SIGN ;

;

SUBF4:

MOV A,D ;

SUB E ;

JZ SUBF7 ;

CPI 16 ;

JC SUBF5 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

JMP SUBF ;

;

;В регистре А разность порядков, в DBC больший операнд

SUBF5:

MOV E,A ;

SUBF6:

ORA A ;

CALL SHIFT ; Сдвиг содержимого HL вправо на 1 бит:

DCR E ;

JNZ SUBF6 ;

;

;Вычесть мантиссы, результат в EHL

SUBF7:

MOV A,C ;

SUB L ;

MOV L,A ;

MOV A,B ;

SBB H ;

MOV H,A ;

MOV E,D ;

;

;нормализовать и проверить антипереполнение

SUBF8:

MOV A,H ;

ORA H ;

JM SUBF9 ;

DCR E ;

MOV A,E ;

CPI 0FFH ;

STC ;

JZ SUBFA ;

DAD H ;

JMP SUBF8 ;

;

SUBF9:

CALL PACK ; Преобразование числа в стандартный формат

SUBFA:

RET ;

;

;Умножение чисел с плавающей точкой

MULF:

MOV A,E ;

ORA H ;

ORA L ;

JZ MULF8 ;

MOV A,D ;

ORA B ;

ORA C ;

JNZ MULF1 ;

CALL SWAP ; Обмен содержимого регистров EHL и DBC

JMP MULF8 ;

;

;операнды ненулевые, можно умножать

MULF1:

MOV A,D ;

XRA E ;

STA SIGN ;

CALL REC ; Восстановление числа с плавающей точкой

CALL SWAP ; Обмен содержимого регистров EHL и DBC

CALL REC ; Восстановление числа с плавающей точкой

MOV A,D ;

ADD E ;

JC MULF2 ;

SUI 127 ;

JNC MULF3 ;

JMP MULF8 ;

;

MULF2:

ADI 129 ;

JNC MULF3 ;

JMP MULF8 ;

;

;в аккумуляторе А смещенный порядок произведения

MULF3:

MOV C,A ;

MOV E,B ;

MVI D,0 ;

MOV A,H ;

LXI H,0 ;

XCHG ;

DAD H ;

XCHG ;

;

;начало цикла умножения

MULF4:

ORA A ;

RAR ;

JNC MULF5 ;

DAD D ;

;

MULF5:

JZ MULF6 ;

XCHG ;

DAD H ;

XHG ;

JMP MULF4 ;

;

;проверить нарушение нормализации

MULF6:

JNC MULF7 ;

CALL SHIFT ; Сдвиг содержимого HL вправо на 1 бит:

INR C ;

STC ;

JZ MULF8 ;

;

MULF7:

MOV E,C ;

CALL PACK ; Преобразование числа в стандартный формат

;

MULF8:

RET ;

;

;Деление чисел с плавающей точкой

DIVF:

MOV A,E ;

ORA H ;

ORA L ;

JZ DIVF7 ;

MOV A,D ;

ORA B ;

ORA C ;

STC ;

JZ DIVF7 ;

;операнды не равны нулю

MOV A,D ;

XRA E ;

STA SIGN ;

CALL REC ; Восстановление числа с плавающей точкой

CALL SWAP ; Обмен содержимого регистров EHL и DBC

CALL REC ; Восстановление числа с плавающей точкой

CALL SWAP ; Обмен содержимого регистров EHL и DBC

MOV A,E ;

SUB D ;

JNC DIVF1 ;

ADI 127 ;

CMC ;

JC DIVF7 ; возикло антипереполнение

JMP DIVF2 ; перейти на деление мантисс

;

DIVF1:

ADI 127 ; прибавить смещение

JC DIVF7 ; возникло антипереполнение

;

;можно начинать деление мантисс

DIVF2:

STA EXP ;

XCHG ;

LXI H,0 ;

MVI A,16 ; инициализировать счетчик

PUSH PSW ;

JMP DIVF4 ; войти в цикл деления

;

DIVF3:

PUSH PSW ;

DAD H ; сдвинуть влево

XCHG ; частное и остаток

DAD H ;

XCHG ;

;

DIVF4:

PUSH D ; сохранить остаок в стеке

MOV A,E ; вычесть делитель из остатка

SUB C ;

MOV E,A ;

MOV A,D ;

SBB B ;

MOV D,A ;

JC DIVF5 ;

POP PSW ; удалить остаток из стека

INR L ;

PUSH D ;

;

DIVF5:

POP D ; извлечь предыдущий остаток

POP PSW ; извлечь счетчик

DCR A ; декремент счетчика

JNZ DIVF3 ; повторить цикл деления

; деление мантисс закончено

LDA EXP ;

MOV E,A ;

; нормализовать частное

MOV A,H ;

ORA A ;

JM DIVF6 ;

DAD H ;

DCR E ;

CPI 0FFH ; проверить антипереполнение

STC ;

JZ DIVF7 ; возникло антипереполнение

;

DIVF6:

CALL PACK ; Преобразование числа в стандартный формат

DIVF7:

RET ;

;

Контрольная работа № 3

Задача № 1

Построить модель распределения адресного пространства с указанием диапазонов адресов в 16-й системе счисления. В качестве дешифратора адресов используется стандартный дешифратор, к информационным входам которого подключены линии А15, А12, А9 16-разрядной шины адреса.

Выходы дешиф-ратора Разряды адреса Диапазоны адресов
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Y0 0 X X 0 X X 0 X X X X X X X X X 0000h-01FFh, 0400h-05FFh, 0800h-0DFFh2000h-21FFh, 2400h-25FFh, 2800h-2DFFh4000h-41FFh, 4400h-45FFh, 4800h-4DFFh6000h-61FFh, 6400h-65FFh, 6800h-6DFFh
Y1 0 X X 0 X X 1 X X X X X X X X X 0200h-03FFh, 0600h-07FFh, 0A00h-0FFFh2200h-23FFh, 2600h-27FFh, 2A00h-2FFFh4200h-43FFh, 4600h-47FFh, 4A00h-4FFFh6200h-63FFh, 6600h-67FFh, 6A00h-6FFFh
Y2 0 X X 1 X X 0 X X X X X X X X X 1000h-11FFh, 1400h-15FFh, 1800h-1DFFh3000h-31FFh, 3400h-35FFh, 3800h-3DFFh5000h-51FFh, 5400h-55FFh, 5800h-5DFFh7000h-71FFh, 7400h-75FFh, 7800h-7DFFh
Y3 0 X X 1 X X 1 X X X X X X X X X 1200h-13FFh, 1600h-17FFh, 1A00h-1FFFh3200h-33FFh, 3600h-37FFh, 3A00h-3FFFh5200h-53FFh, 5600h-57FFh, 5A00h-5FFFh7200h-73FFh, 7600h-77FFh, 7A00h-7FFFh
Y4 1 X X 0 X X 0 X X X X X X X X X 8000h-81FFh, 8400h-85FFh, 8800h-8DFFhA000h-A1FFh, A400h-A5FFh, A800h-ADFFhC000h-C1FFh, C400h-C5FFh, C800h-CDFFhE000h-E1FFh, E400h-E5FFh, E800h-EDFFh
Y5 1 X X 0 X X 1 X X X X X X X X X 8200h-83FFh, 8600h-87FFh, 8A00h-8FFFhA200h-A3FFh, A600h-A7FFh, AA00h-AFFFhC200h-C3FFh, C600h-C7FFh, CA00h-CFFFhE200h-E3FFh, E600h-E7FFh, EA00h-EFFFh
Y6 1 X X 1 X X 0 X X X X X X X X X 9000h-91FFh, 9400h-95FFh, 9800h-9DFFhB000h-B1FFh, B400h-B5FFh, B800h-BDFFhD000h-D1FFh, D400h-D5FFh, D800h-DDFFhF000h-F1FFh, F400h-F5FFh, F800h-FDFFh
Y7 1 X X 1 X X 1 X X X X X X X X X 9200h-93FFh, 9600h-97FFh, 9A00h-9FFFhB200h-B3FFh, B600h-B7FFh, BA00h-BFFFhD200h-D3FFh, D600h-D7FFh, DA00h-DFFFhF200h-F3FFh, F600h-F7FFh, FA00h-FFFFh

В итоге адресное пространство размером в 64 Кбайт разбито на диапазоны для 8 устройств. В каждом диапазоне выделено 8 участков по 512 байт и 4 участка по 1536 байт.

Задача № 2

Требуется выделить зоны адресного пространства для размещения в них адресов для устройств, указанных в таблице. В качестве адресного дешифратора используется ПЗУ. Построить схемы выделения соответствующих блоков адресов и таблицу диапазонов адресов.

Наименование устройства Диапазон адресов Емкость (Кбайт)
ПЗУ1 0000h-03FFh 1
ОЗУ1 0400h-0BFFh 2
УВВ1 2000h-2FFFh 4
ПЗУ2 3000h-4FFFh 8
ОЗУ2 5000h-6FFFh 8
УВВ2 8000h-FFFFh 32

Так как наименьший блок имеет размер 1К ячеек, то разрешающая способность дешифратора должна обеспечивать деление адресного пространства с точностью до зон размером 1К ячеек. Анализируя шесть старших разрядов адреса, получаем необходимую точность, поскольку они делят все адресное пространство обьемом 64К ячеек на 26 = 64 части по 1К ячеек, что и требуется.

Выбираем за основу ПЗУ с 10 адресными входами 2716 ( К573РФ2 ), имеющее структуру 2К*8 бит . Выходы 00 - 05 этого ПЗУ подключаем к инверсным входам выбора кристалла соответсвующих микросхем.

Разрабатываем прошивку ПЗУ.

Устройство Диапазон адресов Адресные входы Выходы
A5 A4 A3 A2 A1 A0 0 1 2 3 4 5
ROM 1 0000h-03FFh 0 0 0 0 0 0 0 1 1 1 1 1
RAM 1 0400h-07FFh 0 0 0 0 0 1 1 0 1 1 1 1
0800h-0BFFh 0 0 0 0 1 0 1 0 1 1 1 1
- 0C00h-0FFFh 0 0 0 0 1 1 1 1 1 1 1 1
1000h-13FFh 0 0 0 1 0 0 1 1 1 1 1 1
1400h-17FFh 0 0 0 1 0 1 1 1 1 1 1 1
1800h-1BFFh 0 0 0 1 1 0 1 1 1 1 1 1
1C00h-1FFFh 0 0 0 1 1 1 1 1 1 1 1 1
IN-OUT 1 2000h-23FFh 0 0 1 0 0 0 1 1 0 1 1 1
2400h-27FFh 0 0 1 0 0 1 1 1 0 1 1 1
2800h-2BFFh 0 0 1 0 1 0 1 1 0 1 1 1
2C00h-2FFFh 0 0 1 0 1 1 1 1 1 1 1 1
ROM 2 3000h-33FFh 0 0 1 1 0 0 1 1 1 1 1 1
3400h-37FFh 0 0 1 1 0 1 1 1 1 1 1 1
3800h-3BFFh 0 0 1 1 1 0 1 1 1 1 1 1
3C00h-3FFFh 0 0 1 1 1 1 1 1 1 1 1 1
4000h-43FFh 0 1 0 0 0 0 1 1 1 1 1 1
4400h-47FFh 0 1 0 0 0 1 1 1 1 1 1 1
4800h-4BFFh 0 1 0 0 1 0 1 1 1 1 1 1
4C00h-4FFFh 0 1 0 0 1 1 1 1 1 1 1 1
RAM 2 5000h-53FFh 0 1 0 1 0 0 1 1 1 1 1 1
5400h-57FFh 0 1 0 1 0 1 1 1 1 1 1 1
5800h-5BFFh 0 1 0 1 1 0 1 1 1 1 1 1
5C00h-5FFFh 0 1 0 1 1 1 1 1 1 1 1 1
6000h-63FFh 0 1 1 0 0 0 1 1 1 1 1 1
6400h-67FFh 0 1 1 0 0 1 1 1 1 1 1 1
6800h-6BFFh 0 1 1 0 1 0 1 1 1 1 1 1
6C00h-6FFFh 0 1 1 0 1 1 1 1 1 1 1 1
- 7000h-73FFh 0 1 1 1 0 0 1 1 1 1 1 1
7400h-77FFh 0 1 1 1 0 1 1 1 1 1 1 1
7800h-7BFFh 0 1 1 1 1 0 1 1 1 1 1 1
7C00h-7FFFh 0 1 1 1 1 1 1 1 1 1 1 1
Устройство Диапазон адресов Адресные входы Выходы
A5 A4 A3 A2 A1 A0 0 1 2 3 4 5
IN-OUT 2 8000h-83FFh 1 0 0 0 0 0 1 1 1 1 1 1
8400h-87FFh 1 0 0 0 0 1 1 1 1 1 1 1
8800h-8BFFh 1 0 0 0 1 0 1 1 1 1 1 1
8C00h-8FFFh 1 0 0 0 1 1 1 1 1 1 1 1
9000h-93FFh 1 0 0 1 0 0 1 1 1 1 1 1
9400h-97FFh 1 0 0 1 0 1 1 1 1 1 1 1
9800h-9BFFh 1 0 0 1 1 0 1 1 1 1 1 1
9C00h-9FFFh 1 0 0 1 1 1 1 1 1 1 1 1
A000h-A3FFh 1 0 1 0 0 0 1 1 1 1 1 1
A400h-A7FFh 1 0 1 0 0 1 1 1 1 1 1 1
A800h-ABFFh 1 0 1 0 1 0 1 1 1 1 1 1
AC00h-AFFFh 1 0 1 0 1 1 1 1 1 1 1 1
B000h-B3FFh 1 0 1 1 0 0 1 1 1 1 1 1
B400h-B7FFh 1 0 1 1 0 1 1 1 1 1 1 1
B800h-BBFFh 1 0 1 1 1 0 1 1 1 1 1 1
BC00h-BFFFh 1 0 1 1 1 1 1 1 1 1 1 1
C000h-C3FFh 1 1 0 0 0 0 1 1 1 1 1 1
C400h-C7FFh 1 1 0 0 0 1 1 1 1 1 1 1
C800h-CBFFh 1 1 0 0 1 0 1 1 1 1 1 1
CC00h-CFFFh 1 1 0 0 1 1 1 1 1 1 1 1
D000h-D3FFh 1 1 0 1 0 0 1 1 1 1 1 1
D400h-D7FFh 1 1 0 1 0 1 1 1 1 1 1 1
D800h-DBFFh 1 1 0 1 1 0 1 1 1 1 1 1
DC00h-DFFFh 1 1 0 1 1 1 1 1 1 1 1 1
E000h-E3FFh 1 1 1 0 0 0 1 1 1 1 1 1
E400h-E7FFh 1 1 1 0 0 1 1 1 1 1 1 1
E800h-EBFFh 1 1 1 0 1 0 1 1 1 1 1 1
EC00h-EFFFh 1 1 1 0 1 1 1 1 1 1 1 1
F000h-F3FFh 1 1 1 1 0 0 1 1 1 1 1 1
F400h-F7FFh 1 1 1 1 0 1 1 1 1 1 1 1
F800h-FBFFh 1 1 1 1 1 0 1 1 1 1 1 1
FC00h-FFFFh 1 1 1 1 1 1 1 1 1 1 1 1

Схема дешифратора :