Forum

Einloggen | Registrieren | RSS  

Hilfe bei Aufgabe zu Registern/RAM (Big Endian) (Computertechnik)

verfasst von Eberhard(R)  E-Mail, 30.12.2016, 18:01 Uhr

» Es ergibt sich allerdings ein Widerspruch:. Da die Aufgabe "Big Endien"
» heißt, sollte das jedenfalls bedeuten, dass Move.B D0 mit 10 die $500000
» beschreibt. Jedoch macht der das wie Little Endien, also von der 40
» angefangen. Bei Move.L ist das wieder rum richtig.
»
» Wo habe ich da meinen Denkfehler?

Offensichtlich handelt es sich um Assembler-Befehle für einen 68K-Kern (= Big Endian) im 16-Bit-Mode.
Alle Befehle sind meines Erachtens korrekt und die in Blau angegebenen Speicherinhalte ebenfalls.

Egal, ob MOVE.B, MOVE.W oder MOVE.L, bei "Big Endian" wird bei einem MOVE Richtung Speicher immer das höchstwertige Byte an die im Befehl spezifizierte Speicheradresse geschrieben und die weiteren niederwertigen Bytes (sofern es welche gibt) an die nächst höhere Speicheradresse.

Bei .W und .L müssen es immer gerade Speicheradressen sein. Bei .B dürfen es dagegen gerade und ungerade Speicheradressen sein (das wird dann am Speicher abhängig von Adresse A0 per Signal /UDS und /LDS unterschieden).

D.h. bei MOVE.B wird nur ein Byte (nämlich das niederwertige Byte $40 des D0-Registers; das ist offensichtlich das Detail, das du noch nicht verstanden hast) an die angegebene Speicheradresse geschrieben, bei .W nur zwei Bytes (nämlich die beiden niederwertigen Bytes $3040 des D0-Registers) und bei .L alle vier Bytes des D0-Registers.

Du kannst das Ganze sehr einfach mit dem kostenlosen Assembler und Simulator EASy68K* nachvollziehen, indem du die Speicherinhalte nach den diversen MOVE-to-Memory-Befehlen jeweils per

MOVE.L $500000,Dx

zurück in die Register Dx = D1, D2 ... D7 kopierst (D1 vor dem Start des Simulators mit einem Wert <> 0 überschreiben, damit man die Veränderung erkennt).

Dann genügt ein vollständiger Simulationslauf (RUN ohne Einzelschritte) und alle Zwischenergebnisse stehen abschließend der Reihe nach in den angegebenen Dx-Registern.

PS: MOVE ist dasselbe wie MOVE.W (voreingestellt).

PPS: Den Befehl

MOVE.L #$0,$500000

kann man etwas kompakter durch

CLR.L $500000

ersetzen.

* Klappt allein mit den EXE-Dateien aus dem ZIP-Download auch ohne Installation. Einfach EDIT68K.exe starten und loslegen.



Gesamter Thread:

Hilfe benötigt bei Aufgabe zu Registern/RAM - Wadde(R), 29.12.2016, 19:35
Hilfe benötigt bei Aufgabe zu Registern/RAM - cmyk61(R), 29.12.2016, 20:41
Hilfe benötigt bei Aufgabe zu Registern/RAM - Wadde(R), 29.12.2016, 22:13
Hilfe bei Aufgabe zu Registern/RAM (Big Endian) - Eberhard(R), 30.12.2016, 18:01