Ich habe Probleme mit folgendem (TrySim)-Programm.
Code:
AUF DB1
L DBLG
T MW10
L 2
/I
next: T MW10
L MW10
L 2
*I
L 2
-I
T MD100
L DBW[MD100]
L EW10
==I
SPB fert
L MW10
LOOP next
fert: L MW10
T MW0
Es soll im DB1 (besteht aus beliebig vielen INT-Einträgen) eine Zahl suchen (diese wird in EW10 vorgegeben). Danach soll die Zeile in der sich die Zahl befindet im MW0 ausgegeben werden.
Mit dem Step-Into-Modus von TrySim kann man super beobachten dass die Schleife einwandfrei durchläuft. Doch irgendwie wird nichts aus dem DB ausgelesen, obwohl dort Werte gespeichert sind. Nach dem Befehl L DBW[MD100] ist im Akku1 irgend ein Blödsinn gespeichert.
... die Adressierung über Pointer funktioniert auf Bit-Basis (1 Byte = 8 Bit // SLD 3 entspricht x 8). Dementsprechend mußtz du deinen Pointer mit 8 multiplizieren (SLD 3) wenn du ein Byte adressieren willst. Im Prinzip kannst auch (ich will dich jetzt aber nicht verunsichern) einen SLD 4 dahin setzen um auf Wort-Adressierung zu kommen. Dann kannst du dir auch den zusätzlichen multipliziere und dividiere mit/durch 2 Kram in deinem Beispiel sparen.
Wie auch immer, der ursprüngliche Teil deines Programm hat den Pointer in 2-Bit-Schritten weitergesetzt - deshalb hattest du sinnlose Werte. Da du aber Worte (INT's) einlesen wolltest mußtest du eigentlich in 2-Byte-Schritten weitersetzen. Das macht der SLD3-Befehl ...
Ich hoffe, ich konnte ein bißchen Licht ins Dunkel bringen ...
Gruß
LL
Will ich auf Byte zugreifen, brauche ich kein SLD.
Bei Zugriff auf Words, mal 8 (SLD 3).
...und was wenn ich auf DWord zugreifen will, muss man dann um 6 verschieben (SLD 6 bzw. mal 64)?
Will ich auf Byte zugreifen, brauche ich kein SLD.
Bei Zugriff auf Words, mal 8 (SLD 3).
...und was wenn ich auf DWord zugreifen will, muss man dann um 6 verschieben (SLD 6 bzw. mal 64)?
Leider Falsch ...
Bei Bit-Zugriff brauchst du kein SLD ...
Bei Byte-Zugriff dann SLD 3
Bei Wort-Zugriff dann SLD 4
und bei Doppelwort-Zugriff dann SLD 5
... wenn du den Hilfspointer dann in Einerschriitten hoch- oder runterzählst ...