Forum

Einloggen | Registrieren | RSS  

Wadde(R)

29.12.2016,
19:35
 

Hilfe benötigt bei Aufgabe zu Registern/RAM (Computertechnik)

Hallo,

nachdem mir von euch gut geholfen wurde bei einer anderen Fragestellen, wollte ich mal euch Fragen, ob ihr mir dabei helfen könnt,
das mit dem Big Endien und verschieben von Daten in Speicheradressen. Denn dort finde ich in meinem Skript lediglich die einfachen
Erklärungen zu Little und Big Endien, allerdings keine genaue Beschreibung, was die Begriffe "Move." mit den dazugehörigen Buchstaben für eine
Auswirkung auf den Speicher haben.

Könntet ihr mir dabei helfen?

Müsst natürlich nicht alles vorkauen, aber Hilfestellungen wären von Vorteil :-)

Vielen Dank im Vorraus.

cmyk61(R)

E-Mail

Edenkoben, Rheinland Pfalz,
29.12.2016,
20:41
(editiert von cmyk61
am 29.12.2016 um 20:43)


@ Wadde

Hilfe benötigt bei Aufgabe zu Registern/RAM

Hi,

manchmal muss ich mich schon wundern, dass es manche Menschen nicht schaffen, ihre Fragestellungen und Teile davon einfach mal zu ergoogeln - oder sonst irgend ne Suchmaschine zu bemühen.

https://de.wikipedia.org/wiki/Byte-Reihenfolge

Gruß
Ralf

p.s.
move.B - bewege Byte (8Bit)
move.W - bewege WORD (16Bit)
move.L - bewege LONG (32Bit)

» nachdem mir von euch gut geholfen wurde bei einer anderen Fragestellen,
» wollte ich mal euch Fragen, ob ihr mir dabei helfen könnt,
» das mit dem Big Endien und verschieben von Daten in Speicheradressen. Denn
» dort finde ich in meinem Skript lediglich die einfachen
» Erklärungen zu Little und Big Endien, allerdings keine genaue Beschreibung,
» was die Begriffe "Move." mit den dazugehörigen Buchstaben für eine
» Auswirkung auf den Speicher haben.
»
» Könntet ihr mir dabei helfen?
»
» Müsst natürlich nicht alles vorkauen, aber Hilfestellungen wären von
» Vorteil :-)
»
» Vielen Dank im Vorraus.
»
»

Wadde(R)

29.12.2016,
22:13
(editiert von Wadde
am 29.12.2016 um 22:14)


@ cmyk61

Hilfe benötigt bei Aufgabe zu Registern/RAM

» Hi,
»
» manchmal muss ich mich schon wundern, dass es manche Menschen nicht
» schaffen, ihre Fragestellungen und Teile davon einfach mal zu ergoogeln -
» oder sonst irgend ne Suchmaschine zu bemühen.
»
» https://de.wikipedia.org/wiki/Byte-Reihenfolge
»
» Gruß
» Ralf
»
» p.s.
» move.B - bewege Byte (8Bit)
» move.W - bewege WORD (16Bit)
» move.L - bewege LONG (32Bit)
»

» »

Hätte ich was gefunden, würde ich nicht nachfragen ;-)
Auf der Wikipediaseite konnte ich nichts nennenswertes finden, was meine Frage weiter gebracht hätte.
Jedenfalls nicht in der Form, die in deinem P.S. steht.

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?

cmyk61(R)

E-Mail

Edenkoben, Rheinland Pfalz,
30.12.2016,
01:39

@ Wadde

Hilfe benötigt bei Aufgabe zu Registern/RAM

HI Wadde,

» Auf der Wikipediaseite konnte ich nichts nennenswertes finden, was meine
» Frage weiter gebracht hätte.
» Jedenfalls nicht in der Form, die in deinem P.S. steht.

ohne pampig werden zu wollen - also ICH lese jede Menge aus diesem Link. Weiterhin scheint es Dir an ein paar Grundlagen zu fehlen.
Wenn man byte, Word und Long bei den Move-Befehlen nicht kennt so erweckt dies den Eindruck, dass die Erläuterungen zu dem Befehl nicht oder max. unvollständig gelesen wurden.
Diese Begriffe werden in Assemblerprogrammierkursen noch weit vor den eigentlichen Befehlen gelehrt respektive dort dann auch vorausgesetzt.

Weiterhin solltest Du mal den Beitrag in der Wikipedia genau lesen. Dort wird diese Problematik genaustens durchgekaut. Spätestens im Bereich des "Beispiels" sollte es Dir wie Schuppen aus den Haaren fallen :-D . Genauer wie es dort aufgezeigt wird kann ich es wirklich nicht erklären.
Vorschlag: arbeite mal das Beispiel dort selbst durch. Womöglich siehst Du auch den Wald vor lauter Bäumen nicht. Ne Axt oder ne Kettensäge indes kann ich leider nicht zur Verfügung stellen-.

gruß
Ralf

p.s. kann mal jemand mit anderen Worten den Lösungsweg zu diesem Problem erklären



» 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?

Eberhard(R)

Homepage E-Mail

30.12.2016,
18:01

@ Wadde

Hilfe bei Aufgabe zu Registern/RAM (Big Endian)

» 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.

simi7(R)

D Südbrandenburg,
31.12.2016,
14:05

@ Wadde

Hilfe benötigt bei Aufgabe zu Registern/RAM

» "Big Endien"

» Wo habe ich da meinen Denkfehler?

Beim ersten Schreibfehler dachte ich noch an ein Versehen.
Da du aber beharrlich dabei bleibst ist es kein Wunder wenn du nichts findest.
Suchmaschinen sind zwar fehlertolerant aber das hat auch Grenzen.

Wadde(R)

15.01.2017,
21:27

@ Eberhard

Hilfe bei Aufgabe zu Registern/RAM (Big Endian)

» 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.

Vielen Dank für deine Antwort :) Hat mir weitergeholfen.
Im Skript unterscheidet mein Professor zwischen der 68000er Serie von Motorola und dem Intel 8086. Also lagst du mit deiner Vermutung sehr richtig mit einem 68K-Kern.
@cymka:
Das Problem mit dem Wikipedia-Artikel würde ich als Lehrer-Schüler-Problem vergleichen. Für den Lehrer klar verständlich und logisch nachvollziehbar, für den Schüler (noch) nicht ganz. Habe bei mir einige Übungsaufgaben gemacht und der Inhalt vom Wikipediaartikel macht jetzt deutlich mehr Sinn :-D
@simi7: Wenn meckern, dann auch helfen.