Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
Rechnertechnik
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Peter Gerwinski
Rechnertechnik
Commits
f9ad6943
Commit
f9ad6943
authored
Jun 18, 2024
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Musterlösung Probeklausur
parent
e20e48b6
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
20240618/rtech-20240618.txt
+213
-0
213 additions, 0 deletions
20240618/rtech-20240618.txt
with
213 additions
and
0 deletions
20240618/rtech-20240618.txt
0 → 100644
+
213
−
0
View file @
f9ad6943
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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment