Микропроцессорные средства и системы

Микропроцессорные средства и системы

Контрольное задание, вариант № 7

Группа Э-41-З, студент ********** 

Министерство Образования Украины

Кременчугский Государственный Политехнический Институт

Кременчуг 1998

Преобразовать числа из десятичной системы счисления в двоичную и шестнадцатеричную : 5 ; 38 ; 93 ; 175 ; 264.

Десятичная система

Двоичная система

Шестнадцатеричная система

5



0

0

0

0

40

0

1

0

1



5

38



0

0

0

1

0

0

1

1

0



26

93



0

0

1

0

1

1

1

0

1



5D

175



0

1

0

1

0

1

1

1

1



AF

264



1

0

0

0

0

1

0

0

0



108

Задача № 2

Преобразовать числа, записанные в прямом двоичном коде в десятичный и шестнадцатеричный код :  0011 ; 1000010 ; 00011011000 .

Прямой двоичный код

Десятичный код

Шестнадцатеричный код



0

0

0

0

0

0

0

0

0

1

1



3

3



0

0

0

0

1

0

0

0

0

1

0



66

42



0

0

0

1

1

0

1

1

0

0

0



216

D8

Задача № 3

Выполнить следующие арифметические действия с двоичными числами, заданными в прямом коде : 0011 + 1000110 ; 10000001 - 1000110







+







0

0

1

1







+



3





-

1

0

0

0

0

0

0

1





-

1

2

9







1

0

0

0

1

1

0







7

0







1

0

0

0

1

1

0







7

0







1

0

0

1

0

0

1







7

3





0

0

1

1

1

0

1

1







5

9





























































Задача № 4

Выполнить следующее арифметическое действие в 8-ми разрядной сетке ( старший бит содержит знак числа ) : 5 х 25







х

0

. 

0

0

1

1

0

0

1









х

2

5



































0

.

0

0

0

0

1

0

1









5





































0

0

1

1

0

0

1













































0

0

0

0

0

0

0













































0

0

1

1

0

0

1















































0

.

1

1

1

1

1

0

1





1

2

5





























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

Задача № 1

Определить размер памяти в килобайтах ( байтах ), если данная память адресуется с адреса A0EDH по адрес EF34H. Одна ячейка памяти занимает 8 бит

Для решения определим вначале кол-во ячеек памяти, адресуемых одним разрядом при 16- теричной системе адресации.



4-й разряд

3-й разряд

2-й разряд

1-й разряд

H

4096

256

16

1

H



Таким образом, начальный и конечный адреса в десятичной системе будут :

A0EDH = 4096 * 10 + 256 * 0 + 16 * 14 + 1 * 13 + 1= 41198 ;

EF34H  = 4096 * 14 + 256 * 15 + 16 * 3 + 1 * 4 +1 = 61237 .

61237 - 41198 = 20039.

20039 = 19 * 1024 + 583.

Итак, размер памяти будет 20039 байт или 19 кБ. 583 байт

Задача № 2

Символьная строка расположена в ОЗУ начиная с адреса 0006H. Известно, что под каждый символ отводится одна ячейка памяти. Число символов в строке = 731. Определить адрес для обращения к последнему символу строки. 

Порядковый номер последней ячейки памяти в десятичной системе будет 731 + 6 = 737. Переведем 738 из десятичной системы в двоичную :

73710 = 0010111000012

Теперь  переводим в 16 - теричную : 0010111000012 = 02E116    

Ответ : адрес последнего символа 02E1H

Задача № 3

Составить программу на Ассемблере с комментариями : 

Подсчитать число символов в строке, расположенной в области начиная с адреса 1000H и заканчивая адресом 2000H без учета пробелов, если известно, что каждый символ занимает одну ячейку памяти и пробел кодируется как 01H.

Максимальное число символов в строке 2000h -1000h=1000h=409610 

После выполнения программы результат будет помещен в HL.

LXI SP,3000h ; указание вершины стека

LXI H,1000h ; адрес 1-го элемента => в HL

LXI D,1000h ; загрузка счетчика в D,E

XRA A ; обнуление аккумулятора

STA 2001h ; обнуление счетчика количества символов

STA 2002h ; обнуление счетчика количества символов

MVI B,01h ; код пробела => в В

LOOP:

MOV A,M ; загрузить символ из ячейки М в аккумулятор

CMP B ; проверка на код пробела

JNZ COUNT ; если не совпадает, переход к COUNT, иначе - дальше

INX H ; адрес следующего символа

DCX D ; уменьшить счетчик

JZ EXIT ; если счетчик = 0, на выход

JMP LOOP ; в начало цикла

COUNT:

PUSH H ; выгрузить содержимое HL в стек

LHLD 2001h ; загрузить HL содержимым счетчика количества символов

INX H ; увеличить счетчик на 1

SHLD 2001h ; сохранить счетчик количества символов в 2001h, 2002h

POP H ; восстановить в HL сохраненный адрес

RET  ; возврат из подпрограммы

EXIT:

LHLD 2001h ; загрузить HL содержимым счетчика количества символов

END

Задача № 4

Составить программу на Ассемблере, направленную на решение математической функции : 

Z = lg(x+1)

Натуральный и десятичный логарифмы одного и того же числа (в данном случае  - выражения) связаны простым соотношением, позволяющим переходить от одного к другому :

lg x = Mlnx , где M = 1/ln10 = 0,434294481903252…

т.е., десятичный логарифм числа  x = натуральному логарифму этого же числа, умноженному на постоянный множитель M = 0,434294481903252…, называемый модулем перехода от натуральных логарифмов к десятичным.

В соответствии с вышесказанным, lg (x+1) = 0,434294481903252…* ln(x+1)

Для вычисления ln(x+1) используем разложение в ряд :

ln(x+1) = x-x2/2+x3/3-x4/4+x5/5-x6/6+x7/7-x8/8+…

В результате алгоритм решения сводится к четырем арифметическим действиям : + ; - ; * ; /.

Перед выполнением арифметических действий над числами с плавающей запятой условимся первое число размещать в регистрах EHL, второе – в регистрах DBC; результат операции оставлять в EHL.

Формат представления чисел с плавающей запятой :



S

P

P

P

P

P

P

P

P

M

M

M

M

M

M

M

M

M

M

M

M

M

M

M



7

6

5

4

3

2

1

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1-й байт

2-й байт

3-й байт



Где : S – знак числа ( 1-отрицательный, 0-положительный ), P0…P7 – 8-битный смещенный порядок, M1 … M15 – мантисса . Скрытый бит целой части мантиссы в нормализованных числах содержит 1

1000h

X

1001h



1003h



1003h

X2

1004h



1005h



1006h

X3

1007h



1008h



1009h

X4

100Ah



100Bh



100Ch

X5

100Dh



100Eh



100Fh

X6

1010h



1011h



1012h

X7

1013h



1014h



1020h

Адрес ячейки с текущим XN

1021h



1022h

Текущий N

До начала вычислений число Х должно быть размещено в памяти по адресам 1000h-1002h.;начало цикла вычислений

CALC1:

LXI H,1003h ; сохранение адреса первой ячейки 

SHLD 1020h ; для хранения XN

CALL LOAD ; Загрузка Х в EHL

;цикл вычисления XN

CALC2: CALL LOAD1 ;Загрузка Х в DBC CALL MULF ; Умножение чисел с плавающей точкой 

MOV B,H ; HL=>BC

MOV C,L 

LHLD 1020h ;загрузить адрес ячейки памяти для хранения Хn

MOV M,E ;Хn => в память

INX H 

MOV M,B 

INX H

MOV M,C 

INX H 

SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn

MOV H,B ;BC=>HL

MOV L,C 

LDA 1021h ;содержимое ячейки => в аккумулятор

CPI 15h ;если получены все значения Хn,

JZ CALC3 ;переход на CALC3

JMP CALC2 ;иначе- в начало

CALC3:

LXI H,1022h ;

MVI M,01h ;загрузить в ячейку 1022h делитель

LXI H,1003h ;

SHLD 1020h ;содержимое HL => в память

;цикл вычисления XN/NCALC4: MOV B,H ; HL=>BC MOV C,L  LHLD 1020h ;загрузить адрес ячейки памяти для хранения N MOV E,M ;Хn => в регистры INX H  MOV B,M  INX H MOV C,M  SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn

MOV H,B ;BC=>HL

MOV L,C 

PUSH H ;

LXI H,1022h ;N => в ячейку С

MOV C,M 

POP H ;

MVI D,00h

MVI B,00h

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

MOV B,H ; HL=>BC

MOV C,L 

LHLD 1020h ;загрузить адрес ячейки памяти для хранения Хn/N

DCX H ;

DCX H ;

MOV M,E ;Хn/N => в память

INX H 

MOV M,B 

INX H

MOV M,C 

INX H 

SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn/N

MOV H,B ;BC=>HL

MOV L,C 

PUSH H ;

LXI H,1022h ;N => в ячейку С

MOV C,M ;инкремент N

INR C

MOV M,C

POP H ;

LDA 1021h ;содержимое ячейки => в аккумулятор

CPI 15h ;если получены все значения Хn,

JZ CALC5 ;переход на CALC5

JMP CALC4 ;иначе- в начало

CALC5:

LXI H,1003h ;

SHLD 1020h ;

  ;

CALC6:

LHLD 1020h ;загрузить адрес ячейки памяти для хранения N

MOV D,M ;Хn/N => в регистры D,B,C.

INX H 

MOV B,M 

INX H

MOV C,M

INX H

SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn/N

  ;

;вычисление ln(x+1)

CALC7: CALL LOAD ; Загрузка Х в EHL CALL SUBF ; Вычитание чисел с плавающей точкой  CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C. CALL ADDF ; Сложение чисел с плавающей точкой  CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C. CALL SUBF ; Вычитание чисел с плавающей точкой 

CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C.

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

CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C.

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

CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C.

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

CALL CALC8 ; загрузка Хn+1/N+1 в регистры D,B,C.

MVI D,00h ; загрузка модуля пере-

MVI B,2Bh ; хода в DBC

MVI C,2Bh  

CALL MULF ; Умножение ln(x+1) на модуль перехода к lg

JMP EXIT ; на выход

  ;;загрузка Хn+1/N+1 в регистры D,B,C.CALC8: PUSH H LHLD 1020h ;загрузить адрес ячейки памяти для хранения N MOV D,M ;Хn/N => в регистры D,B,C. INX H  MOV B,M  INX H MOV C,M INX H SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn/N

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-0DFFh

2000h-21FFh, 2400h-25FFh, 2800h-2DFFh

4000h-41FFh, 4400h-45FFh, 4800h-4DFFh

6000h-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-0FFFh

2200h-23FFh, 2600h-27FFh, 2A00h-2FFFh

4200h-43FFh, 4600h-47FFh, 4A00h-4FFFh

6200h-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-1DFFh

3000h-31FFh, 3400h-35FFh, 3800h-3DFFh

5000h-51FFh, 5400h-55FFh, 5800h-5DFFh

7000h-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-1FFFh

3200h-33FFh, 3600h-37FFh, 3A00h-3FFFh

5200h-53FFh, 5600h-57FFh, 5A00h-5FFFh

7200h-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-8DFFh

A000h-A1FFh, A400h-A5FFh, A800h-ADFFh

C000h-C1FFh, C400h-C5FFh, C800h-CDFFh

E000h-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-8FFFh

A200h-A3FFh, A600h-A7FFh, AA00h-AFFFh

C200h-C3FFh, C600h-C7FFh, CA00h-CFFFh

E200h-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-9DFFh

B000h-B1FFh, B400h-B5FFh, B800h-BDFFh

D000h-D1FFh, D400h-D5FFh, D800h-DDFFh

F000h-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-9FFFh

B200h-B3FFh, B600h-B7FFh, BA00h-BFFFh

D200h-D3FFh, D600h-D7FFh, DA00h-DFFFh

F200h-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



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









Карта памяти :





3FFh

7FFh

BFFh

FFFh



0000h

ROM 1

RAM 1

-

0FFFh

1000h

-

1FFFh

2000h

IN-OUT 1

2FFFh

3000h

ROM 2

3FFFh

4000h



4FFFh

5000h

RAM 2

5FFFh

6000h



6FFFh

7000h

-

7FFFh

8000h

IN-OUT 2

8FFFh

9000h



9FFFh

A000h



AFFFh

B000h



BFFFh

C000h



CFFFh

D000h



DFFFh

E000h



EFFFh

F000h



FFFFh



000h

400h

800h

C00h









Задача № 3



Разделить адресное пространство 64 килобайта на 18 равных частей. В качестве дешифратора адреса используется ПЛМ. Разбиение адресного пространства показать в виде схемы и таблицы.

Размер одной части 65536 / 18 = 3640 байт. Т.к. 3640 * 18 = 65520, последние 16 ячеек не будут использоваться.

Произведем разбиение 3640 байт на участки 2N :

 3640 = 2048 + 1024 + 512 + 32 + 16 + 8

В результате получим 6 областей памяти по 18 участков в каждой :

   0000h-8FFFh ( участки размером 2048 )

   9000h-D7FFh ( участки размером 1024 )

   D800h-FBFFh ( участки размером 512 )

   FC00h-FE3Fh ( участки размером 32 )

   FE40h-FF5Fh ( участки размером 16 )

   FF60h-FFEFh ( участки размером 8 )

Прошивка ПЛМ 1



Область

Диапазон адресов

Разряды адреса





1

5

1

4

1

3

1

2

1

1

1

0

9

8

7

6

5

4

3

2

1

0

1

0000h-07FFh

0

0

0

0

0

X

X

X

X

X

X

X

X

X

X

X



9000h-93FFh

1

0

0

1

0

0

X

X

X

X

X

X

X

X

X

X



D800h-D9FFh

1

1

0

1

1

0

0

X

X

X

X

X

X

X

X

X



FC00h-FC1Fh

1

1

1

1

1

1

0

0

0

0

0

X

X

X

X

X



FE40h-FE4Fh

1

1

1

1

1

1

1

0

0

1

0

0

X

X

X

X



FF60h-FF67h

1

1

1

1

1

1

1

1

0

1

1

0

0

X

X

X

2

0800h-0FFFh

0

0

0

0

1

X

X

X

X

X

X

X

X

X

X

X



9400h-97FFh

1

0

0

1

0

1

X

X

X

X

X

X

X

X

X

X



DA00h-DBFFh

1

1

0

1

1

0

1

X

X

X

X

X

X

X

X

X



FC20h-FC3Fh

1

1

1

1

1

1

0

0

0

0

1

X

X

X

X

X



FE50h-FE5Fh

1

1

1

1

1

1

1

0

0

1

0

0

X

X

X

X



FF68h-FF6Fh

1

1

1

1

1

1

1

1

0

1

1

0

1

X

X

X

3

1000h-17FFh

0

0

0

1

0

X

X

X

X

X

X

X

X

X

X

X



9800h-9BFFh

1

0

0

1

1

0

X

X

X

X

X

X

X

X

X

X



DC00h-DDFFh

1

1

0

1

1

1

0

X

X

X

X

X

X

X

X

X



FC40h-FC5Fh

1

1

1

1

1

1

0

0

0

1

0

X

X

X

X

X



FE60h-FE6Fh

1

1

1

1

1

1

1

0

0

1

1

0

X

X

X

X



FF70h-FF77h

1

1

1

1

1

1

1

1

0

1

1

1

0

X

X

X

4

1800h-1FFFh

0

0

0

1

1

X

X

X

X

X

X

X

X

X

X

X



9C00h-9FFFh

1

0

0

1

1

1

X

X

X

X

X

X

X

X

X

X



DE00h-DFFFh

1

1

0

1

1

1

1

X

X

X

X

X

X

X

X

X



FC60h-FC7Fh

1

1

1

1

1

1

0

0

0

1

1

X

X

X

X

X



FE70h-FE7Fh

1

1

1

1

1

1

1

0

0

1

1

1

X

X

X

X



FF78h-FF7Fh

1

1

1

1

1

1

1

1

0

1

1

0

0

X

X

X

5

2000h-27FFh

0

0

1

0

0

X

X

X

X

X

X

X

X

X

X

X



A000h-A3FFh

1

0

1

0

0

0

X

X

X

X

X

X

X

X

X

X



E000h-E1FFh

1

1

1

0

0

1

0

X

X

X

X

X

X

X

X

X



FC80h-FC9Fh

1

1

1

1

1

1

0

0

1

0

0

X

X

X

X

X



FE80h-FE8Fh

1

1

1

1

1

1

1

0

1

0

0

0

X

X

X

X



FF80h-FF87h

1

1

1

1

1

1

1

1

1

0

0

0

0

X

X

X

6

2800h-2FFFh

0

0

1

0

1

X

X

X

X

X

X

X

X

X

X

X



A400h-A7FFh

1

0

1

0

0

1

X

X

X

X

X

X

X

X

X

X



E200h-E3FFh

1

1

1

0

0

0

1

X

X

X

X

X

X

X

X

X



FCA0h-FCBFh

1

1

1

1

1

1

0

0

1

0

1

X

X

X

X

X



FE90h-FE9Fh

1

1

1

1

1

1

1

0

1

0

0

1

X

X

X

X



FF88h-FF8Fh

1

1

1

1

1

1

1

1

1

0

0

0

1

X

X

X

7

3000h-37FFh

0

0

1

1

0

X

X

X

X

X

X

X

X

X

X

X



A800h-ABFFh

1

0

1

0

1

0

X

X

X

X

X

X

X

X

X

X



E400h-E5FFh

1

1

1

0

0

1

0

X

X

X

X

X

X

X

X

X



FCC0h-FCDFh

1

1

1

1

1

1

0

0

1

1

0

X

X

X

X

X



FEA0h-FEAFh

1

1

1

1

1

1

1

0

1

0

1

0

X

X

X

X



FF90h-FF97h

1

1

1

1

1

1

1

1

1

0

0

1

X

X

X

X

8

3800h-3FFFh

0

0

1

1

1

X

X

X

X

X

X

X

X

X

X

X



AC00h-AFFFh

1

0

1

0

1

1

X

X

X

X

X

X

X

X

X

X



E600h-E7FFh

1

1

1

0

0

1

1

X

X

X

X

X

X

X

X

X



FCEOh-FCFFh

1

1

1

1

1

1

0

0

1

1

1

X

X

X

X

X



FEB0h-FEBFh

1

1

1

1

1

1

1

0

1

0

1

1

X

X

X

X



FF98h-FF9Fh

1

1

1

1

1

1

1

1

1

0

0

1

X

X

X

X

9

4000h-47FFh

1

0

1

1

0

0

X

X

X

X

X

X

X

X

X

X



B000h-B3FFh

1

0

1

1

0

0

X

X

X

X

X

X

X

X

X

X



E800h-E9FFh

1

1

1

0

1

0

0

X

X

X

X

X

X

X

X

X



FD00h-FD1Fh

1

1

1

1

1

1

0

1

0

0

0

X

X

X

X

X



FEC0h-FECFh

1

1

1

1

1

1

1

0

1

1

0

0

X

X

X

X



FFA0h-FFA7h

1

1

1

1

1

1

1

1

1

0

1

0

X

X

X

X

Прошивка ПЛМ 2



Область

Диапазон адресов

Разряды адреса





1

5

1

4

1

3

1

2

1

1

1

0

9

8

7

6

5

4

3

2

1

0

10

4800h-4FFFh

0

1

0

0

1

X

X

X

X

X

X

X

X

X

X

X



B400h-B7FFh

1

0

1

1

0

1

X

X

X

X

X

X

X

X

X

X



EA00h-EBFFh

1

1

1

0

1

0

1

X

X

X

X

X

X

X

X

X



FD20h-FD3Fh

1

1

1

1

1

1

0

1

0

0

1

X

X

X

X

X



FED0h-FEDFh

1

1

1

1

1

1

1

0

1

1

0

1

X

X

X

X



FFA8h-FFAFh

1

1

1

1

1

1

1

1

1

0

1

0

1

X

X

X

11

5000h-57FFh

0

1

0

1

1

X

X

X

X

X

X

X

X

X

X

X



B800h-BBFFh

1

0

1

1

1

0

X

X

X

X

X

X

X

X

X

X



EC00h-EDFFh

1

1

1

0

1

1

0

X

X

X

X

X

X

X

X

X



FD40h-FD5Fh

1

1

1

1

1

1

0

1

0

1

0

X

X

X

X

X



FEE0h-FEEFh

1

1

1

1

1

1

1

0

1

1

1

0

X

X

X

X



FFB0h-FFB7h

1

1

1

1

1

1

1

1

1

0

1

1

0

X

X

X

12

5800h-5FFFh

0

1

0

1

0

X

X

X

X

X

X

X

X

X

X

X



BC00h-BFFFh

1

0

1

1

1

1

X

X

X

X

X

X

X

X

X

X



EE00h-EFFFh

1

1

1

0

1

1

1

X

X

X

X

X

X

X

X

X



FD60h-FD7Fh

1

1

1

1

1

1

0

1

0

1

1

X

X

X

X

X



FEF0h-FEFFh

1

1

1

1

1

1

1

0

1

1

1

1

X

X

X

X



FFB8h-FFBFh

1

1

1

1

1

1

1

1

1

0

1

1

1

X

X

X

13

6000h-67FFh

0

1

1

0

1

X

X

X

X

X

X

X

X

X

X

X



C000h-C3FFh

1

1

0

0

0

0

X

X

X

X

X

X

X

X

X

X



F000h-F1FFh

1

1

1

1

0

0

0

X

X

X

X

X

X

X

X

X



FD80h-FD9Fh

1

1

1

1

1

1

0

1

1

0

0

X

X

X

X

X



FF00h-FFOFh

1

1

1

1

1

1

1

1

0

0

0

0

X

X

X

X



FFC0h-FFC7h

1

1

1

1

1

1

1

1

1

1

0

0

0

X

X

X

14

6800h-6FFFh

0

1

1

0

0

X

X

X

X

X

X

X

X

X

X

X



C400h-C7FFh

1

1

0

0

0

1

X

X

X

X

X

X

X

X

X

X



F200h-F3FFh

1

1

1

1

0

0

1

X

X

X

X

X

X

X

X

X



FDA0h-FDBFh

1

1

1

1

1

1

0

1

1

0

1

X

X

X

X

X



FF10h-FF1Fh

1

1

1

1

1

1

1

1

0

0

0

1

X

X

X

X



FFC8h-FFCFh

1

1

1

1

1

1

1

1

1

1

0

0

1

X

X

X

15

7000h-77FFh

0

1

1

1

1

X

X

X

X

X

X

X

X

X

X

X



C800h-CBFFh

1

1

0

0

1

0

X

X

X

X

X

X

X

X

X

X



F400h-F5FFh

1

1

1

1

0

1

0

X

X

X

X

X

X

X

X

X



FDC0h-FDDFh

1

1

1

1

1

1

0

1

1

1

0

X

X

X

X

X



FF20h-FF2Fh

1

1

1

1

1

1

1

1

0

0

1

0

X

X

X

X



FFD0h-FFD7h

1

1

1

1

1

1

1

1

1

1

0

1

0

X

X

X

16

7800h-7FFFh

0

1

1

1

0

X

X

X

X

X

X

X

X

X

X

X



CC00h-CFFFh

1

1

0

0

1

1

X

X

X

X

X

X

X

X

X

X



F600h-F7FFh

1

1

1

1

0

1

1

X

X

X

X

X

X

X

X

X



FDE0h-FDFFh

1

1

1

1

1

1

0

1

1

1

1

X

X

X

X

X



FF30h-FF3Fh

1

1

1

1

1

1

1

1

0

0

1

1

X

X

X

X



FFD8h-FFDFh

1

1

1

1

1

1

1

1

1

1

0

1

X

X

X

X

17

8000h-87FFh

1

0

0

0

1

X

X

X

X

X

X

X

X

X

X

X



D000h-D3FFh

1

1

0

1

0

0

X

X

X

X

X

X

X

X

X

X



F800h-F9FFh

1

1

1

1

1

0

0

X

X

X

X

X

X

X

X

X



FE00h-FE1Fh

1

1

1

1

1

1

1

0

0

0

0

X

X

X

X

X



FF40h-FF4Fh

1

1

1

1

1

1

1

1

0

1

0

0

X

X

X

X



FFE0h-FFE7h

1

1

1

1

1

1

1

1

1

1

1

0

X

X

X

X

18

8800h-8FFFh

1

0

0

0

0

X

X

X

X

X

X

X

X

X

X

X



D400h-D7FFh

1

1

0

1

0

1

X

X

X

X

X

X

X

X

X

X



FA00h-EBFFh

1

1

1

1

1

0

1

X

X

X

X

X

X

X

X

X



FE20h-FE3Fh

1

1

1

1

1

1

1

0

0

0

1

X

X

X

X

X



FF50h-FF5Fh

1

1

1

1

1

1

1

1

0

1

0

1

X

X

X

X



FFE8h-FFEFh

1

1

1

1

1

1

1

1

1

1

1

0

X

X

X

X



В результате получена таблица прошивки ПЛМ для разделения адресного пространства 64 кБ на 18 несплошных равных частей.

Исходя из требуемого количества произведений ( 18 * 6 = 108 ) и количества выходных функций (18), выбираем в качестве элементной базы выпускаемую фирмой ADVANCED MICRO DEVICES микросхему ПЛМ PLS30S16. Эта микросхема позволяет за счет мультиплексирования четырех адресных входов с выходами иметь от 12 до 17 входов и от 8 до 12 выходов при количестве произведений до 64.

Для решения поставленной задачи берем две ПЛМ, запараллеленные входы которых подключены к шине адреса, а выходы – к входам выбора кристалла соответствующих микросхем.



Технические данные на ПЛМ PLS30S16 фирмы AMD :



- IC MASTER/Windows -





(Title)            :PLD|BIP||OTPRC

Section            :PROGRAMMABLE LOGIC DEVICES

CAT0               :PLD

Category           :Bipolar

CAT1               :BIP

MinorA             :One-Time 

Programmable~Registered/Combinatorial Outputs

CAT3               :OTPRC

MDD Code           :AMD

Manufacturer's Name:ADVANCED MICRO DEVICES

Device Number      :PLS30S16-40

Disc               :*93

Date               :10/26/92

Oper               :BAC

Transcode          :E

RBASE              :30S16

MBase              :PLS30S16

Data Book          :DATASHEET

Propagation Delay (:40

Maximum Clock (MHz):22.2

Product Terms      :64

Flip-Flops         :12

Dedicated Inputs   :12-17

Bidirectional I/Os :8-12

Standby Current (mA:225

Active Current (mA):225

Pins               :28

Has Image          :N