скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Микропроцессорные средства и системы

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

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


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.