Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <REG52.H>
#define word unsigned int
#define dword unsigned long
#define byte unsigned char
word __Mul(byte a, b)
{
word bs = b;
byte i = 0;
for (i = 0; i < 8; i++) bs = (bs + (bs & 0x01) * (a << 8)) >> 1;
return bs;
}
word __Div(byte a, byte b)
{
byte i;
word _a = a << 8;
word _b = b << 8;
for (i=0; i<8; i++)
{
if ((int)(a - _b) >= 0) a -= _b - 1;
a <<= 1;
}
return a;
}
word __Sqrt(word a)
{
word q, magic;
magic = 0x4000;
while (magic)
{
q >>= 1;
if ((int)(a - magic) >= 0)
{
a -= magic;
q |= magic;
}
magic >>= 2;
}
return q;
}
void Main()
{
int m;
//m = __Mul(P1, P2);
//P1 = m;
//P2 = m >> 8;
//m = __Div(P1, P2);
//P1 = m;
//P2 = m >> 8;
m = __Sqrt(8);
P1 = m;
P2 = m >> 8;
}