again - &total + n will add n*4 to 'total'

is this an output of objdump???
looks like something is really missing here.

incorrect addressing might be result of *&, etc operations...

~d



On Saturday 04 January 2003 00:12, Mark Stokes wrote:
> Ok, I'm starting a new thread because that last bug/whatever was getting
> lost in the discussion about the DADD high byte conversation.
>
> I found something weird.  If I have the following:
> interrupt (BASICTIMER_VECTOR) wakeup BasicTimerIRQ(void)
> {
>     total = total + 25;
>     1378:     b2 50 19 00 04 02       add     #25,    &0x0204 ;#0x0019
>     137e:     82 63 06 02             adc     &0x0206         ;
>     __asm__( "dadd  %A1, %A0\n\t"
>     1382:     b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
>     1388:     82 a3 02 02             dadc    &0x0202         ;
>              "dadd  %B1, %B0" : "=rm" (total) : "i" (25));
>     __asm__("\tDADD %1, %0": "=rm" (total) : "n" (25) );
>     138c:     b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
>     __asm__("\tDADC %0": "=rm" (*((&total)+1) ) );
>     1392:     82 a3 04 02             dadc    &0x0204         ;
>     _BIC_SR_IRQ(LPM3_bits);
>     1396:     b1 c0 d0 00 00 00       bic     #208,   0(r1)   ;#0x00d0
>     //P1OUT=~P1OUT;        //invert port 1
> }
>     139c:     00 13                   reti
>
> Notice the first assignment is referencing the incorrect RAM location of
> 204 and 206.  This is curious.  However, if I remove the last ASM
> statement, it works fine:
> interrupt (BASICTIMER_VECTOR) wakeup BasicTimerIRQ(void)
> {
>
>     total = total + 25;
>     1378:     b2 50 19 00 00 02       add     #25,    &0x0200 ;#0x0019
>     137e:     82 63 02 02             adc     &0x0202         ;
>     __asm__( "dadd  %A1, %A0\n\t"
>     1382:     b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
>     1388:     82 a3 02 02             dadc    &0x0202         ;
>              "dadd  %B1, %B0" : "=rm" (total) : "i" (25));
>     __asm__("\tDADD %1, %0": "=rm" (total) : "n" (25) );
>     138c:     b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
>     //__asm__("\tDADC %0": "=rm" (*((&total)+1) ) );
>     _BIC_SR_IRQ(LPM3_bits);
>     1392:     b1 c0 d0 00 00 00       bic     #208,   0(r1)   ;#0x00d0
>     //P1OUT=~P1OUT;        //invert port 1
> }
>     1398:     00 13                   reti
>
> Any ideas? Apparently, "(*((&total)+1) )" is somehow affecting the use
> of "total" in the first assignment??!  Again, a quick check of the
> "main" function, and "total" is being referenced at 0x0200 (which is
> where it is).
>
> -Mark
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users

-- 
*********************************************************************
   ("`-''-/").___..--''"`-._     (\       Dimmy the Wild      UA1ACZ
    `6_ 6  )   `-.  (     ).`-.__.`)      Enterprise Information Sys 
    (_Y_.)'  ._   )  `._ `. ``-..-'       Nevsky prospekt,   20 / 44
  _..`--'_..-_/  /--'_.' ,'               Saint Petersburg,   Russia
 (il),-''  (li),'  ((!.-'                 +7 (812) 314-8860, 5585314
*********************************************************************




Reply via email to