Помощь в написании студенческих работ
Антистрессовый сервис

Микропроцессорные кошти й системы

РефератПомощь в написанииУзнать стоимостьмоей работы

CALC7: CALLLOAD; Завантаження Х в EHLCALLSUBF; Віднімання чисел з плаваючою точкою CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C. CALLADDF; Складання чисел з плаваючою точкою CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C. CALLSUBF; Віднімання чисел з плаваючою точкою. Потрібна виділити зони адресного простору розміщувати у яких адрес для пристроїв, вказаних у таблиці. Як адресного… Читать ещё >

Микропроцессорные кошти й системы (реферат, курсовая, диплом, контрольная)

Оригинальную работц скачивайте в форматі *.zip.

Завдання.

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

Підрахувати кількість символів в рядку, що у області починаючи з адреси 1000H і до адресою 2000H не враховуючи прогалин, якщо відомо, кожен символ посідає один осередок пам’яті і прогалину кодується як 01H.

Максимальне число символів в рядку 2000h -1000h=1000h=409 610.

По виконанні програми результат буде поміщений у HL.

LXISP, 3000h; вказівку вершини стека.

LXIH, 1000h; адресу 1-го елемента => в HL.

LXID, 1000h; завантаження лічильника в D, E.

XRAA; обнуління аккумулятора.

STA2001h; обнуління лічильника кількості символов.

STA2002h; обнуління лічильника кількості символов.

MVIB, 01h; код прогалини => в В.

LOOP:

MOVA, M; завантажити символ з осередки М в аккумулятор

CMPB; перевірка на код пробела.

JNZCOUNT; а то й збігається, перехід до COUNT, інакше — дальше.

INXH; адресу наступного символа.

DCXD; зменшити счетчик.

JZEXIT; якщо лічильник = 0, на выход.

JMPLOOP; на початок цикла.

COUNT:

PUSHH; вивантажити вміст HL в стек.

LHLD2001h; завантажити HL вмістом лічильника кількості символов.

INXH; збільшити лічильник на 1.

SHLD2001h; зберегти лічильник кількості символів в 2001h, 2002h.

POPH; відновити у HL збережений адрес.

RET; повернення з подпрограммы.

EXIT:

LHLD2001h; завантажити HL вмістом лічильника кількості символов.

END.

Завдання № 4.

Скласти програму на Ассемблері, спрямовану влади на рішення математичної функції :

Z = lg (x+1).

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

lg x = Mlnx, де M = 1/ln10 = 0,434 294 481 903 252…

тобто., десятковий логарифм числа x = натуральному логарифму цього ж числа, помноженому на постійний множник M = 0,434 294 481 903 252…, званий модулем переходу від натуральних логарифмів до десятичным.

Відповідно до вищесказаним, lg (x+1) = 0,434 294 481 903 252…* 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.

1-ї байт.

2-ї байт.

3-й байтГде: P. 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:

LXIH, 1003h; збереження адреси першої осередки.

SHLD1020h; для зберігання XN.

CALLLOAD; Завантаження Х в EHL.

;цикл обчислення XN.

CALC2:CALLLOAD1;Загрузка Х в DBCCALLMULF; Множення чисел з плаваючою точкою.

MOVB, H; HL=>BC.

MOVC, L.

LHLD1020h;загрузить адресу осередки пам’яті для зберігання Хn.

MOVM, E;Хn => в память.

INXH.

MOVM, B.

INXH.

MOVM, C.

INXH.

SHLD1020h;запомнить адресу осередки пам’яті наступного Хn.

MOVH, B;BC=>HL.

MOVL, C.

LDA1021h;содержимое осередки => в аккумулятор

CPI15h;если отримані все значення Хn,.

JZCALC3;переход на CALC3.

JMPCALC2;иначев начало.

CALC3:

LXIH, 1022h;

MVIM, 01h;загрузить в осередок 1022h делитель.

LXIH, 1003h;

SHLD1020h;содержимое HL => в память.

;цикл обчислення XN/NCALC4:MOVB, H; HL=>BCMOVC, LLHLD1020h;загрузить адресу осередки пам’яті для зберігання NMOVE, M;Хn => в регистрыINXHMOVB, MINXHMOVC, MSHLD1020h;запомнить адресу осередки пам’яті наступного Хn.

MOVH, B;BC=>HL.

MOVL, C.

PUSHH;

LXIH, 1022h;N => в осередок С.

MOVC, M.

POPH;

MVID, 00h.

MVIB, 00h.

CALLDIVF; Розподіл чисел з плаваючою точкою.

MOVB, H; HL=>BC.

MOVC, L.

LHLD1020h;загрузить адресу осередки пам’яті для зберігання Хn/N.

DCXH;

DCXH;

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

INXH.

MOVM, B.

INXH.

MOVM, C.

INXH.

SHLD1020h;запомнить адресу осередки пам’яті наступного Хn/N.

MOVH, B;BC=>HL.

MOVL, C.

PUSHH;

LXIH, 1022h;N => в осередок С.

MOVC, M;инкремент N.

INRC.

MOVM, C.

POPH;

LDA1021h;содержимое осередки => в аккумулятор

CPI15h;если отримані все значення Хn,.

JZCALC5;переход на CALC5.

JMPCALC4;иначев начало.

CALC5:

LXIH, 1003h;

SHLD1020h;

;

CALC6:

LHLD1020h;загрузить адресу осередки пам’яті для зберігання N.

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

INXH.

MOVB, M.

INXH.

MOVC, M.

INXH.

SHLD1020h;запомнить адресу осередки пам’яті наступного Хn/N.

;

;обчислення ln (x+1).

CALC7:CALLLOAD; Завантаження Х в EHLCALLSUBF; Віднімання чисел з плаваючою точкою CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C. CALLADDF; Складання чисел з плаваючою точкою CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C. CALLSUBF; Віднімання чисел з плаваючою точкою.

CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C.

CALLADDF; Складання чисел з плаваючою точкою.

CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C.

CALLSUBF; Віднімання чисел з плаваючою точкою.

CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C.

CALLADDF; Складання чисел з плаваючою точкою.

CALLCALC8; завантаження Хn+1/N+1 в регістри D, B, C.

MVID, 00h; завантаження модуля пере;

MVIB, 2Bh; ходу в DBC.

MVIC, 2Bh.

CALLMULF; Множення ln (x+1) на модуль початку lg.

JMPEXIT; на выход.

;;завантаження Хn+1/N+1 в регістри D, B, C. CALC8:PUSHHLHLD1020h;загрузить адресу осередки пам’яті для зберігання NMOVD, M;Хn/N => в регістри D, B, C. INXHMOVB, MINXHMOVC, MINXHSHLD1020h;запомнить адресу осередки пам’яті наступного Хn/N.

POPH;

RET;

;

EXIT:

HLT; Останов.

;

;

;

;Завантаження Х в EHLLOAD: LXIH, 1000h;загрузка в HL адреси порядку ХMOVE, M;загрузка порядку Х в ЕLHLD1001h;загрузка мантиси в HL.

RET;

;Завантаження Х в DBC.

LOAD1:

PUSHH;выгрузка в стік HL.

LXIH, 1000h;загрузка в HL адреси порядку Х.

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

INXH;

MOVB, M;

INXH;

MOVC, M;загрузка мантиси в BC.

POPH;загрузка з стека HL.

RET;

;Освіта додаткового коду вересня регістрі HL.

comp:

movA, H;

CMA;

MOVH, A;

MOVA, L;

CMA;

MOVL, A;

INXH;

RET;

;Перевірка знака й освіту додаткового кода.

NEG:

MOVA, E;

ORAE;

JPNOTDK;

CALLCOMP; Освіта додаткового коду вересня регістрі HL.

NOTDK:RET;

;Зрушення вмісту HL вправо на 1 бит:

SHIFT:

MOVA, H;

RAR;

MOVH, A;

MOVA, L;

RAR;

MOVL, A;

RET;

;Обмін вмісту регістрів EHL і DBC.

SWAP:

PUSHB;

XTHL;

POPB;

MOVA, D;

MOVD, E;

MOVE, A;

RET;

;Відновлення числа з плаваючою точкой.

REC:

MOVA, H;

ADDA;

MOVA, E;

RAL;

MOVE, A;

MOVA, H;

ORI80H;

MOVH, A;

RET;

;Перетворення вересня стандартний формат.

PACK:

LDASIGN;

ADDA;

MOVA, E;

MOVD, A;

RAR;

MOVE, A;

MOVA, H;

ANI7FH;

MOVH, A;

MOVA, D;

RRC;

ANI80H;

ORAH;

MOVH, A;

RET;

;Складання чисел з плаваючою точкой.

ADDF:

MOVA, D;

XRAE;

JPADDF1;

MOVA, D;

XRI80H;

MOVD, A;

JMPSUBF;

;

ADDF1:

MOVA, D;

ORAB;

ORAC;

JZADDF8;

MOVA, E;

ORAH;

ORAL;

JNZADDF2;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

JMPADDF8;

;

ADDF2:

MOVA, D;

STASIGN;

CALLREC;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

CALLREC; Відновлення числа з плаваючою точкою.

;

MOVA, E;

SUBD;

JNCADDF3;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

MOVA, E;

SUBD;

;

; У EHL більше, в акумуляторі різницю потенциалов.

ADDF3:

JZADDF6;

CPI16;

JCADDF4;

JMPADDF7;

;

;Можна зрушувати мантиссу меншого числа.

ADDF4:

MOVE, A;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

ADDF5:

ORAA;

CALLSHIFT; Зрушення вмісту HL вправо на 1 бит:

INRE;

DCRD;

JNZADDF5;

;

;У регістрі Є загальний порядок. Можна складати мантиссы.

ADDF6:

DADB;

JNCADDF7;

INRE;

JZADDF8;

ORAA;

CALLSHIFT; Зрушення вмісту HL вправо на 1 бит:

;

ADDF7:

CALLPACK; Перетворення вересня стандартний формат.

;

ADDF8:

RET;

;

;Віднімання чисел з плаваючою точкой.

SUBF:

MOVA, D;

XRAE;

JPSUBF1;

MOVA, D;

XRI80H;

MOVD, A;

JMPADDF; Складання чисел з плаваючою точкою.

SUBF1:

MOVA, D;

ORAB;

ORAC;

JZSUBFA;

MOVA, E;

ORAH;

ORAL;

JNZSUBF2;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

MOVA, E;

XRI80H;

MOVE, A;

JMPSUBFA;

SUBF2:

MOVA, E;

STASIGN;

CALLREC; Відновлення числа з плаваючою точкою.

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

CALLREC; Відновлення числа з плаваючою точкою.

MOVA, D;

SUBE;

JNZSUBF3;

MOVA, B;

CMPH;

JNZSUBF3;

MOVA, C;

CMPL;

JNZSUBF3;

MVIE, 0;

LXIH, 0;

JMPSUBFA;

;

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

SUBF3:

JNCSUBF4;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

LDASIGN;

XRI80H;

STASIGN;

;

SUBF4:

MOVA, D;

SUBE;

JZSUBF7;

CPI16;

JCSUBF5;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

JMPSUBF;

;

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

SUBF5:

MOVE, A;

SUBF6:

ORAA;

CALLSHIFT; Зрушення вмісту HL вправо на 1 бит:

DCRE;

JNZSUBF6;

;

;Відняти мантиси, результат в EHL.

SUBF7:

MOVA, C;

SUBL;

MOVL, A;

MOVA, B;

SBBH;

MOVH, A;

MOVE, D;

;

;нормалізувати і перевірити антипереполнение.

SUBF8:

MOVA, H;

ORAH;

JMSUBF9;

DCRE;

MOVA, E;

CPI0FFH;

STC;

JZSUBFA;

DADH;

JMPSUBF8;

;

SUBF9:

CALLPACK; Перетворення вересня стандартний формат.

SUBFA:

RET;

;

;Множення чисел з плаваючою точкой.

MULF:

MOVA, E;

ORAH;

ORAL;

JZMULF8;

MOVA, D;

ORAB;

ORAC;

JNZMULF1;

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

JMPMULF8;

;

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

MULF1:

MOVA, D;

XRAE;

STASIGN;

CALLREC; Відновлення числа з плаваючою точкою.

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

CALLREC; Відновлення числа з плаваючою точкою.

MOVA, D;

ADDE;

JCMULF2;

SUI127;

JNCMULF3;

JMPMULF8;

;

MULF2:

ADI129;

JNCMULF3;

JMPMULF8;

;

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

MULF3:

MOVC, A;

MOVE, B;

MVID, 0;

MOVA, H;

LXIH, 0;

XCHG;

DADH;

XCHG;

;

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

MULF4:

ORAA;

RAR;

JNCMULF5;

DADD;

;

MULF5:

JZMULF6;

XCHG;

DADH;

XHG;

JMPMULF4;

;

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

MULF6:

JNCMULF7;

CALLSHIFT; Зрушення вмісту HL вправо на 1 бит:

INRC;

STC;

JZMULF8;

;

MULF7:

MOVE, C;

CALLPACK; Перетворення вересня стандартний формат.

;

MULF8:

RET;

;

;Розподіл чисел з плаваючою точкой.

DIVF:

MOVA, E;

ORAH;

ORAL;

JZDIVF7;

MOVA, D;

ORAB;

ORAC;

STC;

JZDIVF7;

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

MOVA, D;

XRAE;

STASIGN;

CALLREC; Відновлення числа з плаваючою точкою.

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

CALLREC; Відновлення числа з плаваючою точкою.

CALLSWAP; Обмін вмісту регістрів EHL і DBC.

MOVA, E;

SUBD;

JNCDIVF1;

ADI127;

CMC;

JCDIVF7; возикло антипереполнение.

JMPDIVF2; перейти на розподіл мантисс.

;

DIVF1:

ADI127; додати смещение.

JCDIVF7; виникло антипереполнение.

;

;можна починати розподіл мантисс.

DIVF2:

STAEXP;

XCHG;

LXIH, 0;

MVIA, 16; форматувати счетчик.

PUSHPSW;

JMPDIVF4; ввійти у цикл деления.

;

DIVF3:

PUSHPSW;

DADH; зрушити влево.

XCHG; приватне і остаток.

DADH;

XCHG;

;

DIVF4:

PUSHD; зберегти остаок в стеке.

MOVA, E; відняти дільник з остатка.

SUBC;

MOVE, A;

MOVA, D;

SBBB;

MOVD, A;

JCDIVF5;

POPPSW; видалити залишок з стека.

INRL;

PUSHD;

;

DIVF5:

POPD; витягти попередній остаток.

POPPSW; витягти счетчик.

DCRA; зменшення счетчика.

JNZDIVF3; повторити цикл деления.

; розподіл мантисс закончено.

LDAEXP;

MOVE, A;

; нормалізувати частное.

MOVA, H;

ORAA;

JMDIVF6;

DADH;

DCRE;

CPI0FFH; перевірити антипереполнение.

STC;

JZDIVF7; виникло антипереполнение.

;

DIVF6:

CALLPACK; Перетворення вересня стандартний формат.

DIVF7:

RET;

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

Виходи дешиф-ратора.

Розряди адреса.

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

Y0.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

X.

X.

X.

X.

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.

0400h-0BFFh.

УВВ1.

2000h-2FFFh.

ПЗУ2.

3000h-4FFFh.

ОЗУ2.

5000h-6FFFh.

УВВ2.

8000h-FFFFh.

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

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

Показать весь текст
Заполнить форму текущей работой