Hallöle,
hier liegt wohl ein Missverständniss der "Constraint"-Charakter im I/O-Bereich des ASM-Codes vor. Folgender geänderter Code liefert die gewünschte "42"...
void setup()
{
Serial.begin(9600);
}
void loop()
{
asmTest(42);
}
void asmTest( uint8_t argC )
{
uint8_t outC = 0;
asm volatile
(
"cnt: INC %[outA] \n\t"
" DEC %[argA] \n\t"
" BRNE cnt \n\t"
: [argA] "+r" (argC),
[outA] "+r" (outC)
:
);
Serial.println( outC ); // gibt 42 aus wie es sein sollte
}
Die "Constraints" sind nicht einfach zu verstehen und ich musste auch zuerst etwas "um die Ecke" denken, dann aber ging es sogar mit 32Bit-Werten...
Gute Info dazu >>> Inline Assembler Cookbook
Rudi