www.pudn.com > ÓÃCÓïÑÔ¶ÁдCF¿¨³ÌÐò.zip > Math32.c


// Hoarder board software http://vadim.www.media.mit.edu/Hoarder/Hoarder.htm 
// Copyright (C) 2001-2002 MIT Media Laboratory 
// Programmed by Vadim Gerasimov  
 
// 32-bit arithmetic  
#define move32(to,from) {to[0]=from[0];to[1]=from[1];to[2]=from[2];to[3]=from[3];} 
#define zero32(n) {n[0]=0;n[1]=0;n[2]=0;n[3]=0;} 
#define is_zero32(n) ((n[0]|n[1]|n[2]|n[3])==0) 
#define inc32(n) {if(++n[0]==0)if(++n[1]==0)if(++n[2]==0)++n[3];} 
 
void dec32 (char* n) { 
  if (n[0]--==0) if(n[1]--==0) if (n[2]--==0) --n[3]; 
} 
 
void add32 (char* a, char* b) 
{ 
   byte r[4]; 
 
   r[0] = *(b); 
   r[1] = *(b + 1); 
   r[2] = *(b + 2); 
   r[3] = *(b + 3); 
 
#asm 
   movf    a,w 
   movwf   4 
   movf    r[0],w 
   addwf   0,f 
   movf    r[1],w 
   incf    4,f 
   btfsc   3,0 
   incfsz  r[1],w 
   addwf   0,f 
   movf    r[2],w 
   incf    4,f 
   btfsc   3,0 
   incfsz  r[2],w 
   addwf   0,f 
   movf    r[3],w 
   incf    4,f 
   btfsc   3,0 
   incfsz  r[3],w 
   addwf   0,f 
#endasm 
} 
 
void sub32(char* a, char* b) { // a = a - b 
   byte r[4]; 
   r[0] = *(b); 
   r[1] = *(b + 1); 
   r[2] = *(b + 2); 
   r[3] = *(b + 3); 
#asm 
   movf    a,w 
   movwf   4 
   movf    r[0],w 
   subwf   0,f 
   movf    r[1],w 
   incf    4,f 
   btfss   3,0 
   incfsz  r[1],w 
   subwf   0,f 
   movf    r[2],w 
   incf    4,f 
   btfss   3,0 
   incfsz  r[2],w 
   subwf   0,f 
   movf    r[3],w 
   incf    4,f 
   btfss   3,0 
   incfsz  r[3],w 
   subwf   0,f 
#endasm 
}