how to generate an asm program listing

Would an objdump do or are you looking specifically for .asm ?

sample objdump of digitalRead in all its 'I never knew it was that big' glory -

int digitalRead(uint8_t pin)
{
	uint8_t timer = digitalPinToTimer(pin);
    1342:	68 2f       	mov	r22, r24
    1344:	70 e0       	ldi	r23, 0x00	; 0
    1346:	cb 01       	movw	r24, r22
    1348:	82 55       	subi	r24, 0x52	; 82
    134a:	9f 4f       	sbci	r25, 0xFF	; 255
    134c:	fc 01       	movw	r30, r24
    134e:	24 91       	lpm	r18, Z+
	uint8_t bit = digitalPinToBitMask(pin);
    1350:	cb 01       	movw	r24, r22
    1352:	86 56       	subi	r24, 0x66	; 102
    1354:	9f 4f       	sbci	r25, 0xFF	; 255
    1356:	fc 01       	movw	r30, r24
    1358:	44 91       	lpm	r20, Z+
	uint8_t port = digitalPinToPort(pin);
    135a:	6a 57       	subi	r22, 0x7A	; 122
    135c:	7f 4f       	sbci	r23, 0xFF	; 255
    135e:	fb 01       	movw	r30, r22
    1360:	94 91       	lpm	r25, Z+

	if (port == NOT_A_PIN) return LOW;
    1362:	99 23       	and	r25, r25
    1364:	19 f4       	brne	.+6      	; 0x136c <digitalRead+0x2a>
    1366:	20 e0       	ldi	r18, 0x00	; 0
    1368:	30 e0       	ldi	r19, 0x00	; 0
    136a:	3c c0       	rjmp	.+120    	; 0x13e4 <digitalRead+0xa2>

	// If the pin that support PWM output, we need to turn it off
	// before getting a digital reading.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);
    136c:	22 23       	and	r18, r18
    136e:	51 f1       	breq	.+84     	; 0x13c4 <digitalRead+0x82>
//
//static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline));
//static inline void turnOffPWM(uint8_t timer)
static void turnOffPWM(uint8_t timer)
{
	switch (timer)
    1370:	23 30       	cpi	r18, 0x03	; 3
    1372:	71 f0       	breq	.+28     	; 0x1390 <digitalRead+0x4e>
    1374:	24 30       	cpi	r18, 0x04	; 4
    1376:	28 f4       	brcc	.+10     	; 0x1382 <digitalRead+0x40>
    1378:	21 30       	cpi	r18, 0x01	; 1
    137a:	a1 f0       	breq	.+40     	; 0x13a4 <digitalRead+0x62>
    137c:	22 30       	cpi	r18, 0x02	; 2
    137e:	11 f5       	brne	.+68     	; 0x13c4 <digitalRead+0x82>
    1380:	14 c0       	rjmp	.+40     	; 0x13aa <digitalRead+0x68>
    1382:	26 30       	cpi	r18, 0x06	; 6
    1384:	b1 f0       	breq	.+44     	; 0x13b2 <digitalRead+0x70>
    1386:	27 30       	cpi	r18, 0x07	; 7
    1388:	c1 f0       	breq	.+48     	; 0x13ba <digitalRead+0x78>
    138a:	24 30       	cpi	r18, 0x04	; 4
    138c:	d9 f4       	brne	.+54     	; 0x13c4 <digitalRead+0x82>
    138e:	04 c0       	rjmp	.+8      	; 0x1398 <digitalRead+0x56>
	{
		#if defined(TCCR1A) && defined(COM1A1)
		case TIMER1A:   cbi(TCCR1A, COM1A1);    break;
    1390:	80 91 80 00 	lds	r24, 0x0080
    1394:	8f 77       	andi	r24, 0x7F	; 127
    1396:	03 c0       	rjmp	.+6      	; 0x139e <digitalRead+0x5c>
		#endif
		#if defined(TCCR1A) && defined(COM1B1)
		case TIMER1B:   cbi(TCCR1A, COM1B1);    break;
    1398:	80 91 80 00 	lds	r24, 0x0080
    139c:	8f 7d       	andi	r24, 0xDF	; 223
    139e:	80 93 80 00 	sts	0x0080, r24
    13a2:	10 c0       	rjmp	.+32     	; 0x13c4 <digitalRead+0x82>
		#if defined(TCCR2) && defined(COM21)
		case  TIMER2:   cbi(TCCR2, COM21);      break;
		#endif
		
		#if defined(TCCR0A) && defined(COM0A1)
		case  TIMER0A:  cbi(TCCR0A, COM0A1);    break;
    13a4:	84 b5       	in	r24, 0x24	; 36
    13a6:	8f 77       	andi	r24, 0x7F	; 127
    13a8:	02 c0       	rjmp	.+4      	; 0x13ae <digitalRead+0x6c>
		#endif
		
		#if defined(TIMER0B) && defined(COM0B1)
		case  TIMER0B:  cbi(TCCR0A, COM0B1);    break;
    13aa:	84 b5       	in	r24, 0x24	; 36
    13ac:	8f 7d       	andi	r24, 0xDF	; 223
    13ae:	84 bd       	out	0x24, r24	; 36
    13b0:	09 c0       	rjmp	.+18     	; 0x13c4 <digitalRead+0x82>
		#endif
		#if defined(TCCR2A) && defined(COM2A1)
		case  TIMER2A:  cbi(TCCR2A, COM2A1);    break;
    13b2:	80 91 b0 00 	lds	r24, 0x00B0
    13b6:	8f 77       	andi	r24, 0x7F	; 127
    13b8:	03 c0       	rjmp	.+6      	; 0x13c0 <digitalRead+0x7e>
		#endif
		#if defined(TCCR2A) && defined(COM2B1)
		case  TIMER2B:  cbi(TCCR2A, COM2B1);    break;
    13ba:	80 91 b0 00 	lds	r24, 0x00B0
    13be:	8f 7d       	andi	r24, 0xDF	; 223
    13c0:	80 93 b0 00 	sts	0x00B0, r24

	// If the pin that support PWM output, we need to turn it off
	// before getting a digital reading.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	if (*portInputRegister(port) & bit) return HIGH;
    13c4:	89 2f       	mov	r24, r25
    13c6:	90 e0       	ldi	r25, 0x00	; 0
    13c8:	88 0f       	add	r24, r24
    13ca:	99 1f       	adc	r25, r25
    13cc:	84 58       	subi	r24, 0x84	; 132
    13ce:	9f 4f       	sbci	r25, 0xFF	; 255
    13d0:	fc 01       	movw	r30, r24
    13d2:	a5 91       	lpm	r26, Z+
    13d4:	b4 91       	lpm	r27, Z+
    13d6:	8c 91       	ld	r24, X
    13d8:	20 e0       	ldi	r18, 0x00	; 0
    13da:	30 e0       	ldi	r19, 0x00	; 0
    13dc:	84 23       	and	r24, r20
    13de:	11 f0       	breq	.+4      	; 0x13e4 <digitalRead+0xa2>
    13e0:	21 e0       	ldi	r18, 0x01	; 1
    13e2:	30 e0       	ldi	r19, 0x00	; 0
	return LOW;
}
    13e4:	c9 01       	movw	r24, r18
    13e6:	08 95       	ret

Duane B

rcarduino.blogspot.com