I am going crazy about why this assembly code works :

/* SUM BETWEEN LARGE INTEGERS */

 for (i = 0; i < digits; i++) {
      asm volatile ("rrc %1 \n\t"
                               "addc %3, %2 \n\t"
                               "mov %2, %0 \n\t"
                               "rlc %1 \n\t"

                                :"=r"(a[i]),"+r"(carry)
                                :"r"(b[i]), "r"(c[i])
                    );
   }



and this other doesn't work :

/* DIFFERENCE BETWEEN LARGE INTEGERS */
 for (i = 0; i < digits; i++) {
      asm volatile ( "rrc %1 \n\t"
                                "subc %3, %2 \n\t"
                                "mov %2,%0 \n\t"
                                "rlc %1 \n\t"        
  
                                :"=r"(a[i]), "+r"(borrow)
                                :"r"(b[i]), "r"(c[i])
                    );
   }


The first does sum between two large integer (array),  b and c, and result is stored in a , and it works fine
The second does difference but it doesnt' work !!!
The only difference is that in the second I use subc instead of addc.

_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to