Forum: Mikrocontroller und Digitale Elektronik Assembler Vorbereitung (Tips gesucht)


von Karl.M. (Gast)


Lesenswert?

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)?
von Karl H. (kbuchegg)


Lesenswert?

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?
von Karl.M. (Gast)


Lesenswert?

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.
von Karl M. (karlmeyer)


Lesenswert?

Habe das erste mal versucht und komme auf die Adresse: AFFA10h ?
von Peter B. (pbuenger)


Lesenswert?

Nö, passt nicht.

Sieh Dir doch erst einmal an, wie aus Segment und Offset die 20Bit 
Speicheradresse gebildet wird.

Peter
von Karl M. (karlmeyer)


Lesenswert?

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 ?
von slow (Gast)


Lesenswert?

>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.
von Peter B. (pbuenger)


Lesenswert?

> AFF90000 (4 Bit verschoben, deswegen die 4 Nullen?)

Nein, passt auch nicht.
Stichworte: Bits, Bytes und die hexadezimale Schreibweise.
von Karl M. (karlmeyer)


Lesenswert?

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.
von Peter B. (pbuenger)


Lesenswert?

> 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
von Karl H. (kbuchegg)


Lesenswert?

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.
von Karl M. (karlmeyer)


Lesenswert?

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)
von Ralph B. (rkhb)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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?
von Karl H. (kbuchegg)


Lesenswert?

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.
von Ralph B. (rkhb)


Lesenswert?

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
von Karl M. (karlmeyer)


Lesenswert?

> 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 ?
von Karl H. (kbuchegg)


Lesenswert?

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?
von Karl H. (kbuchegg)


Lesenswert?

> 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.
von ausfüllen bitte (Gast)


Lesenswert?

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!
von Karl M. (karlmeyer)


Lesenswert?

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
Noch kein Account? Hier anmelden.