Hallo, ich befasse mich gerade mit Assembler-Code und so langsam gehts voran, nur für was die zweite Spalte im Assembler-Code ist (im Bild), finde ich leider keine Erklärung im www. Die erste Spalte ist meines Wissens der Befehlszähler, die dritte und weiter die eigentlichen Befehle und Operanden, aber die zweite ist mir nicht klar. Nach langem hin und her suchen, bin ich auf die Idee gekommen, dass es in hex codierte Befehle sind, doch konnte das bisher nicht bestätigt bekommen. Stimmt das so? Bitte um Eure Hilfe!
:
Bearbeitet durch User
Hallo, da liegst du genau richtig! Schon an dem call zu sehen wo das 3. und 4. Byte der Zieladresse von "Test" entspricht. Sascha
:
Bearbeitet durch User
> Erklärung im www Wieso das? Wäre nicht das 'Atmel AVR 8-bit Instruction Set Manual' viel naheliegender?
Alex S. schrieb: > ich befasse mich gerade mit Assembler-Code und so langsam gehts voran, > nur für was die zweite Spalte im Assembler-Code ist Das was du da betrachtest, ist nicht der reine Assembler-Code, sondern das Listing, wo der Assambler-Code zusammen mit der Übersetzung in Hex-Code ausgeworfen wird.
Hallo, danke für die Antwort, habe auch dort nachgeschaut, jedoch steht da zu jedem Befehl nur sowas wie Opcode in Form 1111 00kk kkkk k100 aber ich verstehe nicht genau was diese k bedeuten, die passen doch nicht unter hex-Zahlen Darstellung, ansonsten finde ich da keine anderen Codes. Gruß
Wolfgang schrieb: > Das was du da betrachtest, ist nicht der reine Assembler-Code, sondern > das Listing, wo der Assambler-Code zusammen mit der Übersetzung in > Hex-Code ausgeworfen wird. ah ok, jetzt ist es klar, vielen Dank! :)
> verstehe nicht genau ...
Von der ersten einfachen Zeile ausgehend, finden Sie unter 'break' im
Manual:
16-bit Opcode: 1001 0101 1001 1000,
was in hex-Schreibweise zu 9 5 9 8 wird - voila.
Analog bei z.B. call, die 'k' stehen für die einzelnen Bits der
aufzurufenden Adresse, diese hängen also vom Programm selbst ab.
> Analog bei z.B. call, die 'k' stehen für die einzelnen Bits der > aufzurufenden Adresse, diese hängen also vom Programm selbst ab. es tut mir echt Leid, habe leider nicht genau verstanden, was mit "stehen für die einzelnen Bits der aufzurufenden Adresse" genau gemeint ist. Wird die Adresse direkt ins das Operationscode geschrieben?
Auch wenn alle das Gleiche meinen, so "schreiben" die Meisten etwas Unterschiedliches. Die genaue Bedeutung von Bezeichnern wie z.B. "1111 00kk kkkk k100" wird praktisch immer daneben erläutert. Vielfach geht es dabei um implizite oder explizite Adressierung. kk kkkk k also 7 Bit reichen z.B. für eine Sprungadresse im Bereich von +/- 64 Bit. Also z.B. JR ... kk kkk also 5 Bit reichen für die Unterscheidung von R00 bis R31. Also z.B. OR R00 bis R31 oder AND R00 bis R31. Es ist aber auch möglich, dass "ähnliche" Befehle zusammengefasst werden. Die bedingten Sprungbefehle wären hierbei ein paar passende Kandidaten. JZ, JNZ, JC, JNC usw.
Hi
>Wird die Adresse direkt ins das Operationscode geschrieben?
Ja. Aber warum interessiert dich das? Das macht der Assembler für dich,
oder willst du das mit der Hand codieren?
Die OP-Codes habe ich nur für einen eigenen Disassembler gebraucht. Zum
eigentlichen programmieren brauchst du nur Labels, Befehle, Kommentare
und die Assemblerdirektiven/-expressions und/oder Preprocessor Befehle.
MfG Spess
> > Ja. Aber warum interessiert dich das? Das macht der Assembler für dich, > oder willst du das mit der Hand codieren? > MfG Spess Hallo, ne es geht mir eigentlich nur darum, zu verstehen, was in der Anleitung steht. Muss mir viel theoretischen Kram eineignen. MfG
:
Bearbeitet durch User
@Amateur vielen Dank für die Erklärung! Hat mich weitergebracht!
Ulrich F. schrieb: > Alex S. schrieb: >> Wird die Adresse direkt ins >> das Operationscode geschrieben? > > Richtig! Danke! )
spess53 schrieb: > Ja. Aber warum interessiert dich das? Das macht der Assembler für dich, > oder willst du das mit der Hand codieren? Es soll sogar Leute geben, die selber einen Assembler (=Programm) zum Umsetzen von Assembler (=Code) in Hex Code schreiben. Die interessiert das ziemlich. Früher (TM) da hatte man mindestens die häufigen Hex Codes zu den Befehlen um Kopf und hat sie sogar bei den ersten Kleincomputern binär eingegeben - eben die Lösung des Henne-Ei Problems, wenn man nicht auf Cross-Compiler zurückgreifen konnte bzw. einen nakten Controller vor sich hatte.
Wolfgang schrieb: > Es soll sogar Leute geben, die selber einen Assembler (=Programm) zum > Umsetzen von Assembler (=Code) in Hex Code schreiben. Die interessiert > das ziemlich. Gut dass die Zeit (für mich) vorbei ist! Wenn einer von euch da noch Bedarf hat... Ich hätte da noch einen z80 Micro Professor abzugeben ... Gut abgelagert, sollte aber noch laufen.
Au fein! An dem Micro-Professor bin ich interessiert. Hoffentlich bin ich der erste. Ich habe auch einen Account unter dem angegeben Namen und Nick. Finde nur gerade das Passwort nicht. Ich schreibe dann nochmal angemeldet. Was soll er den kosten?
hmm, hätte jetzt auch noch Frage wegen der Zeilen ganz unten, was sollen sie darstellen? also nach dem .dseg 000100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 000110: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Hi > also nach dem .dseg Das sind 32 Byte vom Raminhalt ab Adresse 0x0100 >Es soll sogar Leute geben, die selber einen Assembler (=Programm) zum >Umsetzen von Assembler (=Code) in Hex Code schreiben. Die interessiert >das ziemlich. Zwar keinen Assembler, aber meine ersten Programme habe ich vor über 30 Jahren mit so https://de.wikipedia.org/wiki/Polycomputer_880 einem Teil geschrieben. Also ich kenne das. MfG Spess
spess53 schrieb: > https://de.wikipedia.org/wiki/Polycomputer_880 Genau. So muss Technik. :-) Im Ernst. Das Ding macht einen recht stabilen Eindruck. Nicht so wie der hier: http://retro.hansotten.nl/wp-content/uploads/2015/05/IMG_9928-1024x768.jpg Das war mein erster.
Hi >Das Ding macht einen recht stabilen Eindruck. Konnte man auch damals für 3449 DDR-Mark schon erwarten. >Nicht so wie der hier: >http://retro.hansotten.nl/wp-content/uploads/2015/... >Das war mein erster. Der war auch nur in der Firma ausgeliehen. Mein erster eigener sah auch nicht viel besser aus: https://de.wikipedia.org/wiki/Z_1013 MfG Spess
Sorry, für [ OT ], aber anders kein Kontakt. Michael D. (Andromeda) schrieb: > Ich schreibe dann nochmal > angemeldet. Das solltest du tun! Denn es tropfen so langsam erstaunlich viele Anfrage rein.... Der erste du bist! Der Preis? 20€ + 6.99 versicherter Versand Dazu gibts dann noch ein Z80 Buch und ein paar Chips. Die Plaste Verpackung ist leider arg gefetzt. Und ein Handbuch ist auch nicht mehr dabei.
Ulrich F. schrieb: > Das solltest du tun! > Denn es tropfen so langsam erstaunlich viele Anfrage rein.... Das ist gut. Ich möchte den Professor dann doch lieber nicht kaufen - obwohl ich ihn liebend gerne kaufen möchte. :-) Ist zwar ein nettes Ding, aber Sentimentalitäten kosten auch Platz. Entschuldigung, aber ich hatte einfach ohne nachzudenken "Hier!" geschrien. Ich hoffe, dass ist in Ordnung für Dich, Ulrich. Ich wünsche dem nächsten in der Warteschlange viel Spass mit dem Teil.
spess53 schrieb: > Zwar keinen Assembler, aber meine ersten Programme habe ich vor über 30 > Jahren mit so > > https://de.wikipedia.org/wiki/Polycomputer_880 > > einem Teil geschrieben. Also ich kenne das. > > MfG Spess Bummer! Da kommen die Erinnerungen an meine Zeit im Schülerrechenzentrum wieder hoch. "Soundausgabe" über einen Geracord und "Coca Cola"-Laufschriften. ;-) Danke dafür.
Z.B. der erste, in Deinem Beispiel verwendete PUSH-Befehl: -------- push r16 1001 001d dddd 1111 r00 = 0 0000 r16 = 1 0000 ; hier verwendet also: 1001 001d dddd 1111 1 0000 1001 0011 0000 1111 9 3 0 f ; wie auch im Listing angegeben Der in Deinem Beispiel verwendete BRNE-Befehl: -------- brne loop 1111 01kk kkkk k001 f 7 e 9 ; aus Deinem Beispiel 1111 0111 1110 1001 ; Binär 11 1110 1 ; Sprungweite binär Ergibt die Sprungweite: 1111101 = -3 Also nach BRNE (Zeile 00014) gehts im positiven Falle bei 00011 (-3) weiter. Aber wie bereits von Anderen erwähnt: So etwas erledigt der Compiler für Dich.
@Amateur Trotz Amateur-sein hast du das professionell erklärt. Amateur schrieb: > Aber wie bereits von Anderen erwähnt: So etwas erledigt der Compiler für > Dich. Man Einer möchte aber wenigstens EINMAL wissen, was der freundliche Kompiler so für Sachen anstellt. mfG Paul
Paul B. schrieb: > @Amateur > Trotz Amateur-sein hast du das professionell erklärt. > > Amateur schrieb: >> Aber wie bereits von Anderen erwähnt: So etwas erledigt der Compiler für >> Dich. > > Man Einer möchte aber wenigstens EINMAL wissen, was der freundliche > Kompiler so für Sachen anstellt. > > mfG Paul Compiler? Macht doch der Assembler.
>Compiler? Macht doch der Assembler.
Jawoll Herr Oberlehrer. Ich nehme alles vorher Gesagte zurück!
Amateur schrieb: >>Compiler? Macht doch der Assembler. > > Jawoll Herr Oberlehrer. Ich nehme alles vorher Gesagte zurück! Auf dem Weg vom Amateur zum Laien.
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.