nibble aus byte ausmaskieren

chopper

Level-1
Beiträge
20
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Ziffer aus byte ausmaskieren

Hallo,

ich muss aus einem Byte die Ziffern ausmaskieren. Wenn z.B. im Byte 38 steht muß ich die Zahl 38 in 3 und 8 zerlegen. Hat jemand eine Idee, wie man das am besten anstellt.

Gruß
chopper
 
Zuletzt bearbeitet:
Hallo,

ich muss aus einem Byte die Ziffern ausmaskieren. Wenn z.B. im Byte 38 steht muß ich die Zahl 38 in 3 und 8 zerlegen. Hat jemand eine Idee, wie man das am besten anstellt.

Gruß
chopper
Hallo Chopper,

das wäre der Befehl:
ITB Ganzzahl nach BCD
dann hast in einem Byte die 3 und in dem anderen die 8
Aber im BCD Format, doch das kannst Du ja dann wieder zurück wandeln
Byte trennen und dann:
BTI
 
mein Vorschlag:

Code:
FUNCTION "FC_Byte_Nibble" : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  In_Byte : BYTE ; 
END_VAR
VAR_OUTPUT
  Nibble_High : BYTE ; 
  Nibble_Low : BYTE ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     #In_Byte; //Eingangsbyte laden
      L     B#16#F; //Maskieren
      UW    ; 
      T     #Nibble_Low; //Ausgang zuweisen
      L     #In_Byte; //Eingangsbyte laden
      SRW   4; //Byte schieben
      T     #Nibble_High; //Ausgang zuweisen
END_FUNCTION
 
Hallo Chopper,

ich habe Mist geschrieben! :oops:
Zieh das Danke bei mir ab und gib es Dotzi.

Nach meiner Variante hast Du nicht die 3 und die 8 in einem separaten Byte sondern im gleichen nur als BCD.

38 als Int == 0010 0110
38 als BCD == 0011 1000
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Paule
Das Danke ist trotzdem o.k, hast dir ja schließlich Gedanken für ne Lösung gemacht.

@Dotzi
Geht wohl so auch nicht, da die Zahl nicht HEX sondern DEZ ist.
Z.B. 12 == 0000 1100
Dann steht im Low Nibble c und in High nibble 0.
Ich brauch das Ganze deziimal.

Gruß
chopper
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
so wie Paule es sagt sollte es nun funktionieren

Code:
FUNCTION "FC_Byte_Nibble" : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  In_Byte : BYTE ; 
END_VAR
VAR_OUTPUT
  Nibble_High : BYTE ; 
  Nibble_Low : BYTE ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     #In_Byte; //Eingangsbyte laden
      ITB
      L     B#16#F; //Maskieren
      UW    ; 
      T     #Nibble_Low; //Ausgang zuweisen
      L     #In_Byte; //Eingangsbyte laden
      ITB
      SRW   4; //Byte schieben
      T     #Nibble_High; //Ausgang zuweisen
END_FUNCTION
 
Ha das war doch mal Teamwork. :D

Eins fehlt aber noch:
Zum Schluss noch Nibble High und Low in Dezimal zurückwandeln.
Chopper will es ja in Dezimal.
 
Ha das war doch mal Teamwork. :D

Eins fehlt aber noch:
Zum Schluss noch Nibble High und Low in Dezimal zurückwandeln.
Chopper will es ja in Dezimal.

Nein braucht er nicht, BCD ist doch so, daß je 4 Bit eine Zahl darstellen und zwar von 0-9. Das ist für die 4 Bit genau der gleiche Code wie Dezimal oder Hex von 0-9!
 
Zurück
Oben