September 15, 2024

Disassemble a blink demo generated by The AVR toolchain

This is all to satisfy our curiosity and learn a bit about AVR.

Note that there is 22 bytes of stuff before we get to "main". Then there is a final 4 bytes (_exit and __stop_program) that never get reached given that main() contains an infinite loop.

00000000 <__vectors>:
   0:   09 c0           rjmp    .+18        ; 0x14 <__ctors_end>
   2:   0e c0           rjmp    .+28        ; 0x20 <__bad_interrupt>
   4:   0d c0           rjmp    .+26        ; 0x20 <__bad_interrupt>
   6:   0c c0           rjmp    .+24        ; 0x20 <__bad_interrupt>
   8:   0b c0           rjmp    .+22        ; 0x20 <__bad_interrupt>
   a:   0a c0           rjmp    .+20        ; 0x20 <__bad_interrupt>
   c:   09 c0           rjmp    .+18        ; 0x20 <__bad_interrupt>
   e:   08 c0           rjmp    .+16        ; 0x20 <__bad_interrupt>
  10:   07 c0           rjmp    .+14        ; 0x20 <__bad_interrupt>
  12:   06 c0           rjmp    .+12        ; 0x20 <__bad_interrupt>

00000014 <__ctors_end>:
  14:   11 24           eor r1, r1
  16:   1f be           out 0x3f, r1    ; 63
  18:   cf e9           ldi r28, 0x9F   ; 159
  1a:   cd bf           out 0x3d, r28   ; 61
  1c:   02 d0           rcall   .+4         ; 0x22 
1e: 12 c0 rjmp .+36 ; 0x44 <_exit> 00000020 <__bad_interrupt>: 20: ef cf rjmp .-34 ; 0x0 <__vectors> 00000022
: 22: 81 e0 ldi r24, 0x01 ; 1 24: 87 bb out 0x17, r24 ; 23 00000026 <.Loc.3>: 26: 18 ba out 0x18, r1 ; 24 00000028 <.Loc.5>: 28: 91 e0 ldi r25, 0x01 ; 1 0000002a <.L2>: 2a: 88 b3 in r24, 0x18 ; 24 0000002c <.Loc.8>: 2c: 89 27 eor r24, r25 2e: 88 bb out 0x18, r24 ; 24 00000030 <.LBB4>: 30: 2f eb ldi r18, 0xBF ; 191 32: 34 ed ldi r19, 0xD4 ; 212 34: 81 e0 ldi r24, 0x01 ; 1 00000036 <.L1^B1>: 36: 21 50 subi r18, 0x01 ; 1 38: 30 40 sbci r19, 0x00 ; 0 3a: 80 40 sbci r24, 0x00 ; 0 3c: e1 f7 brne .-8 ; 0x36 <.L1^B1> 3e: 00 c0 rjmp .+0 ; 0x40 00000040 : ... 00000042 <.LBE4>: 42: f3 cf rjmp .-26 ; 0x2a <.L2> 00000044 <_exit>: 44: f8 94 cli 00000046 <__stop_program>: 46: ff cf rjmp .-2 ; 0x46 <__stop_program>

Feedback? Questions? Drop me a line!

Tom's Light Info / [email protected]