"Spitzenklausur"

Moderator: Moderatoren

Jochen
Beiträge: 218
Registriert: Di 10. Jun 2008, 12:06

"Spitzenklausur"

Beitrag von Jochen » So 20. Jul 2008, 10:34

Tach,

mal wieder was von mir.

in der letzten Aufgabe sollen 75 und 38 (binär) logisch AND verknüpft werden.

mMn sollte das wohl 1 sein, die freunde von der Musterlösung bekommen aber 2 raus. wo liegt der Fehler

75 -> 1001011
38 -> 0100110

da ist bei mir nur eine eins doppelt..

K-Bal
Beiträge: 147
Registriert: Di 24. Jun 2008, 18:46

Re: "Spitzenklausur"

Beitrag von K-Bal » So 20. Jul 2008, 10:59

Habs grad mal im durchgeschaut, du müsstest wohl recht haben. Vielleicht fängt der Assembler ja bei 1 an zu zählen :lol: Ich würde es jedenfalls mal im AVR-Studio testen.

mkloeckner
Beiträge: 1
Registriert: So 8. Jun 2008, 13:48

Re: "Spitzenklausur"

Beitrag von mkloeckner » So 20. Jul 2008, 15:01

Ich hab auch ne Frage zur Spitzenklausur.

Bei der Assembler-Stack Aufgabe 3.1:

Code: Alles auswählen

.include "m8def.inc"
0:   LDI r16, LOW(RAMEND)
1:   OUT SPL, r16
2:   LDI r16, HIGH(RAMEND)
3:   OUT SPH, r16
4:   LDI r31, 1
5:   LDI r30, 1
6:   LDI r16, 0
7:   PUSH r30
8:   LD r30,Z
9:   PUSH r30
10:  PUSH r16
11:  RET
12:  ADD r31,r30
13:  PUSH r31
14:  POP r31
15:  NOP ;Programmende
Dort soll man den Stack bei jedem Schritt aufschreiben.
Die Musterlösung schreibt ab Zeile 9 steht eine "14" an oberster Stelle. Z = 14? Wieso das?!
Und: Meiner Meinung nach (habs auch im AVR Studio überprüft) werden Zeilen 12-15 nie erreicht. Das RET in Zeile 11 bewirkt ne Endlosschleife. Wieso wird laut Lösung 13 & 14 erreicht (angeblich steht dann nichts im Stack)?!

Bin für Erklärungen sehr dankbar. :lol:

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: "Spitzenklausur"

Beitrag von Chris087 » So 20. Jul 2008, 16:11

@Jochen
Damit ist wohl nicht die Anzahl der Einsen gemeint, sondern:
Das Ergebnis wäre ja:
0000010
was der Binärcode für eine "2" ist.
Hoffe dir is damit geholfen :)

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: "Spitzenklausur"

Beitrag von testuser » So 20. Jul 2008, 16:26

mkloeckner hat geschrieben:Ich hab auch ne Frage zur Spitzenklausur.

Dort soll man den Stack bei jedem Schritt aufschreiben.
Die Musterlösung schreibt ab Zeile 9 steht eine "14" an oberster Stelle. Z = 14? Wieso das?!
Weil die Quersumme aus 257 eine 14 ergibt, denn r30 und r31 sind jeweils 1 => Z = 0b0000000100000001 = 257.
Deswegen springt der programm counter bei "ret" auf die stelle 14.
Мои пять копеек

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: "Spitzenklausur"

Beitrag von Chris087 » Mo 21. Jul 2008, 16:58

Was passiert denn genau beim Befehl:

LD r30, Z in Zeile 8?

Welches Register oder welche Adresse wird da wo reingeladen?? Was ist Z?
Danke schonmal

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: "Spitzenklausur"

Beitrag von testuser » Mo 21. Jul 2008, 18:09

LD r30, Z : In register r30 wird der inhalt des Speichers an der Stelle Z reingeladen. Z ist die verknüpfung von r30 und r31 mit r30 = ZH und r31 = ZL
Мои пять копеек

Benutzeravatar
ZeTa
Beiträge: 203
Registriert: Di 11. Mär 2008, 15:48
Wohnort: Aachen / Werl
Kontaktdaten:

Re: "Spitzenklausur"

Beitrag von ZeTa » Di 22. Jul 2008, 10:09

testuser hat geschrieben:LD r30, Z : In register r30 wird der inhalt des Speichers an der Stelle Z reingeladen. Z ist die verknüpfung von r30 und r31 mit r30 = ZH und r31 = ZL
ich kapier jetzt immer noch nich wieso das dann 257 sind, und warum nimmt der davon die quersumme ?

wäre nett wenn du das nochmal gaaanz langsam schritt für schritt erklären könntest :D

und was genau macht der befehl RET, irgendwie is danach ja im stack nur noch ne 1... :?:

Dann noch bei Aufgabe 3.2:
wie funktioniert der befehl STS 0x0100, R17 ?
Dieser Beitrag wurde 587 mal editiert, zum letzten Mal von ZeTa: Heute, 24:01.

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: "Spitzenklausur"

Beitrag von Chris087 » Di 22. Jul 2008, 12:32

Z ist die Verknüpfung von R30 und R31. Das heisst, Z besteht aus 2 Byte und nicht aus einem. R30 stellt dabei das niedrige und R31 das hohe Byte.
Wenn R30 und R31 jeweils 1 sind, ist Z also:
0000 0001 0000 0001
Das ist 257. Die Quersumme wird genommen weils in der Aufgabenstellung so steht ;)
(steht im Skript Seite 144f)
Was ich aber auch nicht verstehe ist, warum der Befehl RET gleich 2 Zahlen vom Stack runternimmt?
Warum nimmt er nicht nur die 0 runter und springt an Stelle 0?

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: "Spitzenklausur"

Beitrag von testuser » Di 22. Jul 2008, 13:01

weil falls ret nur eine Zahl nehmen würde, wäre die Anzahl der Zeilen im Programm auf 256 beschränkt, und das ist zu wenig
Мои пять копеек

Antworten

Zurück zu „Info II“