![]() |
|
|
Курсовая работа: Микропроцессорные средства и системыДо начала вычислений число Х должно быть размещено в памяти по адресам 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-разрядной шины адреса.
В итоге адресное пространство размером в 64 Кбайт разбито на диапазоны для 8 устройств. В каждом диапазоне выделено 8 участков по 512 байт и 4 участка по 1536 байт. Задача № 2 Требуется выделить зоны адресного пространства для размещения в них адресов для устройств, указанных в таблице. В качестве адресного дешифратора используется ПЗУ. Построить схемы выделения соответствующих блоков адресов и таблицу диапазонов адресов.
Так как наименьший блок имеет размер 1К ячеек, то разрешающая способность дешифратора должна обеспечивать деление адресного пространства с точностью до зон размером 1К ячеек. Анализируя шесть старших разрядов адреса, получаем необходимую точность, поскольку они делят все адресное пространство обьемом 64К ячеек на 26 = 64 части по 1К ячеек, что и требуется. Выбираем за основу ПЗУ с 10 адресными входами 2716 ( К573РФ2 ), имеющее структуру 2К*8 бит . Выходы 00 - 05 этого ПЗУ подключаем к инверсным входам выбора кристалла соответсвующих микросхем. Разрабатываем прошивку ПЗУ.
Схема дешифратора : |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |