реферат, рефераты скачать Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
реферат, рефераты скачать
реферат, рефераты скачать
МЕНЮ|
реферат, рефераты скачать
поиск
Микропроцессорные средства и системы

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

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

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

Контрольное задание по дисциплине

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

Вариант № 7

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

Преподаватель : Михальчук В.Н

Кременчуг 1998

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

Преобразовать числа из десятичной системы счисления в двоичную и

шестнадцатеричную : 5 ; 38 ; 93 ; 175 ; 264.

|Десятичная система |Двоичная система |Шестнадцатеричная |

| | |система |

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

| | |+| | | | | | | | | |+| | | |-| | | | | | | | | |-| | | |

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Задача № 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 – знак числа ( 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/N

CALC4:

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 ; Останов

;

;

;

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

LOAD:

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 бит:

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.