68000 Adressierung

OP #1564329
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?
Persönliche Seite #1564355
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)
Gast #1564360
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren