Daten aus DB auslesen

netx1

Level-1
Beiträge
91
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

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.

Könnt ihr mir weiterhelfen?
 

Anhänge

  • prog.gif
    prog.gif
    2,5 KB · Aufrufe: 26
Zuletzt bearbeitet:
mach doch mal folgendes anders :
Code:
L MW10
L 2
*I
L 2
-I
[B][COLOR=red]ITD[/COLOR][/B]
[B][COLOR=red]SLD 3
[/COLOR][/B]T MD100
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achja, bei der indirekten Adressierung muss man ja SLD 3 anwenden um einen Pointer zu erzeugen.
So funktioniert es, danke!

Doch kann mir jemand erklären warum das benötigt wird (irgendwie habe ich das noch immer nicht richtig verstanden).
 
... 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
 
Mal sehen ob ich das richtig verstehe.

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)?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal sehen ob ich das richtig verstehe.

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)?

Gruß

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 ...
 
Jetzt leuchtet es mir ein.

Eigentlich werden immer Bits adressiert. Man sucht quasi immer das 1. Bit vom Byte, Word, usw. Und z.B. beim Word 1 ist das halt das 16. Bit.

Nur 1 Byte sind 8 Bits -> *8 (=SLD 3)
16 Bits (Word) -> *16 (=SLD 4)
32 Bits (DWord) -> *32 (=SLD 5)
 
Zuletzt bearbeitet:
Zurück
Oben