Assembler tabelle verständnis

OP #6359845
Lesenswert?

Hey habe wieder Probleme mit dem Verständnis bei einer Aufgabe .

Was machen die genau bei ld r24 +
und ld r25 ,z+ ?
Wie kommen die da auf oxff und 0x01 ?
Moderator Persönliche Seite #6359877
Lesenswert?

Cyblord -. schrieb:
> das
> ld r25 ,z+
> nur das Z Register inkrementiert halte ich für falsch

Du hattest geschrieben, das Z-Register würde geladen.

Mit dieser Formulierung war ich nicht einverstanden, und mein "nur" 
bezog sich dabei ausschließlich auf den Effekt dieser Anweisung auf das 
Z-Register selbst: das wird dabei inkrementiert (aber nicht "geladen").

Geladen wird natürlich das angegebene Register, mit einem Speicherinhalt 
(den das Z-Register bestimmt).

"Z-Register" in AVR-Sprache ist das Doppelregister R30/R31.
Gast #6359885
Lesenswert?

Meine Güte. nach 8 Tagen beim zweiten Befehl. Das kann ja heiter werden.

Aber mich würde mal interessen wer "die" sind?
Wahrscheinlich irgendeine, Nutella hortende, digitale 
Ingenieursverschwörung. :-)
#6359888
Lesenswert?

Hammer V. schrieb:
> Wir nutzen AVR .
> Verstehe es trotzdem nicht

Was denn genau nicht? Den ld Befehl? Du musst wirklich mal KONRKET 
Fragen, ansonsten macht es den Eindruck du hast von der gesamten 
Thematik keine Ahnung. Da hilft dann kein Forum. Da hilft nur 
Wiederholen der Grundlagen.

Hast du dir die verlinkte Befehlsreferenz mal durchgelesen? Da gibts ja 
auch Text, der Dinge erklärt.
Weißt du was mit SP und PC in der Tabelle gemeint ist? Weißt du was ein 
Register ist? Also WAS weißt du und was nicht?
Gast #6359891
Lesenswert?

> ld r25 ,z+

Z ist ein Zeiger auf einen Register oder eine Speicherzelle. Z enthält 
eine Adresse.

Der Wert des adressierten Registers/Speicherzelle wird in das Register 
R25 kopiert.

Danach wird Z um eins erhöht.

In C ausgedrückt:

> R25 = *(Z++);
#6359925
Lesenswert?

Eigentlich sind die AVR 8-bit Controller. Da aber schon die kleinsten 
Controller mehr als 256 Byte Speicher haben, braucht man für 
Speicheradressierungen oder Sprungziele normalerweise 16 Bit. Dazu 
hatten schon die ersten Mikroprozessoren Doppelregister.

Im AVR sind das die obersten acht Register, die zu vier Doppelregistern 
zusammengefasst werden können. Im Z80 hatte man das IX und IY-Register, 
der 6502 konnte die ersten 256 Byte des SRAM als 128 Doppelregister 
verwenden.

Für diese Doppelregister gibt es einfache Möglichkeiten zur 
Inkrementierung oder Dekrementierung, hier sogar in einem einzigen 
Befehl zusammengefasst. Das wird mit dem Pluszeichen ausgedrückt, hier 
ein Postinkrement, d.h. zunächst wird der Ladebefehl ausgeführt und 
danach die Adresse erhöht.
Moderator Persönliche Seite #6359928
Lesenswert?

Christoph db1uq K. schrieb:
> Im Z80 hatte man das IX und IY-Register

Insbesondere natürlich auch H/L, die es schon beim i8080 gab. Dort wurde 
für die entsprechende Indirektadressierung (die beim AVR "Z" heißt) ein 
"M" benutzt um zu zeigen, dass der Speicherinhalt, auf den HL zeigt, 
gemeint ist. Bei der Z80-Mnemonik schrieb man stattdessen etwas 
aussagefähiger "(HL)".

Aber wir schweifen ab. :)
Gast #6359930
Lesenswert?

Hammer V. schrieb:
> Verstehe es trotzdem nicht

LD R24, Z+

Das Z-Register ist ein 16-Bit langes Doppelregister (für einen 8-Bit 
Prozessor doppelt) bestehend aus ZL(R30) und ZH(R31)

Es gibt im 8-Bit AVR die X, Y und Z Register, diese können als Zeiger 
auf eine Speicheradresse dienen.

Der Befehl LD verwendet den ZL/ZH als Zeiger auf eine Adresse und lädt 
den 8-Bit Wert den es an dieser Stelle findet, in das angegebene 
Register, hier R24.

Das "+" hinter dem "Z" bedeutet, dass nach dem Laden des Wertes in R24 
der Zeiger aus ZL/ZH um 1 erhöht wird, also Z auf die nächste Adresse 
zeigt.

In der Tabelle werden ZL/ZH nach der Ausführung von LD mit 0x01/0x61 
angegeben, vorher waren ZL/ZH 0x01/0x60 , d.h. der Wert 0xFF den R24 
erhielt, kam von der Speicherstelle 0x0160.

Genannt wird das "indirekte Adressierung" und ist hier:
https://www.mikrocontroller.net/articles/Adressierung#Postinkrement
nachzulesen.

Cyblord -. schrieb:
>> und ld r25 ,z+ ?
>
> Da wird das Z-Register geladen.

> Ja, ich meinte "in das Register geladen". Ich gebe zu das war
> missverständlich.

Das war nicht missverständlich sondern im Kontext der Frage völlig 
falsch.
#6359965
Lesenswert?

http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf
Als Beispiel der ATMega328, der durch den Arduino sehr bekannt ist. 
Seite 21 zeigt die Registertabelle und speziell die X/Y/Z-Register. Am 
Ende S.621-627 noch eine Kurzfassung der Befehle. Ausführlicher gibt es 
die nur in dem oben verlinkten "Instruction Set".
Am Anfang des Instruction Sets sind auch die verschiedenen 
Adressierungsarten schematisch gezeigt. Leider alles sehr trockene Kost. 
Zum Einstieg sind echte Lehrbücher zum AVR besser.
OP #6359975
Lesenswert?

Jörg W. schrieb:
> Hammer V. schrieb:
>> Aber trotzdem komme ich net darauf :)
>
> Dann schreib uns doch mal, was deiner Meinung nach passiert, Schritt für
> Schritt. Vielleicht können wir ja dann deinen Denkfehler aufklären.


Ich hatte deine Antwort nicht gelesen .
Habe es verstanden.
Ein Post ist auch irgendwie verloren gegangen :)

Ich verstehe nur noch beim Ende der Tabelle bei dem gleichen Befehl 
nicht ,  warum bei R24 und R25 nach dem Befehl bei beiden 0x00 steht?
Bei R25 war ja vorher schon 0 wohl daher ?

Aber bei R24 kann ich es mir nicht erklären?
Angehängte Dateien:
Gast #6359978
Lesenswert?

Hammer V. schrieb:
> Ich verstehe nicht wie die da auf R25 nach dem Befehl = 0x01 kommen ?
>
> Und dieses 0xff = R24 nach dem Befehl ?

Das 0xff steht bereits im flüchtigen Speicher, auch SRam genannt.

> Wie rechnen die das aus ?

Das wird nicht "ausgerechnet" sondern vorausgesetzt, dass diese Werte so 
im SRam stehen.

Wie sie da hin kamen ist Nebensache. Ziel ist es, dass Du verstehst, was 
LD macht und dass wenn nach einem LD R24, Z+ der Wert 0xff in R24 steht, 
dieser Wert von dort kommt, wo Z vorher hin gezeigt hat.

Das Äquivalent zu LD R24, Z (+ mal weggelassen) und Z = 0x0160 wäre 
übrigens:

LDS R24, {0x0160}

Vielleicht fällt das Verständnis dann leichter.
Gast #6359986
Lesenswert?

Hammer V. schrieb:
> Jörg W. schrieb:
>> Hammer V. schrieb:
>>> Aber trotzdem komme ich net darauf :)
>>
>> Dann schreib uns doch mal, was deiner Meinung nach passiert, Schritt für
>> Schritt. Vielleicht können wir ja dann deinen Denkfehler aufklären.
>
>
> Ich hatte deine Antwort nicht gelesen .
> Habe es verstanden.
> Ein Post ist auch irgendwie verloren gegangen :)
>
> Ich verstehe nur noch beim Ende der Tabelle bei dem gleichen Befehl
> nicht ,  warum bei R24 und R25 nach dem Befehl bei beiden 0x00 steht?
> Bei R25 war ja vorher schon 0 wohl daher ?
>
> Aber bei R24 kann ich es mir nicht erklären?

Ich würde Dir raten, Deinen Gedankengang mal im Zusammenhang und in 
kleinen Schritten zu beschreiben.

Letztlich muss das darauf beruhen, dass Du:
1. Den Inhalt der Speicherzellen kennst und welche Speicher es gibt und
2. Den Inhalt der Register kennst und
3. Die Wirkung der Befehle, ggf. nochmal unterteilt in Teilschritte, 
kennst.

Dann kommst Du z.B. auch selbst darauf, dass diese Aussage:
> Bei R25 war ja vorher schon 0 wohl daher ?
eine falsche Begründung ist.

Es bringt Dir nichts, wenn wir Dir Schritt für Schritt die Lösungen 
vorsagen und Du immer nur sagst: "Verstehe ich nicht. Verstehe ich 
nicht. Verstehe ich nicht."
Es geht nicht darum, dass Du alles richtig denkst. Wir hatten die selben 
Probleme auch mal. Das ist völlig in Ordnung.
Aber darum, dass es für die gezeigten Daten und das Verhalten immer eine 
klare und eindeutige Begründung gibt. Die Begründung, oder auch eine auf 
Irrtum etc. beruhende falsche Begründung musst Du aber angeben können.
Moderator Persönliche Seite #6359995
Lesenswert?

Hammer V. schrieb:
> Meine Vermutung ist das sie auf den 4 er Block 0000 gesprungen sind und
> daher die 0x00 für 25 und 24 haben ?

Wenn du jetzt noch verstanden hast, warum das so ist, bist du einen 
großen Schritt weiter. ;-)

> Wieso wird das FEFF nicht beachtet ?

Dann schau dir nochmal dein Protokoll an, welche Werte jetzt überhaupt 
an dieser Stelle stehen. (Das ist RAM, der kann also vom Programm aus 
geändert werden.)
Gast #6360001
Lesenswert?

Hammer V. schrieb:
> Meine Vermutung ist das sie auf den 4 er Block 0000 gesprungen sind und
> daher die 0x00 für 25 und 24 haben ?
> Wieso wird das FEFF nicht beachtet ?

Moment.

Begründe bitte Deine Vermutung. Und zwar mit dem Inhalt des Speichers 
und der Register vor_ der Ausführung des Befehls _und dem Verhalten 
des Befehls.
OP #6360071
Lesenswert?

Jörg W. schrieb:
> Hammer V. schrieb:
>> Meine Vermutung ist das sie auf den 4 er Block 0000 gesprungen sind und
>> daher die 0x00 für 25 und 24 haben ?
>
> Wenn du jetzt noch verstanden hast, warum das so ist, bist du einen
> großen Schritt weiter. ;-)
>
>> Wieso wird das FEFF nicht beachtet ?
>
> Dann schau dir nochmal dein Protokoll an, welche Werte jetzt überhaupt
> an dieser Stelle stehen. (Das ist RAM, der kann also vom Programm aus
> geändert werden.)

Ich bin ehrlich . Ich verstehe nicht warum es so ist :).

Woran ich das erkennen soll -(
Gast #6360074
Lesenswert?

Eventuell bist du hier an eine persönlichen Grenzen gekommen. Anstatt 
hier weiter Zeit zu vergeuden, besteht die Option, die mich anderen 
Dingen zu beschäftigen? Vielleicht das Fach bzw. den Beruf wechseln?
#6360084
Lesenswert?

Stefan ⛄ F. schrieb:
> Eventuell bist du hier an eine persönlichen Grenzen gekommen. Anstatt
> hier weiter Zeit zu vergeuden, besteht die Option, die mich anderen
> Dingen zu beschäftigen? Vielleicht das Fach bzw. den Beruf wechseln?

Nö ihm fehlt da einfach von vorn bis hinten alles. Keinerlei Grundlagen. 
Er weiß nicht mal was er da eigentlich tut. Das könnte aber jeder 
aufarbeiten wenn er wollte.
OP #6360093
Lesenswert?

Jörg ich verstehe, dass das R30 jeweils um 1 erhöht wird. Das 0x01 
sozusagen gleich bleibt  .

Kann es sein, dass nach  diesem Ausschnitt einfach um 3 Stellen weiter 
gegangen ist nach den eingekreisten Befehlen ?
Und daher bei diesem 0000 Block gelandet ist ?
Weiss net wie ich es anders ausdrücken soll
OP #6360214
Lesenswert?

>>> Meine Vermutung ist das sie auf den 4 er Block 0000 gesprungen sind und
>>> daher die 0x00 für 25 und 24 haben ?
>>
>> Wenn du jetzt noch verstanden hast, warum das so ist, bist du einen
>> großen Schritt weiter. ;-)
>>



ich weiss immer noch nicht warum das auf 0000 gesprungen ist ?
Gast #6360245
Lesenswert?

Sie hatten sich bereits selbst die Antwort gegeben, um 15:29 Uhr: z 
steht zu diesem Zeitpunkt auf der RAM-Adresse 0x0164, dort steht 00, 
dieser Wert wird mit dem 'ld r24,z+' nach geladen, nun steht z auf 
0x0165, dort steht ebenfalls 00, also dasselbe nochmal für r25.
Gast #6360256
Lesenswert?

Ich möchte dich nicht beleidigen, aber es tut mir im Herzen weh, dabei 
zuzuschauen, wie du hier so richtig gründlich abkackst. Ich habe das 
dringende Gefühl, dieses Drama stoppen zu müssen. Vergleichbar mit der 
Situation, wo ein Jungtier sich irgendwo den Kopf eingeklemmt hat und 
jetzt um Hilfe schreit. Da kann man nicht einfach weg schauen.

Versuche mal, dich mit jemandem persönlich zu treffen, der dir weiter 
helfen kann. Sollte das dann auch nicht klappen, würde ich wirklich 
ernsthaft erwägen, das Fach zu wechseln. Denn diese Aufgabe ist auf 
Anfänger Niveau. Einfacher wird es nicht mehr - ganz im Gegenteil.

Ich hatte eine Ausbildung zum Telefonkabel-Verleger. Für diese Aufgabe 
hatten wir damals 2 Tage Zeit. Der ganze Jahrgang (60 Azubis im Alter 
von 17 Jahren) hatte sie geschafft.

Mit deinen Versuchen an der Programmiersprache C (im Parallel-Thread) 
sieht es noch schlechter aus. Es kann immer mal sein, dass man ein 
kleines Detail einfach nicht rafft. Aber an C und Assembler gleichzeitig 
zu scheitern ist schon ein K.O. für eine Karriere als Programmierer.

Was ist das Ziel deiner Ausbildung? Auch Kabel-verlegen oder etwas 
höherwertiges? Hoffentich etwas besseres. Also wenn "wir" Kabel-Verleger 
das in zwei Tagen geschafft haben und du nach einer ganzen Woche noch 
nicht, dann ist da auch kein weiterer Erfolg mehr zu erwarten.

Es sei denn, es scheitert an der Kommunikation. Persönlicher Kontakt 
bringt es vielleicht für dich. Hoffentlich.

Denke mal darüber nach. So wie das hier gerade abläuft, kommst du nicht 
auf einen grünen Pfad.
Gast #6360273
Lesenswert?

Die wievielte Bearbeitung war das jetzt? Die vierte, die fünfte?

Wir wissen ja, dass es die Vorbereitung auf eine Klausur sein soll, und 
wir sehen auch, dass Grundlagen fehlen, ganz massiv sogar, zugegeben; 
aber: mehr als durchfallen kann er nicht (wird er wohl wahrscheinlich). 
Nur welchem Zweck dient nun diese Litanei?
Gast #6360288
Lesenswert?

Ich kann gar nicht so schnell lesen, wie Sie Ihre Beiträge bearbeiten. 
Und nein, die endgültige Version bekam ich schon gar nicht mehr mit.

"von Herzen weh", "abkakst", "Jungtier ... eingeklemmter Kopf" - also 
ich weiß nicht. Sollten wir es nicht etwas tiefer hängen?
Gast #6360465
Lesenswert?

Stefan ⛄ F. schrieb:
> Ich schlage vor, zu helfen anstatt zu meckern. Oder einfach mal dem
> Ratschlag von Dieter Nuhr folgen... du weißt schon.

Da redet der richtige Dampfplauderer, siehe:

Stefan ⛄ F. schrieb:
> Eventuell bist du hier an eine persönlichen Grenzen gekommen. Anstatt
> hier weiter Zeit zu vergeuden, besteht die Option, die mich anderen
> Dingen zu beschäftigen? Vielleicht das Fach bzw. den Beruf wechseln?

Dazu kommt dieser Müll und peinliche Selbstdarstellung:

Stefan ⛄ F. schrieb:
> Ich möchte dich nicht beleidigen, aber es tut mir im Herzen weh, dabei
> {noch viel mehr Geschwätz}
> auf einen grünen Pfad.

Wenn Du schon Nuhr zitierst, dann stelle doch nach ein wenig 
Selbstreflektion fest, dass dessen Zitat für Dich exakt zutrifft. Und 
dabei mag ich Nuhr nicht einmal.

Was hast Du denn zur Klärung der eigentlichen Problematik beigetragen?
Nichts, nada, niente.

Alles was Du hier abziehst ist den Thread aufzublähen, eine traurige 
Selbstdarstellung zusammen mit einer Pseudopädagogik, von der Du wohl 
gar glaubst, dass sie intelligent wäre.

Und so jemand hat die Chuzpe anderen den Mund verbieten zu wollen.
Klassische Fehleinschätzung.
Gast #6360480
Lesenswert?

MWS schrieb:
> Was hast Du denn zur Klärung der eigentlichen Problematik beigetragen?

Kannst du oben bei 13:53 lesen. Er hat es leider nicht verstanden.

Danke für deine Kritik an meiner Person. Ich fürchte, dass diese dem TO 
allerdings nichts bringt.
Beitrag #6360567 wurde von einem Moderator gelöscht.
Beitrag #6360576 wurde von einem Moderator gelöscht.
Gast #6360587
Lesenswert?

Hammer V. schrieb:
> Jetzt aktuell ist ja nur noch meine Frage gewesen :
> ich weiss immer noch nicht warum das auf 0000 gesprungen ist ?
>
>
> Nur das ......

Ja. Und dabei wird es voraussichtlich auch bleiben.
Wir können Dich nicht verstehen machen. Verstehen kannst Du nur alleine.

Bedauerlich. Aber so ist das nun mal. Und wenn Du die Klausur verhauen 
musst, dann ist das auch so.

Aber davon geht die Welt nicht unter ...
Beitrag #6360604 wurde von einem Moderator gelöscht.
Beitrag #6360611 wurde von einem Moderator gelöscht.
Beitrag #6360616 wurde von einem Moderator gelöscht.
Beitrag #6360635 wurde von einem Moderator gelöscht.
Gast #6360794
Lesenswert?

Hammer V. schrieb um 18:41 Uhr:
> ich weiss immer noch nicht warum das auf 0000 gesprungen ist ?

Hammer V. schrieb um 22:50 Uhr:
> ich weiss immer noch nicht warum das auf 0000 gesprungen ist ?
> Nur das ......

Das zu erklären, hatte ich in den Beiträgen von 19:05 und 19:13 
versucht, ist mir offenbar nicht gelungen; allerdings hätte ich in 
diesem Fall doch eine Rückfrage erwartet.
Beitrag #6363872 wurde von einem Moderator gelöscht.
Beitrag #6363874 wurde von einem Moderator gelöscht.

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