Also die Berechnung sollte doch eigentlich kein Problem sein
1234 mod 2 = 0 => gerade
2345 mod 2 = 1 => ungerade
... und da hast du schon deine 0/1.
Das ist nicht der Paritätsbit. Ein Paritätsbit gibt nicht an, ob eine Zahl gerade oder ungerade ist, sondern ob die Anzahl der Einsen in binärer Darstellung gerade oder ungerade ist... Aus einer 2 = 0b0010 soll also 0b00101 = 5 werden.
meine letzten Assemblerroutinen habe ich vor 16 Jahren geschrieben, aber nach dem SHL müsste
IMHO in das erste BIT der Inhalt des 2. Bit eingetragen werden.
Auch das würde als Parität einfach nur angeben, ob Zahl gerade oder ungerade, was aber nicht die Definition der Parität ist.
Ich hab mittlerweile eine Lösung entwickelt, die nicht sonderlich elegant, aber funktionsfähig ist.
Code:
movl $15,%eax # wertübergabe
movl %eax,%edx # mit edx rechne ich
movl $0,%ecx # ecx speichert die anzahl der 1er
and $1,%edx # edx= letzte Stelle von eax
addl %edx,%ecx # summieren der quersumme
movl %eax,%edx
shrl %edx
and $1,%edx
addl %edx,%ecx
movl %eax,%edx
shrl $2,%edx
and $1,%edx
addl %edx,%ecx
movl %eax,%edx
shrl $3,%edx
and $1,%edx
addl %edx,%ecx
and $1,%ecx
shll %eax
or %ecx,%eax
Ich teste das jetzt nochmal schnell durch, aber eigentlich sollte das tun.