RSS    

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

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

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


Новости


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

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

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.