Курсовая работа: Микропроцессорные средства и системы
Составить программу на Ассемблере, направленную на решение математической функции :
Z = lg(x+1)
Натуральный и десятичный логарифмы одного и того же числа (в данном случае - выражения) связаны простым соотношением, позволяющим переходить от одного к другому :
lgx = 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
MOVC,L
LHLD 1020h ;загрузить адрес ячейки памяти для хранения Хn
MOV M,E ;Хn => в память
INX H
MOV M,B
INX H
MOV M,C
INX H
SHLD 1020h ;запомнить адрес ячейки памяти для следующего Хn