Wenn du auf C-Ebene mit 0 initialisiert funktioniert es also wie von mir erklärt. Wenn es nicht initialisiert ist, dann ist der Code nicht sinnvoll und damit das, was GCC erzeugt, im Rahmen dessen also voll in Ordnung.

GCC *kann* nicht wissen, was im Inline-Assembler abgeht. Wie auch? Soll er ne syntaktische und semantische Analyse des Schnippsels machen, dann ne Kontrollfluss- und Datenanalyse und wer weiß was noch? Diesen riesigen(!) Aufwand nur, um zu raten, was man mit nicht-korrektem C-Code vielleicht meinen könnte?

Wenn du die 0 in einem Register brauchst kannst zu __zero_reg__ verwenden. Das enthält immer die 0.

Oder du machst ein CLR auf ein Register. In diesem Falle ist das Register OUT-Operand und wahrscheinlich early clobber.