Skip to content
Snippets Groups Projects
Commit f9ad6943 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Musterlösung Probeklausur

parent e20e48b6
Branches
Tags
No related merge requests found
Probeklausur
============
Aufgabe 1
~~~~~~~~~
a)
LEDs
Zeitpunkt x2 x1 x0 y1 y2 y3 y4 y5
0 0 0 0 1 0 0 0 0
1 0 0 1 0 1 0 0 0
2 0 1 0 0 0 1 0 0
3 0 1 1 0 0 0 1 0
4 1 0 0 0 0 0 0 1
5 1 0 1 0 0 0 1 0
6 1 1 0 0 0 1 0 0
7 1 1 1 0 1 0 0 0
Aufgabe 2
~~~~~~~~~
Warteschleife:
- 1 MHz Taktfrequenz --> 1/4 s entspricht 250000 Taktzyklen.
- z.B.: Zählen mit 3 Registern, 5 Taktzyklen pro Durchlauf
loop: ad r0, #1
ac r1, #0
ac r2, #0
jz cont
jp loop
cont:
--> 250000 / 5 = 50000 Schleifendurchläufe --> 2 Register würden genügen (bis 65535)
- z.B.: Zählen mit 2 Registern, 4 Taktzyklen pro Durchlauf
loop: ad r0, #1
ac r1, #0
jz cont
jp loop
cont:
--> 250000 / 4 = 62500 Schleifendurchläufe --> 2 Register genügen immer noch (bis 65535)
- Wenn ich in dieser Weise addiere: Register vorher initialisieren
auf -62500 bei 2 Registern bzw. -50000 bei 3 Registern --> Zweierkomplement
62500 = 0xf424
- Alternative: Subtrahieren
ld r0, #0x24
ld r1, #0xf4
loop: ad r0, #-1 ; dasselbe wie: #255
ac r1, #0
jz cont
jp loop
cont:
- Warteschleife als Unterprogramm:
wait: ld r0, #0x24
ld r1, #0xf4
loop: ad r0, #-1 ; dasselbe wie: #255
ac r1, #0
jz cont
jp loop
cont: rt
- Dann im Hauptprogramm: js wait ("jump to subroutine")
- Angeschlossene LEDs: Bit 1 bis 5
- Bit 0: 0x01
- Bit 1: 0x02 LED 1
- Bit 2: 0x04 LED 2
- Bit 3: 0x08 LED 3
- Bit 4: 0x10 LED 4
- Bit 5: 0x20 LED 5
- Bit 6: 0x40
- Bit 7: 0x80
main: ld r0, #0x02 ; LED 1
op r0
js wait
ld r0, #0x04 ; LED 2
op r0
js wait
ld r0, #0x08 ; LED 3
op r0
js wait
ld r0, #0x10 ; LED 4
op r0
js wait
ld r0, #0x20 ; LED 5
op r0
js wait
ld r0, #0x10 ; LED 4
op r0
js wait
ld r0, #0x08 ; LED 3
op r0
js wait
ld r0, #0x04 ; LED 2
op r0
js wait
jp main
- Alternative: Nutzung von Schiebe-Befehlen
dann: Schleife möglich
main: ld r0, #0x02
loop: ld r2, #4 ; Lauflicht: 4 LEDs nacheinander
left: op r0
sh r0, #1
ad r2, #-1
jn left
ld r2, #4
right: sh r0, #-1
op r0
ad r2, #-1
jn right
jp loop ; OHNE GEWÄHR
Problem: Hier fehlen die Warteschleifen.
Wenn ich an den richtigen Stellen "js wait" ergänze,
zerstört das Unterprogramm den Wert des Registers r0.
Notlösung: doch wieder "brute force":
main: ld r0, #0x02 ; LED 1
op r0
js wait
sh r0, #1 ; LED 2
op r0
js wait
sh r0, #1 ; LED 3
op r0
js wait
sh r0, #1 ; LED 4
op r0
js wait
sh r0, #1 ; LED 5
op r0
js wait
sh r0, #-1 ; LED 4
op r0
js wait
sh r0, #-1 ; LED 3
op r0
js wait
sh r0, #-1 ; LED 2
op r0
js wait
jp main
Aufgabe 3
~~~~~~~~~
a) main: ld r0, #63
ld r1, #11
ng r1
ad r0, r1
ad r0, r1
ad r0, r1
ad r0, r1
ad r0, r1
ad r0, r1
b) - Zweierkomplement von 11 bilden (hier wichtig: 8-Bit-Rechenwerk)
- sechsmal schriftlich 11 von 63 subtrahieren
Aufgabe 4
~~~~~~~~~
a) Wie "mice", aber mit "jmp" statt "spl":
Anstatt sich zu vermehren, springt die "Maus" durch den Speicher.
b) Ersetze
sub #1, dest
mov @ptr, @dest
durch
mov @ptr, <dest
Ersetze
cmp #0, ptr
jmp loop
jmp @dest
durch
jmz loop, ptr
jmp @dest
Ersetze
mov #8, ptr
[...]
sub #1, dest
mov @ptr, @dest
sub #1, ptr
[...]
jmp @dest
durch
mov #9, ptr
[...]
mov <ptr, <dest
[...]
add #1, ptr
jmp @dest
Ersetze
sub #1, ptr
cmp #0, ptr
jmp loop
jmp @dest
durch
djn loop, ptr
jmp @dest
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment