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
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Peter Gerwinski
Rechnertechnik
Commits
cf83610f
Commit
cf83610f
authored
4 months ago
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Klausur-Fragestunde 30.1.2025
parent
5829b81f
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
20250130/rtech-20250130.txt
+169
-0
169 additions, 0 deletions
20250130/rtech-20250130.txt
with
169 additions
and
0 deletions
20250130/rtech-20250130.txt
+
169
−
0
View file @
cf83610f
...
@@ -180,3 +180,172 @@ Aufgabe 1:
...
@@ -180,3 +180,172 @@ Aufgabe 1:
`-----' `-----'
`-----' `-----'
| |
| |
D E
D E
Aufgabe 3: 16-Bit-Rechenwerk
(a) 1025 - 2
Umrechnen nach Binär:
1025 = 0000 0100 0000 0001
2 = 0000 0000 0000 0010
2er-Komplement von 2:
Umklappen: 1111 1111 1111 1101
+ 1: 1111 1111 1111 1110
Addieren:
0000 0100 0000 0001
+ 1111 1111 1111 1110
1111-1-------------
1 0000 0011 1111 1111
^
paßt nicht ins 16-Bit-Rechenwerk --> fällt weg. Überlauf.
Ergebnis: 0000 0011 1111 1111 = 1023
(b) 4 · 8193
Umrechnen nach Binär:
4 = 0000 0000 0000 0100
8193 = 0010 0000 0000 0001
Variante 1: 4mal addieren
0010 0000 0000 0001
+ 0010 0000 0000 0001
-1---------------1-
0100 0000 0000 0010
+ 0010 0000 0000 0001
-------------------
0110 0000 0000 0011
+ 0010 0000 0000 0001
11--------------11-
1000 0000 0000 0100 <-- negative Zahl, weil vorzeichenbehaftetes 16-Bit-Rechenwerk,
^ oberstes Bit = 1
Problem: Das Ergebnis ist für ein vorzeichenbehaftetes 16-Bit-Rechenwerk zu groß.
--> Zweierkomplement
Umklappen: 0111 1111 1111 1011
+ 1: 0000 0000 0000 0001
----------------11-
0111 1111 1111 1100
Nach Dezimal umrechnen (mit bc):
ibase=2
0111111111111100
32764
Ergebnis: -32764
Probe: 4 * 8193 - 65536 = -32764. Stimmt.
(Auf einem vorzeichenlosen 16-Bit-Rechenwerk wäre das Ergebnis: 4 * 8193 = 32772.)
Aufgabe 4
Bj=C3=83=C2=B6rn M=C3=83=C2=BC=C3=83=C2=9Fig
Ole-R=C3=83=C2=B8mer-Stra=C3=83=C2=9Fe 42
12345 Beispielhausen
Vermutlich ist "=C3=83=C2=B6" ein "ö" (für "Björn")
und "=C3=83=C2=9F" ein "ß" (für "Straße")
Vermutung: UTF-8 ist im Spiel.
"ö" in UTF-8:
echo -n "ö" | hexdump -C
00000000 c3 b6 |..|
00000002
"ß" in UTF-8:
echo -n "ß" | hexdump -C
00000000 c3 9f |..|
00000002
Vermutung: UTF-8 wurde nochmals UTF-8-kodiert.
"ö" --> c3 b6 --> interpretieren als Latin-1 (= ISO 8859-1), nochmals nach UTF-8 kodieren
(Alternative: Latin-9 = ISO 8859-15 --> dasselbe Ergebnis)
echo -n "ö" | recode latin1..utf8 | hexdump -C
00000000 c3 83 c2 b6 |....|
00000004
echo -n "ß" | recode latin1..utf8 | hexdump -C
00000000 c3 83 c2 9f |....|
00000004
(a) UTF-8.
(b) Interpretation als Latin-1, nochmals Umwandlung nach UTF-8.
(c) "ö" und "ß" ersetzen:
Björn M=C3=83=C2=BCßig
Ole-R=C3=83=C2=B8mer-Straße 42
12345 Beispielhausen
Rate: "ü"
echo -n "ü" | recode latin1..utf8 | hexdump -C
00000000 c3 83 c2 bc |....|
00000004
Björn Müßig
Ole-R=C3=83=C2=B8mer-Straße 42
12345 Beispielhausen
Letztes Problem: Wofür steht "=C3=83=C2=B8"?
Ähnlich "ö", aber mit "B8" statt "B6".
Wahrscheinlich: ó ò ô ø ...
echo -n "ø" | recode latin1..utf8 | hexdump -C
00000000 c3 83 c2 b8 |....|
00000004
Lösung:
Björn Müßig
Ole-Rømer-Straße 42
12345 Beispielhausen
Aufgabe 5:
(a)
x0: ähnlich wie Knirps, aber mit Doppelsprüngen:
In jedem Taktzyklus kopiert das Program seinen ersten Befehl,
also das halbe Programm, um 2 Speicherzellen weiter.
x1: Dasselbe, aber einmal geteilt.
Das Programm führt den Code mit 2 Threads gleichzeitig aus.
Dadurch ist es nur noch halb so schnell,
weil jeder Thread nur die halbe Rechenzeit bekommt.
x2: Dasselbe, aber so oft geteilt, wie zulässig, hier: 64mal.
Das Programm führt den Code mit 64 Threads gleichzeitig aus.
Dadurch ist es nur noch 1/64 so schnell,
weil jeder Thread nur 1/64 der Rechenzeit bekommt.
(b) x0 überschreibt nothing; nothing wird zu x0 --> Untentschieden. Wie bei Knirps.
x1 überschreibt nothing, aber langsamer.
nothing führt den dat-Befehl hinter dem "mov 0 2" aus,
noch bevor das - langsamere - x1 auch dort einen "mov 0 2" hinschreibt.
(c) Wenn x2 von dwarf getroffen wird,
schreiben dahinterliegende Threads von x2 direkt wieder "mov 0 2"
über den von dwarf stammenden dat-Befehl. x2 repariert sich selbst.
Für x1 gilt dies im Prinzip auch,
aber die Wahrscheinlichkeit, daß es funktioniert, ist geringer,
weil x1 nur 2 Threads hat.
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