ok nochmal langsam.....
der weg geht.
ein int besteht aus einem word:
0000 0000 0000 0001 = int 1
0000 0000 0000 0010 = int 2
0000 0000 0000 0011 = int 3
0000 0000 0000 0100 = int 4
0000 0000 0000 0101 = int 5
0000 0000 0100 0011 = int 69
usw... binäre zahlencodierung eben.
der zahlenformat bcd kommt aus der "alten zeit" wo alles mit 7segment anzeigen dargestellt worden ist.
--
| |
--
| |
--
1= sind dort die rechten beiden striche
2= oben, rechts oben, mitte, links unten und unten
3= oben, rechts oben, mitte, rechts unten und unten
usw.
man brauch also, um die zahlen anzeigen zu können, jede zahl in einem eigenen bereich.
123 int = 0000 0000 0111 101 binär
mit so einer zahlenfolge bzw. binärcodierung kann man keine 7segmentanzeige ansteuern.
123 int in bcd gewandelt sieht dann so aus:
0000 0001 0010 0011 jede zahl bekommt ein "halb"byte (4 bollsche werte)
ein char ist ein zeichen. diese zeichen (zb '1') sind einem HEX wert zugeordnet. b#16#31 = ist gleich das zeichen für eine 1
b = byte
16 = hexdezimale darstellung
31 = der eigentliche wert
nun ist es bei siemens so, dass ich in awl verschiedene datentypen in andere einfach reintransferieren kann.
L 123 // int zahl
int_to_bcd //wandlungsfunktion von siemens
T MW30 //word in merkerbereich
im MW30 steht nun 0000 0001 0010 0011 (binär ansicht)
L MW30
slw 4 //siemensfunktion=> schiebe links word 4, dann steht im AKKU1 0001 0010 0011 0000
//alle stellen sind binär gesehen 4 nach links geschoben worden.
srw 12 //siemensfunktion=> schiebe rechts word 12, dann steht im AKKU1 0000 0000 0000 0001
//alle stellen sind binär gesehen 12 nach rechts geschoben worden. und somit steht die dezimale 1 aleine um AKKU1
L b#16#30 //lädt eine hexidezimale 30
+i // integer addition
t char // byte als char deklariert
es steht nun eine 1 ALS ZEICHEN in dem byte.
für die zweite zahl (2):
L 123 // int zahl
int_to_bcd //wandlungsfunktion von siemens
T MW30 //word in merkerbereich
L MW30 //0000 0001 0010 0011
slw 8 //siemensfunktion=> schiebe links word 8, dann steht im AKKU1 0010 0011 0000 0000
//alle stellen sind binär gesehen 8 nach links geschoben worden.
srw 12 //siemensfunktion=> schiebe rechts word 12, dann steht im AKKU1 0000 0000 0000 0010
//alle stellen sind binär gesehen 12 nach rechts geschoben worden. und somit steht die dezimale 2 aleine um AKKU1
L b#16#30 //lädt eine hexidezimale 30
+i // integer addition
t char // byte als char deklariert
es steht nun eine 2 ALS ZEICHENin dem byte.
usw usw....
das verschieben änder sich immer um 4 nach links.
man kann natürlich auch doppelwörter schieben. sld und srd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bei doppelwörtern (dword) tauscht siemens das high und das low word.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
aufgabenstellung:
für alle die es sich jetzt mit einer cpu (oder simu) anschauen wollen gehen wie folgt vor:
im ob 1 sollte stehen:
L MW30
int_to_bcd
slw 12
srw 12
t mb40
L MD35
sld 12
srd 20
t mb41
varieablentabelle:
MW30 darstellung zahl //für die versuche nur hier verschiedenen zahlen eintragen
MW30 darstellung bool/binär
MB30 darstellung zahl
MB30 darstellung zeichen
MD30 darstellung zahl
MD30 darstellung bool/binär
MD30 gleitpunkt
MB40 darstellung zeichen
MD35 darstellung zahl //für die versuche nur hier verschiedenen zahlen eintragen
MW35 darstellung bool/binär
MW36 darstellung bool/binär
MD30 darstellung bool/binär
MB35 darstellung zeichen
MD30 gleitpunkt
MB41 darstellung zeichen
jetzt sollten jeden die zusammenhänge der verschiedenen zahlenformaten (zeichen) klar werden.
die genauen bezeichnungen für die variablentabelle können etwas ander heisen. hab kein step 7 auf dem rechner
p.s. wer rechtschreibfehler findet, darf sie behalten (hoffe habe im kopf richtig geschoben).
MfG Fanta