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?
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
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)
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...
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.
Den Inhalt einer Speicherstelle in eine andere kopieren. Aber das scheint bei Adressen und Registern unterschiedlich zu funktionieren.
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.