Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
07/22/08 06:25
Read: times


 
#156926 - first do it in C, then
Responding to: ???'s previous message
do final polishing on the generated assembler code:

#define NUM_DIGITS 8

unsigned char __idata __at(0x60) my_num[NUM_DIGITS];

void inc_my_num()
{
    unsigned char __idata *p = my_num;
    unsigned char i = NUM_DIGITS;

    do
    {
        (*p)++;
        if( 10 == *p )
           *p = 0;
        else
           break;

        p++;
    } while (--i)


using SDCC:

   0000                     101 _inc_my_num:
                            110 ;       inc.c:7: unsigned char idata *p = my_num;
                            111 ;       inc.c:10: do
   0000 78 60               112         mov     r0,#_my_num
   0002 7A 08               113         mov     r2,#0x08
   0004                     114 00104$:
                            115 ;       inc.c:12: (*p)++;
   0004 86 03               116         mov     ar3,@r0
   0006 0B                  117         inc     r3
   0007 A6 03               118         mov     @r0,ar3
                            119 ;       inc.c:13: if( 10 == *p )
   0009 BB 0A 05            120         cjne    r3,#0x0A,00107$
                            121 ;       inc.c:14: *p = 0;
   000C 76 00               122         mov     @r0,#0x00
   000E 08                  123         inc     r0
                            124 ;       inc.c:18: p++;
                            125 ;       inc.c:19: } while (--i);
   000F DA F3               126         djnz    r2,00104$
   0011                     127 00107$:
   0011 22                  128         ret




List of 19 messages in thread
TopicAuthorDate
incrementing a large number in assembly            01/01/70 00:00      
   Wear and tear            01/01/70 00:00      
      The EEPROM is            01/01/70 00:00      
      F-RAM            01/01/70 00:00      
         F-RAM problem            01/01/70 00:00      
            what's the problem?            01/01/70 00:00      
               found a substitute            01/01/70 00:00      
   first do it in C, then            01/01/70 00:00      
      Load/Save in loop            01/01/70 00:00      
   To Answer Your Question ...            01/01/70 00:00      
      Thanks Russ - slow event            01/01/70 00:00      
   A sample code for your task            01/01/70 00:00      
      Sample code irrelevant            01/01/70 00:00      
         Socketed EEPROM?            01/01/70 00:00      
            walking writes are dead simple            01/01/70 00:00      
               Larger EEPROM = simple code            01/01/70 00:00      
            the counter is            01/01/70 00:00      
         good point            01/01/70 00:00      
            Blinkers            01/01/70 00:00      

Back to Subject List