Den Assembler-Code erzeuge ich mit avr-gcc. avr-gcc erzeugt immer Assembler-Code (zumindest, wenn er compiliert). Du darft ihn eben nicht löschen

(Als Option hilf dazu -save-temps. Leider bekomme ich dann teilweise Linkerfehler zusammen mit -c, die ich noch nicht nachvollziehen konnte; die Objekte scheinen jedoch gleich auszusehen...)

Generell kannst du auf 2 Wegen an den Assembler-Code kommen:
Indem man die Temporär-Dateien nicht löscht (gcc -save-temps), indem man nicht assembliert/linkt (gcc -S) oder indem man assembliert und dem Assembler sagt, daß er bitte dumpen soll. (avr-gcc -Wa,...).

Weiterhin kann man Disassembles erzeugen aus den Objekten (*.o, *.elf), indem man einen Dump macht oder den Linker anweist, es zu tun.

Welches man bevorzugt ist davon abhängig, welche Informationen man will: Intermix zwischen Assembler/C-Quelle? Maschinen-Codes zu den Assembler-Befehlen? Symbolnamen? Variablennamen? etc.

Für obiges Beispiel sieht das dann so aus:

Compiler dumpt Assembler
avr-gcc -S -save-temps -fverbose-asm ...
Code:
.global	foo
	.type	foo, @function
foo:
/* prologue: frame size=0 */
/* prologue end (size=0) */
	lds r25,command_rc5	 ;  cmd, command_rc5
	andi r25,lo8(127)	 ;  cmd,
	lds r24,Ir_data_tmp	 ;  Ir_data_tmp, Ir_data_tmp
	sbrc r24,5	 ;  Ir_data_tmp,
	ori r25,lo8(-128)	 ;  cmd,
.L2:
	sts command_rc5,r25	 ;  command_rc5, cmd
/* epilogue: frame size=0 */
	ret
/* epilogue end (size=1) */
/* function foo size 11 (10) */
	.size	foo, .-foo
Assembler dumpt Assembler
avr-gcc -c -Wa,-alhd=dump.s ...
Code:
  18               	.global	foo
  20               	foo:
  21               	.LFB2:
  22               	.LM1:
  23               	/* prologue: frame size=0 */
  24               	/* prologue end (size=0) */
  25               	.LM2:
  26 0000 9091 0000 		lds r25,command_rc5
  27 0004 9F77      		andi r25,lo8(127)
  28               	.LM3:
  29 0006 8091 0000 		lds r24,Ir_data_tmp
  30 000a 85FD      		sbrc r24,5
  31               	.LM4:
  32 000c 9068      		ori r25,lo8(-128)
  33               	.L2:
  34               	.LM5:
  35 000e 9093 0000 		sts command_rc5,r25
  36               	/* epilogue: frame size=0 */
  37 0012 0895      		ret
  38               	/* epilogue end (size=1) */
  39               	/* function foo size 11 (10) */
objdump erzeugt Dump aus Object (nicht loakatiert):
avr-objdump -d -S ...
Code:
00000000 <foo>:
uint8_t command_rc5, Ir_data_tmp; 

void foo()
{
   uint8_t cmd = command_rc5 & ~(1<<7);
   0:	90 91 00 00 	lds	r25, 0x0000
   4:	9f 77       	andi	r25, 0x7F	; 127

   if (Ir_data_tmp & (1<<5))       
   6:	80 91 00 00 	lds	r24, 0x0000
   a:	85 fd       	sbrc	r24, 5
      cmd |= (1<<7);
   c:	90 68       	ori	r25, 0x80	; 128
   
   command_rc5 = cmd;   
   e:	90 93 00 00 	sts	0x0000, r25
  12:	08 95       	ret
objdump erzeugt dump aus elf (lokatiert)
avr-objdump -S ...
Code:
0000005c <foo>:
uint8_t command_rc5, Ir_data_tmp; 

void foo()
{
   uint8_t cmd = command_rc5 & ~(1<<7);
  5c:	90 91 60 00 	lds	r25, 0x0060
  60:	9f 77       	andi	r25, 0x7F	; 127

   if (Ir_data_tmp & (1<<5))       
  62:	80 91 61 00 	lds	r24, 0x0061
  66:	85 fd       	sbrc	r24, 5
      cmd |= (1<<7);
  68:	90 68       	ori	r25, 0x80	; 128
   
   command_rc5 = cmd;   
  6a:	90 93 60 00 	sts	0x0060, r25
  6e:	08 95       	ret