
отчеты по лабораторным работам / общий отчет / Вычисление функции
.docЛабораторная работа по Организации ЭВМ
Вычисление функции
Выполнили: студенты группы 2100
Митрофанов Александр
Пермяков Валерий
Вычислить значение функции. cosx ~ 1 – x2/2! + x4/4! – x6/6! + и с помощью логического анализатора построить график.
Вычисление значений функции с плавающей запятой на С
#include <reg51.h>
#include <math.h>
float x;
void main()
{
x = 0;
for ( x = 0; x < 6.28; x+=0.001)
{
P3 = 127 * cos(x) + 127;
}
}
Вычисление значений функции с фиксированной запятой на С
#include <reg51.h>
unsigned char tmp;
unsigned char power (unsigned char base, unsigned char arg)
{
tmp = 100;
while (arg--)
tmp = base * tmp/100;
return tmp;
}
void main()
{
unsigned char z;
while(1)
for (z = 0; z < 100; z++)
{
P3 = 100 - power (z,2)/2 + power (z,4)/24;
}
}
Вычисление значений функции с фиксированной запятой на ассемблере
dseg at 08
tmp: ds 1
za: ds 1
zb: ds 1
zc: ds 1
zd: ds 1
ze: ds 1
stec: ds 4
RLreg MACRO x
mov A, x
rlc A
mov x, A
ENDM
cseg at 0
jmp start
cseg at 0x20
start:
mov SP,#stec-1
main:
mov r0,#0
rep:
inc r0
mov a,r0
mov r1,a
call power
mov a,#100
clr C
subb a,ze
mov tmp,a
mov 01,ze
call power
mov a,r3
add a,tmp
mov p3,a
cjne r0,#100,rep
ljmp main
power:
;r3-tmp
;r1-base
;r2-arg
mov a,r1
mov b,r1
mul ab
mov za,a
mov zb,b
mov zc,#100
call div_my
ret ;r5-return
div_my: ;zb.za/zc=ze zd=8 repeat
mov zd, #0x80
mov ze, #0
CYCL:
clr C
mov A, za
rlc A
mov za, A
mov A, zb
rlc A
mov zb, A
jc PWS
subb A, zc
jnc PARS
CONT:
mov A, zd
clr C
rrc A
mov zd, A
jnz CYCL
Ret
PWS:
clr C
subb A, zc
PARS:
mov zb, A
mov A, ze
orl A, zd
mov ze, A
sjmp CONT
ENDL:
ret
en:
end