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







Zitieren

Lesezeichen