#include #include #include #define DIVL(dd,ds,qu,re) \ MD0=*((unsigned char *)&dd+3);\ MD1=*((unsigned char *)&dd+2);\ MD2=*((unsigned char *)&dd+1);\ MD3=*((unsigned char *)&dd);\ MD4=*((unsigned char *)&ds+1);\ MD5=*((unsigned char *)&ds);\ *((unsigned char *)&qu+3)=MD0;\ *((unsigned char *)&qu+2)=MD1;\ *((unsigned char *)&qu+1)=MD2;\ *((unsigned char *)&qu)=MD3;\ *((unsigned char *)&re+1)=MD4;\ *((unsigned char *)&re)=MD5 #define DIV(dd,ds,qu,re) \ MD0=*((unsigned char *)&dd+1);\ MD1=*((unsigned char *)&dd);\ MD4=*((unsigned char *)&ds+1);\ MD5=*((unsigned char *)&ds);\ *((unsigned char *)&qu+1)=MD0;\ *((unsigned char *)&qu)=MD1;\ *((unsigned char *)&re+1)=MD4;\ *((unsigned char *)&re)=MD5 #define MUL(md,mr,pr) \ MD0=*((unsigned char *)&md+1);\ MD4=*((unsigned char *)&mr+1);\ MD1=*((unsigned char *)&md);\ MD5=*((unsigned char *)&mr);\ *((unsigned char *)&pr+3)=MD0;\ *((unsigned char *)&pr+2)=MD1;\ *((unsigned char *)&pr+1)=MD2;\ *((unsigned char *)&pr)=MD3 #define SHL(op,er,sch) \ MD0=*((unsigned char *)&op+3);\ MD1=*((unsigned char *)&op+2);\ MD2=*((unsigned char *)&op+1);\ MD3=*((unsigned char *)&op);\ ARCON=sch;\ *((unsigned char *)&er+3)=MD0;\ *((unsigned char *)&er+2)=MD1;\ *((unsigned char *)&er+1)=MD2;\ *((unsigned char *)&er)=MD3 #define SHR(op,er,sch) \ MD0=*((unsigned char *)&op+3);\ MD1=*((unsigned char *)&op+2);\ MD2=*((unsigned char *)&op+1);\ MD3=*((unsigned char *)&op);\ ARCON=0x20|sch;\ *((unsigned char *)&er+3)=MD0;\ *((unsigned char *)&er+2)=MD1;\ *((unsigned char *)&er+1)=MD2;\ *((unsigned char *)&er)=MD3 #define NOR(op,er,sch) \ MD0=*((unsigned char *)&op+3);\ MD1=*((unsigned char *)&op+2);\ MD2=*((unsigned char *)&op+1);\ MD3=*((unsigned char *)&op);\ ARCON&=0xE0;\ *((unsigned char *)&er+3)=MD0;\ *((unsigned char *)&er+2)=MD1;\ *((unsigned char *)&er+1)=MD2;\ *((unsigned char *)&er)=MD3;\ *sch=ARCON&0x1F void main(void) { unsigned long la, lb; unsigned int ia, ib, ic, id; /* zunächst die normale ganzzahlige Division */ la=10; ia=2; lb = la/ia; /* 1738 us */ ib = la%ia; /* 2268 us */ DIVL(la,ia,lb,ib); /* 36 us */ ia=12; ib=5; MUL(ia,ib,la); la=1; SHL(la,lb,15); la=0x8000; SHL(la,lb,1); la=0x80000000; SHR(la,lb,15); while (1) { } }