Forum: Mikrocontroller und Digitale Elektronik 68000 Adressierung


von Artur L. (arser05)


Lesenswert?

Hallo,

Ich habe einen 68000-Simulator gefunden und versuche gerade die 
Adressierung beim Motorola-Prozessor zu verstehen.

Mein Testprogramm sieht so aus:
************************************************

        ORG     $1000

        MOVE.L  #$11223344,$2000
        MOVE.L  #$11223344,D7
        MOVE.B  $2000,D0
        MOVE.B  D7,D1

************************************************

Wenn ich mir nun nach Ablauf des Programms die Register D0 & D1 ansehe, 
haben sie unterschiedlichen Inhalt.

Warum ist das so?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Welchen haben sie denn?

von Udo R. S. (Gast)


Lesenswert?

Sofern mich meine jetzt 20 Jahre alten ungenutzten Kenntnisse nicht 
trügen ist das '#' Zeichen für immediate Werte und die Adressierung ist 
immer
MOVE Source, Destination

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das sehe ich auch so.

Also:

  MOVE.L  #$11223344,$2000

0x11223344 wird in Adresse 0x2000 gespeichert

  MOVE.L  #$11223344,D7

0x11223344 wird im Register D7 gespeichert

  MOVE.B  $2000,D0

Der Inhalt des Bytes(!) an Adresse 0x2000 wird
im Register D0 gespeichert.

Das müsste 0x11 sein.

  MOVE.B  D7,D1

Das niederwertige Byte aus Register D7 wird im
Register D1 gespeichert.

Auch hier müsste es 0x11 sein.


(Ich mag mich irren; 's ist fast 20 Jahre her, daß ich das letzte mal 
was mit 68k-Assembler zu tun hatte)

von juh (Gast)


Lesenswert?

Hallo,

der erste Befehl transferiert das Langwort (4 Bytes) $11223344
in den Speicher ab Adresse $2000 bis $2003,
wobei das höchstwertige byte ($11) in $2000
und das 'least signif.' ($44)      in $2003 'landet'.

Dies ist so, da der gute alte 68K eine solche Speicherfolge verwendet,
anders als z. B. seine Zeitgenossen x86, die die Bytes in umgekehrter 
Reihenfolge im Speicher ablegen.

wenn nun später das EINE Byte von $2000 in den unteren Teil des 
Registers D0 geladen wird, landet dort die $11, (im Vergleich zu $44 in 
D7->D1)

und dann können sich natürlich auch die durch die Byte-Operationen 
unbeeinflussten oberen 24 Bit der Register D0 u. D1 ja vorher sowieso 
schon unterschieden haben...

von Artur L. (arser05)


Lesenswert?

Der Prozessor ist der 68000 von Motorola(Freescale).
Falls Sie den Simulator meinen, ist es der hier:

http://www.xrmx.com/solutions/software/68k-fe/


@ Udo:

Ich habe mich wahrscheinlich missverständlich ausgedrückt - ich meine 
dass die Register unterschiedlichen Inhalt haben, obwohl mit ihnen im 
Grunde die gleichen Operationen durchgeführt werden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja, und, welche?

von Artur L. (arser05)


Lesenswert?

Den Inhalt einer Speicherstelle in eine andere kopieren. Aber das 
scheint bei Adressen und Registern unterschiedlich zu funktionieren.

von Jörg L. (nuckey)


Lesenswert?

lass ma route # weg

ick wees zwar nich watn fürn assembler verwendest,aba soweit wie ick ma 
erinnere aus meener amiga zeit gab dit keen # um konstanten oda adressen 
in de register zu schreiben.


mfg jörg

von Jörg L. (nuckey)


Lesenswert?

sry gibt dit anscheinend doch

von Artur L. (arser05)


Lesenswert?

@juh:

der Inhalt der Register am Anfang des Programms ist 0.

Es stimmt: In Register D0 steht die $00000011 und in D1 die $00000044

Danke, jedenfalls.

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.