Hallo. Ich bin dabei mich auf Assembler vorzubereiten und habe folgenden Aufgaben vor mir. Im Internet werde ich nicht wirklich fündig um diese Aufgaben wenigstens Teilweise zu beantworten. Habt ihr Tips für mich wo ich nachsehen kann oder vllt ein Buch was mir da helfen würde ? gruß, Karl Habe mal die Aufgaben hier: Die unten genannten Register der AM 188 CPU (8 Bit externer Datenbus) enthalten die Werte ax:19h, bp:F3h, cx:37h, dx41h, di:20h, cs:9FF7h, ds:AFF9h. Programm und Daten liegen im externen RAM. Per Default wird ds als Datensegment-Register verwendet. Die nächste auszuführende Anweisung lautet: mov cl, ds:(bp + di -3). Die Anweisung wird Übersetz in den OP-Code 8A6BFD. a) Auf welche physikalische(n) Adresse(n) greift der Controller mit der genannten Anweisung zu? b) Wie viele externe Lesezyklen werden durch das Laden des Befehls ausgelöst? c) Wie viele externe Lesezyklen werden durch die Befehlsausführung ausgelöst? ----> Ist b und c nicht das gleiche Ergebnis ? d) Wo und wann findet die Adressberechnung für den Speicherzugriff statt? e) Wie nennt man die Art der verwendeten Adressierung? f) Der Befehl mov cl, es:[bp di -3] wird zu 268A6BFDh übersetzt. Erläutern Sie den Unterschied der beiden gezeigten OP-Codes! g) In beiden OP-Codes ist das letzte Byte jeweils FDh warum? Was bedeutet das hier (Fachbegriff)?
Karl.M. schrieb: > Die unten genannten Register der AM 188 CPU (8 Bit externer Datenbus) > enthalten die Werte > ax:19h, bp:F3h, cx:37h, dx41h, di:20h, cs:9FF7h, ds:AFF9h. Programm und > Daten liegen im externen RAM. Per Default wird ds als > Datensegment-Register verwendet. Die nächste auszuführende Anweisung > lautet: mov cl, ds:(bp + di -3). Die Anweisung wird Übersetz in den > OP-Code 8A6BFD. > a) Auf welche physikalische(n) Adresse(n) greift der Controller mit der > genannten Anweisung zu? Ach komm. Das ist ein bischen Hex-Rechnen > b) Wie viele externe Lesezyklen werden durch das Laden des Befehls > ausgelöst? Findest du im Datenblatt. Wenn ein Befehl aus x Bytes besteht, wieviele Lesezyklen braucht es dann um den Befehl zu lesen? > c) Wie viele externe Lesezyklen werden durch die Befehlsausführung > ausgelöst? Findest du ebenfalls im Dantblatt. Bei der Beschriebung des MOV Befehles. > > ----> Ist b und c nicht das gleiche Ergebnis ? Nein. Wenn du ein Buch lesen willst, brauchst du 1 Handbewegung um das Buch zur Hand zu nehmen, du brauchst aber viele Handbewegungen wenn du dann tstsächlich liest. > > d) Wo und wann findet die Adressberechnung für den Speicherzugriff > statt? Datenblatt > e) Wie nennt man die Art der verwendeten Adressierung? > f) Der Befehl mov cl, es:[bp di -3] wird zu 268A6BFDh übersetzt. > Erläutern Sie den Unterschied der beiden gezeigten OP-Codes! > g) In beiden OP-Codes ist das letzte Byte jeweils FDh warum? Was > bedeutet das hier (Fachbegriff)? Hör mal, das sind alles Fragen, wie sie in einem Kurs vorkommen. Hast du nicht aufgepasst in deiner Klasse?
Ich beginne damit ab März und habe mir vom Server schon einmal die Übungsaufgaben geladen. Wollte einfach schon vorarbeiten (: Da werde ich mir erst einmal das Datenblatt besorgen.
Habe das erste mal versucht und komme auf die Adresse: AFFA10h ?
Nö, passt nicht. Sieh Dir doch erst einmal an, wie aus Segment und Offset die 20Bit Speicheradresse gebildet wird. Peter
Peter Bünger schrieb: > Nö, passt nicht. > > Sieh Dir doch erst einmal an, wie aus Segment und Offset die 20Bit > Speicheradresse gebildet wird. > > Peter Adresse = (Segmentnummer·16) + Offset AFF90000 (4 Bit verschoben, deswegen die 4 Nullen?) F3 + 20 - 3 = 110 Ergibt zusammen AFF90110h ?
>Ich beginne damit ab März und habe mir vom Server schon einmal die >Übungsaufgaben geladen. Wollte einfach schon vorarbeiten (: Vorarbeiten lassen, oder? Wie willst Du was lernen? Ohne selbst zu denken? Oder: Du willst nix lernen.
> AFF90000 (4 Bit verschoben, deswegen die 4 Nullen?)
Nein, passt auch nicht.
Stichworte: Bits, Bytes und die hexadezimale Schreibweise.
Ich glaub jetzt hab ich`s: AFF90 110 ----- B00A0 > b) Wie viele externe Lesezyklen werden durch das Laden des Befehls > ausgelöst? > Findest du im Datenblatt. Wenn ein Befehl aus x Bytes besteht, wieviele > Lesezyklen braucht es dann um den Befehl zu lesen? --> Da es sich um ein 8 BIT Datenbus handelt, wird ein Befehl wohl 1 Byte haben. Also 4 Lesezyklen für mov cl, ds:(bp + di -3) cl ds bp di Dazu finde ich gar nichts im Datenblatt. > c) Wie viele externe Lesezyklen werden durch die Befehlsausführung > ausgelöst? > Findest du ebenfalls im Dantblatt. Bei der Beschriebung des MOV > Befehles. --> Auf jedenfall einen Zyklus mehr da es aus dem Speicher geladen werden muss.
> B00A0 Hatte ich auch errechnet. > --> Da es sich um ein 8 BIT Datenbus handelt, wird ein Befehl wohl 1 > Byte haben. Also 4 Lesezyklen für mov cl, ds:(bp + di -3) Du bist aber echt schwer von Begriff! In der Aufgabe ist doch der Opcode bereits genannt, Du musst doch nur noch die Bytes zählen. > --> Auf jedenfall einen Zyklus mehr da es aus dem Speicher geladen > werden muss. Überlege, wie breit das zu ladende CL-Register ist und wieviele 8Bit Lesezyklen der Prozessor dafür braucht. Peter
Karl Meyer schrieb: > --> Da es sich um ein 8 BIT Datenbus handelt, wird ein Befehl wohl 1 > Byte haben. Also 4 Lesezyklen für mov cl, ds:(bp + di -3) > > cl > ds > bp > di > > Dazu finde ich gar nichts im Datenblatt. Der Prozessor liest doch nicht den Text "mov cl, ds:(bp + di - 3)" um ihn auszuführen! Der Assembler liest den Text und übersetzt ihn zu 8A 6B FD Das ist das, was sich der Prozessor holt. Für den Prozessor sind Befehle einfach nur Zahlen. In einem Computer ist ausnahmslos alles einfach nur eine Zahl. Je nachdem wie die Zahl verwendet wird, bedeutet sie etwas anderes. Hier wird die Zahl vom Prozessor als Code für einen Befehl aufgefasst. Warum? Weil der Prozessor laufend den Zyklus ausführt 'Hole Befehl aus dem Speicher, dekodiere ihn, führe ihn aus'. Also holt er sich die nächste Zahl(en) aus dem Speicher und fasst sie als Befehl auf. Und in diesem Fall besteht ein kompletter Befehl eben aus mehreren Zahlen. Der Prozessor holt sich die erste, stellt fest, dass da noch was fehlt und holt die nächsten Bytes um den Befehl vollständig zu haben. Also: Wieviele Bytes sind das, wieviele Bytes müssen daher aus dem Speicher geholt werden, bis der Befehl komplett gelesen wurde und wieviele Lesezyklen sind das daher? > >> c) Wie viele externe Lesezyklen werden durch die Befehlsausführung >> ausgelöst? > >> Findest du ebenfalls im Dantblatt. Bei der Beschriebung des MOV >> Befehles. > > --> Auf jedenfall einen Zyklus mehr da es aus dem Speicher geladen > werden muss. Was macht denn der MOV Befehl? Wiviele Datentransfers aus dem Speicher in den Prozessor sind notwendig, damit der MOV Befehl das tut, was der Befehl dem Prozessor vorschreibt.
Karl Heinz Buchegger schrieb: > Karl Meyer schrieb: > Der Prozessor liest doch nicht den Text "mov cl, ds:(bp + di - 3)" um > ihn auszuführen! > Der Assembler liest den Text und übersetzt ihn zu > > 8A 6B FD > > Also: Wieviele Bytes sind das, wieviele Bytes müssen daher aus dem > Speicher geholt werden, bis der Befehl komplett gelesen wurde und > wieviele Lesezyklen sind das daher? --> 3 Bytes >>> c) Wie viele externe Lesezyklen werden durch die Befehlsausführung >>> ausgelöst? >> >>> Findest du ebenfalls im Dantblatt. Bei der Beschriebung des MOV >>> Befehles. >> >> --> Auf jedenfall einen Zyklus mehr da es aus dem Speicher geladen >> werden muss. > > Was macht denn der MOV Befehl? > Wiviele Datentransfers aus dem Speicher in den Prozessor sind notwendig, > damit der MOV Befehl das tut, was der Befehl dem Prozessor vorschreibt. --> Der mov Befehl kopiert den Inhalt des einen Registers in das andere. (Auch wenn ich eher verschieben gedacht hätte wegen move :P) Also ein Befehl um das (Quell-)Register zu finden und einen zum lesen(weitergeben). (2 Lesezyklen mehr)
Karl.M. schrieb: > [...] AM 188 CPU Der AM188 ist ein x86-Prozessor. Du kannst also alle Aufgaben mit Deinem PC nachvollziehen. In diesem Fall ist das Programm DEBUG.EXE gut geeignet. Allerdings ist dort die Schreibweise etwas anders. > enthalten die Werte > ax:19h, bp:F3h, cx:37h, dx41h, di:20h, cs:9FF7h, ds:AFF9h. Programm und > Daten liegen im externen RAM. Per Default wird ds als > Datensegment-Register verwendet. Die nächste auszuführende Anweisung > lautet: mov cl, ds:(bp + di -3). Die Anweisung wird Übersetz in den > OP-Code 8A6BFD. > a) Auf welche physikalische(n) Adresse(n) greift der Controller mit der > genannten Anweisung zu? Stichwort: Berechnung einer physikalischen 20-Bit-Adresse mithilfe des Segmentregisters (DS): 1) (bp + di - 3) = (F3h + 20h - 3) = 110h (h="hexadezimal") 1) ds=AFF9h - Physikalisch: AFF90h (eine '0' hinten drangehängt) 3) Addieren: 110h + AFF90h = B00A0h Die physikalische Adresse ist B00A0h, in x86-Schreibweise: B000:00A0 oder B00A:0000 oder ... > b) Wie viele externe Lesezyklen werden durch das Laden des Befehls > ausgelöst? Opcode 8A6BFD bedeutet 3 Bytes. Da der Prozessor einen 8-Bit-Bus hat und dementsprechend nur ein Byte auf einmal lesen kann, braucht er drei Lesezyklen zum Laden des Befehls. > c) Wie viele externe Lesezyklen werden durch die Befehlsausführung > ausgelöst? Da nur ein Byte gelesen wird: ein Lesezyklus. > ----> Ist b und c nicht das gleiche Ergebnis ? Nein. "Laden des Befehls" bedeutet: Die Bytefolge für den Befehl aus dem Speicher holen. "Ausführen des Befehls" heißt hier: Ein Byte aus dem Speicher holen und in CL ablegen. "Lesezyklus" ist nicht gleichbedeutend mit "Prozessortakt". > d) Wo und wann findet die Adressberechnung für den Speicherzugriff > statt? In der CPU und dort in der "Execution Unit" (siehe Blockdiagramm im Datenblatt). Ob für die Adressberechnung die ALU in Anspruch genommen wird, ist prozessorspezifisch, kurz: warte ab, was der Dozent sagt. Genau dasselbe für den Zeitpunkt der Berechnung. > e) Wie nennt man die Art der verwendeten Adressierung? Based Indexed with Displacement (laut Datenblatt) > f) Der Befehl mov cl, es:[bp di -3] wird zu 268A6BFDh übersetzt. > Erläutern Sie den Unterschied der beiden gezeigten OP-Codes! Stichwort: Segment Override. Aus irgendeinem Grund ist der Dozent der Meinung das mov cl, ds:(bp + di -3) vom Assembler ohne Segment Override übersetzt wird. Auf die Schnelle behaupte ich, dass die physikalische Adresse defaultmäßig mithilfe des SS-Registers gebildet wird, so dass der Segment Override (ds:) vom Assembler berücksichtigt wird und der Opcode eigentlich 3E8A4BFDh sein sollte. > g) In beiden OP-Codes ist das letzte Byte jeweils FDh warum? Was > bedeutet das hier (Fachbegriff)? Beide Befehle haben dasselbe Displacement (minus 3). viele grüße ralph
Karl Meyer schrieb: > --> Der mov Befehl kopiert den Inhalt des einen Registers in das andere. Nicht in diesem Fall. "ds:(bp + di - 3)" ist keine Angabe eines Registers, sondern spezifiziert eine Adresse im Speicher (darum dreht sich doch die ganze AUfgabe vom ersten Wort bis hier her! Um das Lesen aus dem Speicher. Und dann sagst du ein Datentransfer von Register nach Register. Bischen mitdenken, bitte!) > Also ein Befehl um das (Quell-)Register zu finden und einen zum > lesen(weitergeben). (2 Lesezyklen mehr) Erstens falsch. Denn wenn das ein Register nach Register Transfer wäre, würde überhaupt kein externer Datentransfer notwendig sein. Der Befehl würde komplett innerhalb des Prozessors ablaufen. Zweitens: kein 'mehr'. Die Frage lautet nicht "Wieviele kommen noch dazu", sondern "Wieviele externe Transfers laufen bei abarbeiten des Befehls an". Etwas mehr Genauigkeit, sonst wirst du ganz schnell auf die Schnauze fallen. Ganz besonders in der Assembler-Programmierung. Drittens, gibt es beim MOV viele verschiedene Arten, welche Daten von wo nach wohin transferiert werden. Register nach Register ist nur eine davon. Memory nach Register oder Register nach Memory gibt es auch noch. WObei es dann verschiedene Möglichkeiten gibt, wie man die Adresse im Memory festlegt, von der gelesen/auf die geschrieben werden soll. ALso: Was macht in diesem Fall der Befehl MOV?
Danke Ralph, dass du dem TO das Denken abnimmst. Das sind Dinge, die muss er selbst begreifen. ER muss die Lösung zu den Aufgaben finden! Gib ihm Hilfestellung, winke mit dem Zaunpfahl aber bete ihm das nicht vor. Hier geht es darum, dass er die Systematik lernen muss, die Denkweise, das Schema das da abläuft.
Karl Heinz Buchegger schrieb: > Danke Ralph, dass du dem TO das Denken abnimmst. Ob er sich das Denken bzw. Lernen abnehmen lässt, ist seine Sache. Ich versuche nur, ihm das Rätselraten zu erleichtern. viele grüße ralph
> ALso: Was macht in diesem Fall der Befehl MOV? mov cl, ds:(bp + di -3) Es wird der Inhalt der Physikalischen Adresse (die vorher berechnet wird) nach cl kopiert. So stell ich mir das jedenfalls vor. Danke an Ralph. Und natürlich will ich das verstehen, wenn es neue Aufgaben gibt steh ich sonst wieder dumm da ;) > g) In beiden OP-Codes ist das letzte Byte jeweils FDh warum? Was > bedeutet das hier (Fachbegriff)? > Beide Befehle haben dasselbe Displacement (minus 3). Laut der Liste hier http://www.tealdragon.net/humor/defs/assemblr.htm ist FD = Forget Data. Gibts da jetzt wieder Unterschiede und woher finde ich das richtige ?. Um noch einmal auf meinen ersten Post einzugehen: Gibt es ein Empfehlenswertes Buch das alle diese Themen aufgreift und verständlich erklärt ?
Karl Meyer schrieb: > Laut der Liste hier http://www.tealdragon.net/humor/defs/assemblr.htm > ist FD = Forget Data. Gibts da jetzt wieder Unterschiede und woher finde > ich das richtige ?. Dir ist aber schon klar dass * diese Seite Satire ist * wir hier von einem Hex-Byte sprechen, das Teil eines Opcodes ist * die Seite Satire ist FD ist die 2-er Komplement SChreibweise für -3 Wie kommt das zu Stande? (Bitte zeigen! 2-er Komplement ist wichtig für Assembler-Programmierer) Vielleicht solltest du dir erst mal diese Seite ab der Stelle die ich verlinkt habe, reinziehen http://www.mikrocontroller.net/articles/AVR-Tutorial:_Arithmetik8#8-Bit_Arithmetik_ohne_Ber.C3.BCcksichtigung_eines_Vorzeichens damit du nicht so auf verlorenem Posten stehst, wenn es um Bits und Bytes geht. Von Binärzahlen auf Hex-Schreibweise macht dir aber hoffentlich keine Probleme?
> Gibt es ein Empfehlenswertes Buch das alle diese Themen aufgreift > und verständlich erklärt ? empfehlenswert wäre vor allen Dingen, wenn du deine Vorlesung abwarten würdest und deinem Dozenten zuhörst. Im Grunde ist das nämlich alles nicht wirklich schwer (sonst könnte man es nämlich nicht einer Maschine beibringen). Nur musst du systematisch durch die einzelnen Problemkreise geführt werden. Und das geht nicht wirklich gut durch ein Fragen und Antwort Spielchen in einem Forum.
Karl Meyer schrieb: > Laut der Liste hier http://www.tealdragon.net/humor/defs/assemblr.htm > ist FD = Forget Data. Gibts da jetzt wieder Unterschiede und woher finde > ich das richtige ?. made my day! lol!
Danke für den Link.
FD = 11111101
11111101
00000010 invertiert
1 1 addieren
--------
00000011 --> 0b00000011
Korrekt ?
Das mit der Seite für die Codes ist mir später auch aufgefallen, hatte
nicht die anderen gelesen sondern nur nach dem FD gesucht :D
Mal was anderes, gibt es so etwas wie einen Software Logic Analyzer ?
Würde mir das gern einmal anschauen. Denn aus dem am188 Datenblatt werde
ich nicht ganz schlau wann /wr /r /cs etc. zum Einsatz kommt (Am
Assembler Code erkenn ich das (noch) nicht. Da aber viele meinen das
Fach sei schwer wollt ich mich schon gut vorbereiten.
gruß
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.