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 }