AVRDisassembler is a new open source, cross platform (Windows, Mac, Linux) disassembler for the AVR microcontroller platform, written in C# (.NET Core). It supports the full instruction set as described by the ATMEL 0856 Instruction Set Documentation. The code is made available under the MIT license.

Note: Full source code for the disassembler can be found on GitHub: AVRDisassembler.

Command line usage

Using the disassembler is very straightforward. Invoke it from the command line without arguments to get its usage documented:

AVRDisassembler 0.1.0 ERROR(S): Required option 'i, input' is missing. -i, --input Required. Input file (HEX) to be disassembled. --json (Default: false) Format output as JSON. --help Display this help screen. --version Display version information.

Sample output:

... 0FE4: 50-93-2B-02 sts 0x022b, r21 ; Store Direct to Data Space 0FE8: 40-93-2A-02 sts 0x022a, r20 ; Store Direct to Data Space 0FEC: F9-01 movw r30, r18 ; Copy Register Word 0FEE: E6-56 subi r30, 0x66 ; Subtract Immediate 0FF0: FF-4F sbci r31, 0xff ; Subtract Immediate with Carry SBI 0FF2: 24-91 lpm r18, Z ; Load Program Memory 0FF4: 20-93-29-02 sts 0x0229, r18 ; Store Direct to Data Space 0FF8: 31-2C mov r3, r1 ; Copy Register 0FFA: 53-C0 rjmp .+166 ; Relative Jump 0FFC: 10-92-80-00 sts 0x0080, r1 ; Store Direct to Data Space 1000: 10-92-81-00 sts 0x0081, r1 ; Store Direct to Data Space 1004: 90-91-81-00 lds r25, 0x0081 ; Load Direct from Data Space (32-bit) 1008: 98-60 ori r25, 0x08 ; Logical OR with Immediate 100A: 90-93-81-00 sts 0x0081, r25 ; Store Direct to Data Space 100E: 90-91-81-00 lds r25, 0x0081 ; Load Direct from Data Space (32-bit) 1012: 91-60 ori r25, 0x01 ; Logical OR with Immediate 1014: 90-93-81-00 sts 0x0081, r25 ; Store Direct to Data Space 1018: 28-2F mov r18, r24 ; Copy Register 101A: 30-E0 ldi r19, 0x00 ; Load Immediate 101C: F9-01 movw r30, r18 ; Copy Register Word 101E: E2-55 subi r30, 0x52 ; Subtract Immediate 1020: FF-4F sbci r31, 0xff ; Subtract Immediate with Carry SBI 1022: E4-91 lpm r30, Z ; Load Program Memory 1024: F0-E0 ldi r31, 0x00 ; Load Immediate 1026: EE-0F add r30, r30 ; Add without Carry 1028: FF-1F adc r31, r31 ; Add with Carry 102A: E4-53 subi r30, 0x34 ; Subtract Immediate 102C: FF-4F sbci r31, 0xff ; Subtract Immediate with Carry SBI 102E: 45-91 lpm r20, Z+ ; Load Program Memory 1030: 54-91 lpm r21, Z ; Load Program Memory 1032: 50-93-24-02 sts 0x0224, r21 ; Store Direct to Data Space 1036: 40-93-23-02 sts 0x0223, r20 ; Store Direct to Data Space 103A: F9-01 movw r30, r18 ; Copy Register Word 103C: E6-56 subi r30, 0x66 ; Subtract Immediate 103E: FF-4F sbci r31, 0xff ; Subtract Immediate with Carry SBI 1040: 24-91 lpm r18, Z ; Load Program Memory 1042: 20-93-22-02 sts 0x0222, r18 ; Store Direct to Data Space ...

The fine print