Forum: PC-Programmierung Assembler Befehle identisch ?


von klaus (Gast)


Lesenswert?

Sehr geehrte Damen und Herren,

ich habe folgendes Verständnisproblem.

1) STY 0,X :
dort wird der Inhalt der Speicherstelle auf die Y zeigt an die 
Speicherstelle worauf X zeigt gespeichert ?

2) ist dieser Befehl mit 1) identisch ?

LDX 0,Y ?

Vielen Dank für eure Hilfe

mfg Klaus

von Bartli (Gast)


Lesenswert?

Um was für einen Prozessor soll es sich dabei handeln?

Könnte z.B. was 6502-artiges sein. Dann würde

sty 0,x

den Inhalt des Registers y and die Adresse 0+x schreiben wobei 0+x 
modulo 256 genommen wird.

ldx 0,y

würde dann den Inhalt der Speicherstelle 0+y (wobei 0+y wieder modulo 
256 genommen wird) ins Register x laden.

von klaus (Gast)


Lesenswert?

Hallo und erstmal danke für deine Hilfe,

es handelt sich um den 8bit uP 6809...

...eins kann ich sagen, und zwar dass x bzw y nicht verschoben 
werden..also nicht als pre, bzw post decrement behandelt werden. Sie 
behalten ihren aktuellen Stand...

danke für die hilfe

von Bartli (Gast)


Lesenswert?

Den 6809 kenn ich nicht wirklich, der hat aber unter anderem 16 Bit 
breite Indexregister, dann stimmt zumindest dass was ich von wegen 
modulo 256 geschrieben habe ziemlich sicher nicht, und es wird sich um 
16 Bit Zugriffe handeln. Ist aber nur Spekulation, ich kenn den 6809 nur 
gaaanz flüchtig (vom Hörensagen oder so)

Guckst du hier:
http://koti.mbnet.fi/~atjs/mc6809/Information/6809Data.pdf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 1) STY 0,X :
>
> dort wird der Inhalt der Speicherstelle auf die Y zeigt an die
> Speicherstelle worauf X zeigt gespeichert ?

Nein. STY speichert den Inhalt des Registers Y (das übrigens 16 Bit 
breit ist) an die effektive Adresse 0x0000 + Inhalt des Registers X.

> 2) ist dieser Befehl mit 1) identisch ?
>
> LDX 0,Y ?

Nein, ganz und gar nicht. LDX lädt das Register X (das übrigens auch 16 
Bit breit ist) mit dem Inhalt der effektiven Adresse 0x0000 + Inhalt des 
Registers Y.


Im Gegensatz zur x86-Syntax, bei der die Lade- und Speicheroperation 
richtungsunabhängig MOV heißt und Richtung sowie Quelle und Ziel nur 
durch die Operanden spezifiziert wird, wird beim 6809 (und seinen 
verwandten Vorgängern) bereits durch den Namen der Operation die Quelle 
bzw. das Ziel spezifiziert.

Die Operationen werden aus Sicht der CPU beschrieben, LDx opr ist eine 
Ladeoperation, die den durch den Operanden opr spezifizierten Wert in 
das Register x lädt.
Entsprechend ist STx opr eine Speicheroperation, bei der der Inhalt 
des Registers x in die durch den Operanden opr spezifizierte Adresse 
geschrieben wird.

Eine Adressierungsart, in der direkt Daten aus einem Speicherbereich in 
einen anderen transferiert werden, existiert nicht; Daten müssen in ein 
Register geladen werden, damit sie in einer zweiten Operation wieder in 
den Speicher geschrieben werden können. Dafür bietet der 6809 sehr viele 
leistungsfähige Adressierungsarten bei recht guter Orthogonalität.

Der 6809 (ein wirklich wundervoller 8-Bit-Prozessor) hat sowohl 8- als 
auch 16-Bit-Register. A B sind die beiden 8-Bit-Akkus, D ist der daraus 
kombinierte 16-Bit-Akku, X und Y sind 16-Bit-Indexregister, U ist ein 
zweiter 16-Bit-Stackpointer etc.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.