You don't need to use inline, you can add standard assembly files (using the .S file extension) to your sketch in Arduino IDE.
Here's something I just cobbled together. It's the only time I've messed with assembly so I'm sure there's a better way to do this but it does work:
blink.ino:
extern "C" {
// function prototypes
void start();
void blink();
}
void setup() {
start();
}
void loop() {
blink();
}
blink.S:
; Blink LED on PB5(Arduino Uno pin 13)
; http://forum.arduino.cc/index.php?topic=159572#msg1194604
#define __SFR_OFFSET 0
#include "avr/io.h"
.global start
.global blink
start:
sbi DDRB,5 ; Set PB5 as output
ret
blink:
ldi r20,250 ; Set the delay duration in ms. Maximum value is 255.
call delay_n_ms
sbi PORTB,5 ; Set PB5 HIGH
ldi r20,250
call delay_n_ms
cbi PORTB,5 ; Set PB5 LOW
ret
delay_n_ms:
; Delay about r20*1ms. Destroys r20, r30, and r31.
; One millisecond is about 16000 cycles at 16MHz.
; The basic loop takes about 5 cycles, so we need about 3000 loops.
ldi 31, 3000>>8 ; high(3000)
ldi 30, 3000&255 ; low(3000)
delaylp:
sbiw r30, 1
brne delaylp
subi r20, 1
brne delay_n_ms
ret
I seem to remember there was some work done on this in the last year or two so I'd recommend using a recent version of the Arduino IDE.