Assembler
- Erklären Sie, was jeder einzelne der folgenden Befehle tut und was passieren würde, wenn man die Zeile
POP A
(befehl6) löschen würde.
befehl1: MOV A, [42] befehl2: MOV A, 42 befehl3: CALL blabla befehl4: JMP befehl1 blabla: PUSH A befehl5: INC A befehl6: POP A befehl7: RET
- Folgende Information ist gegeben:
Die Ausgabe auf die drei 7-Segment Anzeigen erfolgt auf die Adressen 253 bis 255.
Die Bits auf der Anzeige sind wie folgt nummeriert:
+--0--+ 5 1 :--6--: 4 2 +--3--+
- Schreiben Sie eine Zeile Code, die die Ziffer 4 auf die erste der drei 7-Segment Anzeigen erscheinen lässt.
- Erklären Sie, was folgendes Programm tut (0xe8 ist die Startadresse der Textausgabe). Insbesondere, was ist der Zweck der letzten Zeile
DB 0
?
start: MOV A, 0xe8 MOV B, hello loop: MOV C, [B] CMP C,0 JZ ende ; JUMP if Zero MOV [A], C INC A INC B JMP loop ende: HLT hello: DB "Hallo" DB 0
- Erklären Sie Sinn und Zweck der folgenden Registern:
- IP (Instruction Pointer), wird oft auf PC (Programm Counter) genannt.
- SP (Stack Pointer)
- allgemeine Verwendung
- speziell im Zusammenhang mit den Instruktionen
CALL
undRET
- Bei jeder Berechnung werden die Flags Z (Zero) und C (Carry) gesetzt oder gelöscht, je nach Resultat der Berechnung.
- Welche «Befehlsfamilie» nutzt diese Flags und welchem Programmierbefehl entspricht das am ehesten in Python?
- Was genau macht der Befehl
CMP
mit den beiden Operanden?
Unicode
- Was ist Unicode?
- Was sind die konzeptuellen Unterschiede zwischen Unicode und UTF-8?
- Was ist der Vorteil von der Verwendung von Start- und Folgebytes?
SQL
Highscores
Gegeben ist eine sqlite-Datenbank mit folgenden Schema:
.schema CREATE TABLE USER (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL); CREATE TABLE score (id INTEGER PRIMARY KEY AUTOINCREMENT, userid INT NOT NULL, zeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, score INT, FOREIGN KEY(userid) REFERENCES USER(id));
Die Tabellen sind mit folgendem Inhalt gefüllt:
sqlite> select * from user; id name -- ---------- 1 vreni 2 hans 3 ueli 4 margarethe sqlite> select * from score; id userid zeit score -- ------ ------------------- ----- 1 1 2024-04-30 05:41:37 120 2 3 2024-04-30 05:41:47 104 3 4 2024-04-30 05:41:53 84 4 2 2024-04-30 05:42:00 120 5 4 2024-04-30 05:42:39 144 6 2 2024-04-30 05:42:50 110
- Was liefert folgende Abfrage? Kommentieren Sie die einzelnen Teil der Abfrage.
SELECT score.score,USER.name FROM score,USER WHERE score.userid=USER.id ORDER BY score.score DESC, score.zeit ASC LIMIT 3;
- Geben Sie eine Anfrage an, die alle Scores mit Zeitstempel von
margarethe
in absteigender Reihenfolge ausgibt.
Freifächer
Folgendes Schema ist definiert:
CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL); CREATE TABLE freifach (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL); CREATE TABLE wahl (id INTEGER PRIMARY KEY AUTOINCREMENT, freifachid INTEGER NOT NULL, studentid INTEGER NOT NULL, FOREIGN KEY(freifachid) REFERENCES freifach(id), FOREIGN KEY(studentid) REFERENCES student(id));
Folgende Daten sind eingetragen:
sqlite> select * from student; id name -- ---------- 1 vreni 2 hans 3 ueli 4 margarethe sqlite> select * from freifach; id name -- ---------- 1 python 2 javascript 3 sql sqlite> select * from wahl; id freifachid studentid -- ---------- --------- 1 1 1 2 1 3 3 2 3 4 1 4 5 2 4 6 3 4
- Erklären Sie folgende Anfrage und deren Ausgabe:
sqlite> select freifach.name, count(freifachid) from wahl,freifach where freifach.id=wahl.freifachid group by freifachid; name count(freifachid) ---------- ----------------- python 3 javascript 2 sql 1
- Schreiben Sie eine Abfrage, die die Namen aller Freifächer auflistet, die von
ueli
gewählt wurden. - Erklären Sie, warum eine dritte Tabelle
wahl
nötig ist, insbesondere warum diese Information nicht sinnvoll in den Tabellenstudent
undfreifach
gespeichert werden kann.