Yahoo Groups archive

AVR-Chat

Index last updated: 2026-04-28 22:41 UTC

Message

logical shift operation

2009-06-26 by Антощенков Роман Викторович

Hello!

I am coding in AVRStudio 4.16 and WinAVR-20090313

 Code:
  unsigned int  i1 = 0;
  unsigned int  i2 = 0;
  unsigned char c1 = 0;

  i1 = 1024;
  i2 = i1 >> 2;
  c1 = (unsigned char)i1>>2;

  Why c1 = 0? Must be c1 = 256!

  Same in dissasemble view:
  
289:        i1 = 1024;
+00000450:   E080        LDI       R24,0x00       Load immediate
+00000451:   E094        LDI       R25,0x04       Load immediate
+00000452:   839D        STD       Y+5,R25        Store indirect with displacement
+00000453:   838C        STD       Y+4,R24        Store indirect with displacement
290:        i2 = i1 >> 2;
+00000454:   818C        LDD       R24,Y+4        Load indirect with displacement
+00000455:   819D        LDD       R25,Y+5        Load indirect with displacement
+00000456:   9596        LSR       R25            Logical shift right
+00000457:   9587        ROR       R24            Rotate right through carry
+00000458:   9596        LSR       R25            Logical shift right
+00000459:   9587        ROR       R24            Rotate right through carry
+0000045A:   839B        STD       Y+3,R25        Store indirect with displacement
+0000045B:   838A        STD       Y+2,R24        Store indirect with displacement
291:        c1 = (unsigned char)i1>>2;

Why register R24? Must be R25

+0000045C:   818C        LDD       R24,Y+4        Load indirect with displacement
+0000045D:   9586        LSR       R24            Logical shift right
+0000045E:   9586        LSR       R24            Logical shift right
+0000045F:   8389        STD       Y+1,R24        Store indirect with displacement




-- 
Best regards,
Roman Antoshchenkov
mailto:djantoxa@rambler.ru

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.