"Spitzenklausur"
Moderator: Moderatoren
"Spitzenklausur"
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..
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..
Re: "Spitzenklausur"
Habs grad mal im durchgeschaut, du müsstest wohl recht haben. Vielleicht fängt der Assembler ja bei 1 an zu zählen Ich würde es jedenfalls mal im AVR-Studio testen.
-
- Beiträge: 1
- Registriert: So 8. Jun 2008, 13:48
Re: "Spitzenklausur"
Ich hab auch ne Frage zur Spitzenklausur.
Bei der Assembler-Stack Aufgabe 3.1:
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.
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
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.
Re: "Spitzenklausur"
@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
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
Re: "Spitzenklausur"
Weil die Quersumme aus 257 eine 14 ergibt, denn r30 und r31 sind jeweils 1 => Z = 0b0000000100000001 = 257.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?!
Deswegen springt der programm counter bei "ret" auf die stelle 14.
Мои пять копеек
Re: "Spitzenklausur"
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
LD r30, Z in Zeile 8?
Welches Register oder welche Adresse wird da wo reingeladen?? Was ist Z?
Danke schonmal
Re: "Spitzenklausur"
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
Мои пять копеек
Re: "Spitzenklausur"
ich kapier jetzt immer noch nich wieso das dann 257 sind, und warum nimmt der davon die quersumme ?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
wäre nett wenn du das nochmal gaaanz langsam schritt für schritt erklären könntest
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.
Re: "Spitzenklausur"
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?
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?
Re: "Spitzenklausur"
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
Мои пять копеек