Lineare Abbildung ?!?!
-
Okay, ich wär zutiefst beeindruckt und unheimlich dankbar wenn mir jemand dabei helfen könnte. Folgendes Problem:
Ein 8-Bit-Eingabewert (Port 1) mit Wertebereich 00000000b..11111111b soll linear auf dem dezimalen Ausgabewertebereich 0..50 ausgegeben werden.Die Gleichung dafür ist: Ausgabewert = Eingabewert * 51/256
also ungefähr Eingabewert * 1/5Heißt im Klartext:
Die ersten 5 binären Werte werden dezimal der 0 zugeordnet, die nächsten 5 der dezimalzahl 1 usw.Ich könnte das entweder in einer Tabelle machen oder eben über o.g. Gleichung. Jedoch muss ich dafür binäre Multiplikation/Division anwenden und weiß nicht so recht wie das funktioniert.
Hab mich mal "schlau" gemacht und folgendes herausgefunden:
Binäre Multiplikation (die Zahl *2)
0100
<-
1000d.h. einfach den Binärcode um eine Stelle nach links schieben.
Division (die Zahl / 2 )
0100
->
00100d.h. um eine Stelle nach rechts verschieben.
Ich hab jedoch keinen Plan wie ich das auf 1/5 bzw. die gesamte Gleichung realisieren könnte, bitte deshalb auf Knieen bettelnd um Hilfe.
Falls es echt wer verstanden hat und mir helfen kann danke ich schonmal vielmals
-
Hi!
;Vorzeichenlose 8-Bit Division mov cl, 5 ;Divisor xor ah, ah mov al, AchtBitWert ;(in al, 01h ?!) div cl ; danach ist in al das Ergebnis und in ah der Rest
MfG
-
;noch etwas genauer mit vorzeichenloser Multiplikation & Division xor eax, eax mov al, AchtBitWert mov cx, 51 mul cx shr ax, 8 ;Ergebnis in al, ax und eax
-
Hab mich mit meinem Chef mal auseinander gesetzt, der meint aber, dass das nicht funktioniert (....)
Er meinte, dass man ins Register b den Wert 5 laden soll, den Bitwert in den Akku (a). Durch den Div-Befehl kann man dann das Ergebnis im Akku finden und der Rest braucht man bei der Rechnung ja nicht.
Naja ich befürcht mal dass das für mich ein Buch mit 7 Siegeln ist, versuch mich aber trotzdem weiterhein reinzubeißen ^^
Danke fürs Helfen
-
Mit welchem Assembler programmierst du denn, bzw. fuer welche CPU?
freak11s Code (auch wenn vllt. nicht optimal) funktioniert auf einer i386-kompatiblen CPU (also mit jedem Standard-PC).
-
Kurzform ab P6:
movzx eax, AchtBitWert imul eax, 51 shr eax, 8
-
Also ich habs jetzt mit dem Register gemacht, den Wert hab ich dann durch ne Tabelle wieder für die LED-Anzeige umgewandelt.
Dummerweise hab ich nicht bedacht, dass 255/5 nicht 50 sondern 51 ergibt.. in meiner Tabelle standen jedoch nur 50 Werte. An der Stelle 51 war deshalb also der Inhalt FF. Aber alles in allem hats ganz gut hingehauen ^^Vielen Dank für die Hilfe