Микропроцессорные
средства и системы
Контрольное
задание, вариант № 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