BTW. Solch kurze Sequenzen fühlen sich als Inline-Funktion bzw.Makro wohler 
Code:
#define fadd(op1,op2) \
({ \
uint16_t __result = (uint16_t) op1;\
\
asm volatile ( \
"; fadd(" #op1 ", " #op2 ")\n\t"\
"add %A0, %2" "\n\t" \
"adc %B0, __zero_reg__" \
: "=r" (__result) \
: "0" (__result), "r" (op2)\
); \
\
__result; \
})
Code:
.global main
.type main, @function
main:
/* prologue: frame size=0 */
ldi r28,lo8(__stack - 0)
ldi r29,hi8(__stack - 0)
out __SP_H__,r29
out __SP_L__,r28
/* prologue end (size=4) */
ldi r18,lo8(-6) ; 10 *movqi/2 [length = 1]
ldi r24,lo8(10) ; 14 *movhi/4 [length = 2]
ldi r25,hi8(10)
/* #APP */
; fadd(op1, op2)
add r24, r18
adc r25, __zero_reg__
/* #NOAPP */
sts (result)+1,r25 ; 17 *movhi/3 [length = 4]
sts result,r24
/* epilogue: frame size=0 */
rjmp exit
Lesezeichen