Einzelnen Beitrag anzeigen

Woyzeck

Registriert seit: 9. Jun 2009
60 Beiträge
 
#4

AW: Parität in Assembler

  Alt 6. Nov 2010, 20:52
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.

Geändert von mkinzler ( 6. Nov 2010 um 20:55 Uhr) Grund: Code-Tag eingefügt
  Mit Zitat antworten Zitat