Forum: Mikrocontroller und Digitale Elektronik Welche Werte werden in den Akkumulator geladen?


von user555 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich sitze seit langer Zeit an einem Aufgabenteil fest, und wollte nun an 
dieser Stelle das Forum um Hilfe fragen.

Und zwar ist meine Frage, welche Werte bei einer Adressierungsart wie in 
der Aufgabe in den Akkumulator geladen werden.

Angenommen für den ersten Wert des Indexregisters von 0404 nach der 
Aufgabe:
Ich verstehe, dass die effektive Adresse dann 0412 sein muss, da in der 
Zeile 0400 die Spalte 4 gewählt werden muss.

Wie aber bestimmt man nun, welcher Wert daraus in den Akkumulator 
geladen wird?

von Wolfgang (Gast)


Lesenswert?

user555 schrieb:
> Wie aber bestimmt man nun, welcher Wert daraus in den Akkumulator
> geladen wird?

Dann lies dir noch mal durch, welche Funktion das Indexregister bei der 
indirekten Adressierung hat.

von Michael U. (amiga)


Lesenswert?

Hallo,

mich verwirrt etwas die Syntax: LDA ((Y))

Sieht stark nach indirekt indiziert Y aus...
Da würde dann in der ersten Zeile die 01 aus 0412 im Akku landen.
Scheint mir ein fiktiver Prozessor zu sein, zumindest kommt er mir nicht 
bekannt vor.

Gruß aus Berlin
Michael

von (prx) A. K. (prx)


Lesenswert?

Michael U. schrieb:
> Scheint mir ein fiktiver Prozessor zu sein, zumindest kommt er mir nicht
> bekannt vor.

Speicherindirekte Adressierung gibts auch heute noch (z.B. bei den 
Freescale '12). Nur muss man nicht unbedingt damit rechnen, dass 
Aufgaben auf exakt so existierenden Prozessoren fussen. Etwas 
künstlerische Freiheit muss man schon verkraften. Da es aber für die 
Syntax von Adressierungen keine zwingende ISO-Norm gibt, muss das 
irgendwo anders erklärt worden sein. Gemäss Frescale-Syntax wär das ja 
dreifach indirekt (gab es auch mal). Sowas verpennt zu haben, ist 
natürlich blöd.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

user555 schrieb:
> Wie aber bestimmt man nun, welcher Wert daraus in den Akkumulator
> geladen wird?

 Das ist dann die Adresse.
 Obwohl, für mich sieht es so aus, als ob derjenige, der die Aufgabe
 gestellt hat, es auch nicht so ganz verstanden hat...

Indexregister Y  |  effektive Adresse  |  Akkumulator A
=======================================================
  0404                  0412                  01
  041e                  041F                  04
  0399                  0404                  12
  040d                  0604               FEHLER !

: Bearbeitet durch User
von hinz (Gast)


Lesenswert?

Marc V. schrieb:
> Obwohl, für mich sieht es so aus, als ob derjenige, der die Aufgabe
>  gestellt hat, es auch nicht so ganz verstanden hat...

Hat es wohl, und du bist sogar auf seine Falle reingefallen.

von Strawberry (Gast)


Lesenswert?

hinz schrieb:
> Marc V. schrieb:
> Obwohl, für mich sieht es so aus, als ob derjenige, der die Aufgabe
>  gestellt hat, es auch nicht so ganz verstanden hat...
>
> Hat es wohl, und du bist sogar auf seine Falle reingefallen.

Auf was für eine Falle ist er denn hereingefallen?

von eProfi (Gast)


Lesenswert?

Das, was in 412 steht: 01
0404: 0412: 01
041e:
0399:
040d:
nennt sich y-indizierte speicher-indirekte Adressierung

von eProfi (Gast)


Lesenswert?

Uups, ganz übersehen, dass die Nacht-eulen fleißig waren.
Auch mir scheint es so, als ob ein Praktikant die Aufgabe stellte.
1
0390
2
03a0 bis 03f0 fehlen hier
3
0400
4
0410
Ich könnte mir vorstellen, das 40d sollte 41d heißen, dann wäre das 
Ergebnis 041f: 04

Oder es sollte wirklich eine Fangfrage (Einser-Bremse) sein mit dem 
falschen Ergebnis 0406: 92

EA (Effective Address) klingt tatsächlich nach Motorola.
Gab es nicht was doppelt indiziertes (addr+x)+y? In einer anderen 
Architektur?

von (prx) A. K. (prx)


Lesenswert?

eProfi schrieb:
> EA (Effective Address) klingt tatsächlich nach Motorola.

Schon, aber die Notation ((y)) hat dafür eine Klammerung zu viel. EA=R 
schreibt sich bei Motorola Mnemonics als R, bei Zilog als (R). Die 
Schreibweise ((Y)) kriegt man, wenn man eine Motorola 6809 mit Zilogs 
Syntax schreibt.

> Gab es nicht was doppelt indiziertes (addr+x)+y? In einer anderen
> Architektur?

6502, aber entweder EA=(addr+x) oder EA=(addr)+y, und addr,x,y mit 8 Bit 
Breite. 68HC12 und STM8 haben auch was in der Richtung. EA=(y) mit 
16-Bit y ohne Offset gab es bei 6809.

: Bearbeitet durch User
von G. O. (aminox86)


Lesenswert?

Also, ich würde den Befehl LDA((Y)) so interpretieren:
"Lade den Inhalt der Adresse die der Inhalt des Y-Registers adressiert 
in den Akku".
Für die erste Zeile der Aufgabe rechne ich 0x0404+0x0012=0x0416. Das ist 
die effektive Adresse. Der Akku enthält dann 0x92. In C würde man 
X=**ptr schreiben.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

G. O. schrieb:
> Für die erste Zeile der Aufgabe rechne ich 0x0404+0x0012=0x0416.

Warum addierst du?

von (prx) A. K. (prx)


Lesenswert?

@G.O.: Meinst das ernst oder willst du ihn verarschen?

von G. O. (aminox86)


Lesenswert?

A. K. schrieb:
> willst du ihn verarschen?

Dein Ton gefällt mir nicht!
Wenn ich daneben liege, dann erklär´ mir das vernünftig, aber nicht so!!

Stefanus F. schrieb:
> Warum addierst du?
Naja, in den Rechnerarchitekturen, die ich kenne, erfolgt die 
Adressberechnung durch Addition. Ich vermute, dass es in dem Beispiel 
ebenso gemeint ist.

von hinz (Gast)


Lesenswert?

Strawberry schrieb:
> hinz schrieb:
>> Marc V. schrieb:
>> Obwohl, für mich sieht es so aus, als ob derjenige, der die Aufgabe
>>  gestellt hat, es auch nicht so ganz verstanden hat...
>>
>> Hat es wohl, und du bist sogar auf seine Falle reingefallen.
>
> Auf was für eine Falle ist er denn hereingefallen?

Er hat "Fehler!" statt "unbekannt" geschrieben.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

G. O. schrieb:
> Stefanus F. schrieb:
>> Warum addierst du?
> Naja, in den Rechnerarchitekturen, die ich kenne, erfolgt die
> Adressberechnung durch Addition. Ich vermute, dass es in dem Beispiel
> ebenso gemeint ist.
 Da vermutest du aber falsch.

G. O. schrieb:
> Also, ich würde den Befehl LDA((Y)) so interpretieren:
> "Lade den Inhalt der Adresse die der Inhalt des Y-Registers adressiert
> in den Akku".
 Ich auch.

G. O. schrieb:
> Für die erste Zeile der Aufgabe rechne ich 0x0404+0x0012=0x0416. Das ist
> die effektive Adresse. Der Akku enthält dann 0x92. In C würde man
> X=**ptr schreiben.
 Das ist aber nicht das, was du geschrieben und interpretiert hast.

 P.S.
 Für mich wäre es aber so irgendwie logischer:
1
  LDA (Y)       ; Lade Akku mit Adresse auf die der Y-reg zeigt
2
  LDA ((Y))     ; Addiere Inhalt der Adresse auf die der Y-reg zeigt, zu Akku

 Aber dann würde da wahrscheinlich ADDA stehen.
 Unlogisch und fehlerhaft auf jeden Fall...

: Bearbeitet durch User
von hinz (Gast)


Lesenswert?

Das ist einfach doppelt indirekte Adressierung.

von (prx) A. K. (prx)


Lesenswert?

Marc V. schrieb:

>   LDA (Y)       ; Lade Akku mit Adresse auf die der Y-reg zeigt

Den 8-Bit Akku wirklich mit einer 16 Bit Adresse laden? Oder doch lieber 
mit dem Speicherinhalt an dieser Adresse? Ich will hier keine Haare 
spalten, nur ist sprachliche Präzision dabei entscheidend.

Abgesehen davon wäre das Zilog-Notation, vgl
  LD A,(HL)
während es in Motorola-Notation
  LDA Y
heisst.

>   LDA ((Y))     ; Addiere Inhalt der Adresse auf die der Y-reg zeigt, zu
> Akku

Da wird nichts addiert. Addition wäre meist der Stamm ADD*, manchmal 
auch bloss A* (z.B. IBM). Das abschliessende A steht idR für den Akku. 
Um das Y Register selbst zu laden, verwendet man dann LDY.

In Zilog-Notation würden damit die 2 Bytes Speicherinhalt, auf die Y 
verweist, zur Adresse des aus dem Speicher in den Akku zu ladenden 
Bytes.

In Motorola-Notation werden damit diese von Y adressierten 2 Bytes im 
Speicher nicht zur Adresse des Operanden, sondern zu einer weiteren 
Speicheradresse aus 2 Bytes, die auf den Operanden verweist. Also 5 
byteweise Speicherzugriffe insgesamt, zwei 2-Byte Adressen und das 
Datenbyte. Da gab es in dieser Form mW nie.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Aufgabenstellung ist ohne den weitere Kontext zu kennen nicht 
eindeutig zu beantworten.

Dreh- und Angelpunkt ist die etwas merkwürdige Notation "LDA ((Y))".

Die kann zwei Dinge bedeuten, doppelte Indirektion (Lade den Inhalt 
der Speicherzelle, auf die die Speicherzellen zeigen, auf die das 
Index-Register zeigt) und einfache Indirektion (Lade den Inhalt der 
Speicherzelle, auf die das Index-Register zeigt).

Die auszufüllende Tabelle, die eine Spalte namens "effektive Adresse" 
enthält, deutet darauf hin, daß es um doppelte Indirektion gehen 
könnte. Für einfache Indirektion wäre diese Spalte merkwürdig 
überflüssig, da in ihr der Wert aus der ersten Spalte eingetragen werden 
müsste.

Bei doppelter Indirektion läst sich die letzte Zeile der Tabelle nicht 
ausfüllen, da der partielle Speicherdump den hier referenzierten 
Speicherbereich nicht enthält.

von Neverever (Gast)


Lesenswert?

Leute, das ist eine Aufgabe der FernUni Hagen, Kurs 01706 - 
Anwendungsorientierte Mikroprozessoren. Im WS13 war das Aufgabe 3-5. Die 
habe ich nämlich für meinen Master gemacht ;)


Lösung ist:
1
Indexregister Y effektive Adresse Akkumulator A 
2
0404            0412              01                             
3
041E            041F              04                             
4
0399            0404              12                             
5
040D            0416              92
Die Adressierungsart wird als „indirekte Register-indirekte 
Adressierung“ bezeichnet.

user555 hätte ehrlicherweise zugeben können, woher das kommt - und das 
Aufgabenblatt vorher nicht bearbeiten sollen. Sowas ist einfach nur 
peinlich.
--
tabelle der Lesbarkeit halber in [ pre ]-Tags gesetzt
-rufus

: Bearbeitet durch User
von Neverever (Gast)


Lesenswert?

Der erste Teil der Aufgabe besteht übrigens darin, die Adressierungsart 
in Worten zu beschreiben. Lösung:

Das Indexregister Y zeigt auf die Anfangsadresse eines Speicherwortes 
aus zwei Bytes. Dieses Speicherwort gibt im Little-Endian-Format die 
Adresse des Bytes im Speicher an, mit dessen Wert der Akkumulator A 
geladen werden soll.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Neverever schrieb:
> Lösung ist:
>
> Indexregister Y effektive Adresse Akkumulator A
> 0404            0412              01
> 041E            041F              04
> 0399            0404              12
> 040D            0416              92

 Nein, ist es nicht, jedenfalls nicht mit der angegebenen Tabelle.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die letzte Zeile kann so nicht stimmen.

1
040D            0416              92

Um auf diese effektive Adresse zu kommen, müsste Y=040C sein.

Bei Y=040D aber ist die effektive Adresse 0604.

von (prx) A. K. (prx)


Lesenswert?

G. O. schrieb:
> A. K. schrieb:
>> willst du ihn verarschen?
>
> Dein Ton gefällt mir nicht!

Ist schon vorgekommen, dass jemand auf eine vom Fragesteller selbst zu 
lösende Aufgabe mit Irreführung antwortet. Das zu widerlegen wäre 
unsinnig gewesen.

> Wenn ich daneben liege, dann erklär´ mir das vernünftig, aber nicht so!!

Ok.

G. O. schrieb:
> Also, ich würde den Befehl LDA((Y)) so interpretieren:
> "Lade den Inhalt der Adresse die der Inhalt des Y-Registers adressiert
> in den Akku".

Siehe eben.

> Für die erste Zeile der Aufgabe rechne ich 0x0404+0x0012=0x0416.

Y enthält die Adresse 0x0404. Im Speicher steht an dieser Adresse das 
Byte 0x12. Das addierst du hier zu seiner eigenen Adresse 0x0404. Viel 
Sinn ergibt das nicht:
   X = *(ptr + *ptr);
und ist nicht äquivalent zu
   X = **ptr

G. O. schrieb:
> Naja, in den Rechnerarchitekturen, die ich kenne, erfolgt die
> Adressberechnung durch Addition. Ich vermute, dass es in dem Beispiel
> ebenso gemeint ist.

Wenn eine Adresse aus einer Summe von Werten ermittelt wird, dann wird 
üblicherweise auf 2 Arten formuliert. Entweder durch Komma:
  lda table,x    -- 6502, 6800
  mov r1,(r2,4)  -- diverse RISC, ggf auch [r2,#4]
oder durch +
  mov ax,[si+4]  -- Intel 8086
wobei Intel eckige Klammern verwendet, sie deutlich von runden Klammern 
in Rechenausdrücken zu unterscheiden, also
  mox ax,[si+(N*2)]

Eine Notation (y) steht aber mE immer für etwas im Speicher an der durch 
Y angegebenen Adresse. Was je nach Notation das Datum oder eine weitere 
Adresse sein kann, s.o.

von Neverever (Gast)


Lesenswert?

Marc V. schrieb:
> Neverever schrieb:
>> Lösung ist:
>>
>> Indexregister Y effektive Adresse Akkumulator A
>> 0404            0412              01
>> 041E            041F              04
>> 0399            0404              12
>> 040D            0416              92
>
>  Nein, ist es nicht, jedenfalls nicht mit der angegebenen Tabelle.


Doch, wenn man das Ganze immer modulo2 betrachtet. So wie es auch in 
Hardware realisiert würde. Daher ist es egal, ob nun das Low- oder 
Highbyte adressiert wurde.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Neverever schrieb:
> Doch, wenn man das Ganze immer modulo2 betrachtet. So wie es auch in
> Hardware realisiert würde.

Magst Du versuchen zu erklären, was Du damit meinen willst?

Das letzte Beispiel (Y=040D) genügt dafür.

von Thomas E. (picalic)


Lesenswert?

A. K. schrieb:
>> Gab es nicht was doppelt indiziertes (addr+x)+y? In einer anderen
>> Architektur?
>
> 6502, aber entweder EA=(addr+x) oder EA=(addr)+y, und addr,x,y mit 8 Bit

Der Ur-6502 kannte auch (addr16), also absolut indirect, aber nur als 
Adresse für JMP.
Der 65C02 hatte dann auch (addr8) für indirekte Adressierung über einen 
Zeiger in der Zeropage ohne Indexregister.

von Einer K. (Gast)


Lesenswert?

Neverever schrieb:
> Doch, wenn man das Ganze immer modulo2 betrachtet. So wie es auch in
> Hardware realisiert würde. Daher ist es egal, ob nun das Low- oder
> Highbyte adressiert wurde.

Witzig....

von (prx) A. K. (prx)


Lesenswert?

Soll heissen: Wenn das exakt so mit LDA ((Y)) die Aufgabe ist, dann kann 
ich diese Notation eigentlich nur als vorsätzliche Abweichung von 
bestehenden Architekturen interpretieren. Damit der Lernende nicht 
einfach abschreibt, sondern denkt.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Neverever schrieb:
> Doch, wenn man das Ganze immer modulo2 betrachtet. So wie es auch in
> Hardware realisiert würde. Daher ist es egal, ob nun das Low- oder
> Highbyte adressiert wurde.

 Noch einmal bitte, aber langsam.

von user555 (Gast)


Lesenswert?

Danke für die Antworten.
Die Aufgabe ist im Übrigen aus dem Buch "Mikrorechner-Technik" von 
Helmut Bähring und nicht von der Fernuni Hagen. Ich hatte die Aufgabe 
gekürzt, weil die ersten beiden Teilaufgaben irrelevant waren.

Laut den Lösungen im Buch ist das bereits genannte Ergebnis richtig:

>> 0404            0412              01
>> 041E            041F              04
>> 0399            0404              12
>> 040D            0416              92

Kann mir jemand einen Tipp geben, warum zum Beispiel in der ersten Zeile 
01 in den Akkumulator geladen wird. Ich habe mich etwas in die indirekte 
Register-Adressierung eingelesen, um der es in der Aufgabe geht, aber so 
ganz habe ich den Zusammenhang zum Ergebnis immer noch nicht verstanden.

von (prx) A. K. (prx)


Lesenswert?

user555 schrieb:
> Kann mir jemand einen Tipp geben, warum zum Beispiel in der ersten Zeile
> 01 in den Akkumulator geladen wird.

Das steht doch mittlerweile deutlich genug im Thread.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn das Ergebnis richtig sein soll, enthält die Aufgabe einen Fehler.

von (prx) A. K. (prx)


Lesenswert?

Rufus Τ. F. schrieb:
> Wenn das Ergebnis richtig sein soll, enthält die Aufgabe einen Fehler.

Kein Fehler, nur fehlende Information: Zwischen der 3. und der 4. Zeile 
wurde die Maschine auf big endian umgeschaltet.

von user555 (Gast)


Lesenswert?

Ich bin leider noch absoluter Anfänger auf dem Gebiet, deshalb habe ich 
manch lange Antworten nicht ganz verstanden, und in vielen Antworten 
wurde nur auf die Art der Adressierung hingewiesen.


Ansonsten habe ich nochmal über den Post von Neverever nachgedacht:

"Das Indexregister Y zeigt auf die Anfangsadresse eines Speicherwortes
aus zwei Bytes. Dieses Speicherwort gibt im Little-Endian-Format die
Adresse des Bytes im Speicher an, mit dessen Wert der Akkumulator A
geladen werden soll."

Aber ich verstehe dann noch nicht, warum zum Beispiel 01 der Wert der 
Adresse ist.

von (prx) A. K. (prx)


Lesenswert?

user555 schrieb:
> Aber ich verstehe dann noch nicht, warum zum Beispiel 01 der Wert der
> Adresse ist.

Es gibt Menschen, die nicht in der Lage sind, Aufgabe von vorne nach 
hinten zu lesen und Schritt für Schritt nachzuvollziehen. Sondern die 
wild rumspringen, ganzheitlich denken oder hinten anfangen. Das wäre ein 
miserable Aussicht auf diesen Fachbereich.

Aber muss ja nicht so sein. Also geh seine Beschreibung von vorne nach 
hinten durch und kommentiere, was dir dazu in den Sinn kommt.

: Bearbeitet durch User
von G. O. (aminox86)


Lesenswert?

user555 schrieb:
> Die Aufgabe ist im Übrigen aus dem Buch "Mikrorechner-Technik" von
> Helmut Bähring und nicht von der Fernuni Hagen.

Dann muß doch irgendwo im Buch stehen wie diese doppelte Klammerung zu 
verstehen ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. K. schrieb:
> Kein Fehler, nur fehlende Information: Zwischen der 3. und der 4. Zeile
> wurde die Maschine auf big endian umgeschaltet.

Nö, auch das erklärt es nicht, wie die effektive Adresse 0416 werden 
soll.
1
Y = 040D
2
3
040C 16
4
040D 04 <-- hierhin zeigt Y
5
040E 06
6
040F 03

Bei big-Endian-Adressierung wäre die effektive Adresse 0406, aber 
niemals 0416.

von (prx) A. K. (prx)


Lesenswert?

Rufus Τ. F. schrieb:
> Bei big-Endian-Adressierung wäre die effektive Adresse 0406, aber
> niemals 0416.

Ok, aber an 0406 steht auch 92. Fuzzy logik for dummies. ;-)

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

user555 schrieb:
> Aber ich verstehe dann noch nicht, warum zum Beispiel 01 der Wert der
> Adresse ist.

 Jetzt etwas klarer ?

von Theor (Gast)


Lesenswert?

user555 schrieb:
> Ich bin leider noch absoluter Anfänger auf dem Gebiet, deshalb habe ich
> manch lange Antworten nicht ganz verstanden, und in vielen Antworten
> wurde nur auf die Art der Adressierung hingewiesen.
>
>
> Ansonsten habe ich nochmal über den Post von Neverever nachgedacht:
>
> "Das Indexregister Y zeigt auf die Anfangsadresse eines Speicherwortes
> aus zwei Bytes. Dieses Speicherwort gibt im Little-Endian-Format die
> Adresse des Bytes im Speicher an, mit dessen Wert der Akkumulator A
> geladen werden soll."
>
> Aber ich verstehe dann noch nicht, warum zum Beispiel 01 der Wert der
> Adresse ist.

Das geht aus den zitierten Sätzen hervor. Welchen Satz, Teilsatz oder 
Begriff verstehst Du nicht? Verstehst Du den Inhalt (eines Satzes, 
Teilsatzes oder Begriffes) nicht oder dessen Anwendung?
Es reicht nicht zu sagen: "Geht nicht" wenn Du Deinen Fehler verstehen 
willst. Dafür musst Du Dein Verständnis schon mit eigenen Worten 
darstellen.

von user555 (Gast)


Lesenswert?

Vielen Dank Mark für die eingezeichneten Pfeile.
Jetzt habe ich es endlich verstanden mit den Akkumulatorwerten :)

von Wolfgang (Gast)


Lesenswert?

user555 schrieb:
> Laut den Lösungen im Buch ist das bereits genannte Ergebnis richtig:
> ...
>>> 040D            0416              92

Nur hat noch keiner verstanden, wie der Autor mit der im Test 
beschriebenen Adressierung auf die 92 als Lösung zu Y=040D kommt - auch 
wenn die Lösungen im Buch behaupten, dass sie so lautet.

von Thomas E. (picalic)


Lesenswert?

Wolfgang schrieb:
> Nur hat noch keiner verstanden, wie der Autor mit der im Test
> beschriebenen Adressierung auf die 92 als Lösung zu Y=040D kommt - auch
> wenn die Lösungen im Buch behaupten, dass sie so lautet.

Offenbar sind die Behauptungen im Buch bzw. die Aufgaben schlicht 
fehlerhaft - schaut Euch z.B. die Kundenrezensionen auf Amazon an:
https://www.amazon.de/Mikrorechner-Technik-L%C3%B6sungen-eXamen-press-Helmut-B%C3%A4hring-ebook/dp/B00Q8LLIGU

(Wenn man für solches Lehrmaterial Geld ausgegeben hat, müsste man das 
eigentlich konsequent zurück verlangen. Hat man bei Büchern nicht auch 
einen Anspruch auf Mängel-freie Ware?)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Die Aufgabenstellung ist ohne den weitere Kontext zu kennen nicht
> eindeutig zu beantworten.

Für ist klar das doppelte Indirektion gemeint ist, weil

a) Zwei Klammern werden keinesfalls einfache Indirektion bedeuten. Und 
von dreifacher Indirektion habe ich noch nie etwas gehört.

b) Die Frage nach der effektiven Adresse wäre bei einfacher Indirektion 
sinnlos.

> Offenbar sind die Behauptungen im Buch bzw. die Aufgaben schlicht
> fehlerhaft - schaut Euch z.B. die Kundenrezensionen auf Amazon an

Es gibt dort genau zwei Kundenrezensionen:

"Die vielen Layoutfehler (z.B. wahllos eingestreute Leerzeichen) im Buch 
könnte ich noch tolerieren. Aber die inhaltlichen Fehler machen die 
Aufgabensammlung zu einer Katastrophe: kaum eine Lösung, die keine 
Rechenfehler o.ä. enthält. Man muss ständig auf der Hut sein und fragt 
sich, ob man selbst oder der Autor sich verrechnet hat."

"Die Lösungen zu den gut gewählten Aufgaben sind zwar recht 
verständlich, leider aber oft fehlerhaft.
Zur Klausurvorbereitung ist dieses Buch daher ohne weitere Hilfe nicht 
geeignet."

Ist ein bisschen traurig, wenn nach 13 Jahren keine weitere (bessere) 
Bewertung bekommt. Alle anderen Shops haben gar keine Bewertung 
vorzuweisen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ob sich "neverever" nochmal meldet und das Original seiner 
Prüfungsaufgabe vorstellt?

Ich kann mir kaum vorstellen, daß eine Fernuni sich so einen Schnitzer 
in einer Aufgabe erlaubt.

von W.S. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Nö, auch das erklärt es nicht, wie die effektive Adresse 0416 werden
> soll.

Es ist eben immer eine Krux mit dem sauberen und sachgerechten 
Darstellen von Aufgabenstellungen, wenn der Lehrende meint, den 
Studenten eine theoretische Maschine vorsetzen zu müssen. In solchem 
Falle müßte der gute Mann seinen Studenten zuvörderst die 
zugrundeliegende Syntax erklären. Aber so ein lapidares LDA((Y)) ist 
schlichtweg ein Furz, da in der Aufgabe undefiniert. Ebenso ist die 
Funktion eines Indexregisters unerklärt.

Mit einer Menge an Gutmütigkeit könnte man vermuten, daß LDA((Y)) dieses 
heißt:
Lade den 16 Bit Wert, der auf Adresse von Y (lowteil) und Y+1 (highteil) 
in das Adressierregister und benutze die sich daraus ergebende Adresse 
als diejenige, von der der dort stehende 8 Bit Wert gelesen und in den 
Akku befördert werden soll.

Mit etwas Erfahrung im Umgang mit solchen halbgebackenen Lehrern sollte 
man jedoch vermuten, daß dieser von Klammerungen und den gefühlten 1000 
Schreibweisen in Assembler der letzten 50 Jahre nicht wirklich Ahnung 
hat - und deswegen sowas wie (beim Z80) etwa sowas meint: LD A,[HL]

Also lade den Akku mit dem Byte, auf das das 16 Bit Register(paar) HL 
zeigt.

Mit etwas Skepsis fragt man sich jedoch, ob so ein Lehrer überhaupt 
soviel Rest-Latein in den Knochen hat, daß er mit dem Wort "Index" 
überhaupt etwas Sinnvolles assoziieren kann. Eine typische indizierte 
Adressierung sieht nämlich etwa so aus:
LD dest, basis, index
was bedeutet:
- basis ist eine feste Adresse im Code oder ein Register, quasi die 
Adresse einer Feldes
- index ist ein Register zum Auswählen eines Elements in diesem Feld
- dest ist das Zielregister, wo das Geladene hinein soll
Also mal in anschaulicherer Form LD A,(BR[Y])


Ja, der Sinn des Ganzen ist vermutlichst, den Studenten die 
verschiedenen Adressierungsarten beizubringen, was im konkreten Beispiel 
jedoch mehr Verwirrung als Klärung bewirkt.

Trösten wir uns damit, daß eben nicht jeder das Talent zum Lehren 
besitzt. Schon von Heinrich Hertz wurde gesagt, daß er todunglücklich 
darüber war, daß er als Uni-Professor erhebliche Probleme damit hatte, 
den Studenten den Lehrstoff rüberzubringen - forschen konnte er prima, 
lehren jedoch nicht.

W.S.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

W.S. schrieb:
> In solchem Falle müßte der gute Mann seinen Studenten zuvörderst die
> zugrundeliegende Syntax erklären.

Da wir nur die Aufgabenstellung selbst, nicht aber das vorher 
vermittelte Wissen kennen, können wir auch nicht wissen, ob nicht genau 
das geschehen ist. Und daß sich die Syntax nicht unbedingt am 
Z80-Assembler oder einem anderen verbreiteten Assembler orientiert, ist 
für ein Lehrbuch auch vollkommen in Ordnung, da kann auch ein 
virtueller Prozessor mit ausgedachtem Befehlssatz verwendet werden.

Die Transferleistung, dann in der Realität andere Architekturen und 
andere Assembler mit jeweils individueller Syntax nutzen zu können, ist 
etwas, was  von den Studenten jeweils verlangt werden kann; genau das 
sollen sie schließlich lernen und nicht eine mehr oder weniger 
willkürlich ausgesuchte Architektur.

Das ist also sogar sinnvoll, daß weger Z80-, x86- noch 68xx-Assembler 
verwendet wurde, denn dieser würde diejenigen bevorteilen, die sich 
genau damit schon beschäftigt haben, und diejenigen benachteiligen, die 
sich mit anderen Assemblern auseinandergesetzt haben.

Sofern der Dozent die Adressierungsarten seines virtuellen Prozessors 
und die Syntax seines virtuellen Assemblers erklärt hat, ist das also 
vollkommen in Ordnung.

Nicht in Ordnung ist der Fehler für die letzte Zeile, bei der entweder 
der für Y zu verwendende Wert oder der im Hexdump an der Adresse 040E 
stehende Wert fehlerhaft ist.


Die Aufgabe stammt aus diesem Buch hier:

https://www.springer.com/de/book/9783642122910

Da es von dem Buch verschiedene Auflagen gibt, müsste man noch 
untersuchen, aus welcher die Aufgabenstellung stammt, die der 
Threadstarter veröffentlicht hat.

Diese enthält auch die "interessante" Schreibweise Akkumulartor.

Vielleicht ist das ja aus der ersten Auflage von 2002:

https://www.springer.com/de/book/9783662125007


> Dr. Helmut Bähring lehrt an der FernUniversität Hagen,
> Praktikum & Werkstatt Technische Informatik (PWTI)

Das erklärt auch den Beitrag von "neverever".

Aber auch hier ist interessant, ob der Fehler, den die Aufgabe am 
Threadbeginn enthält, in den Lehrunterlagen enthalten ist, die 
"neverever" vorgesetzt bekommen hat, oder ob das alles zwischenzeitlich 
korrigiert wurde.

von Einer K. (Gast)


Lesenswert?

W.S. schrieb:
> Trösten wir uns damit, daß eben nicht jeder das Talent zum Lehren
> besitzt. Schon von Heinrich Hertz wurde gesagt, daß er todunglücklich
> darüber war, daß er als Uni-Professor erhebliche Probleme damit hatte,
> den Studenten den Lehrstoff rüberzubringen - forschen konnte er prima,
> lehren jedoch nicht.

Mal abgesehen vom Talent, hat es noch mit dem jeweiligen Kompetenzlevel 
der Partner zu tun
Siehe: https://de.wikipedia.org/wiki/Kompetenzstufenentwicklung

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.