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

Musterlösung Probeklausur

parent e20e48b6
No related branches found
No related tags found
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