TI11-1
Page 1
Technische Informatik
Sommersemester 2026
[Name], [Name]
Übungsblatt 11
03.07.2026
Aufgabe 1
assert_no_ai:
mov eax, [sheet_11]
test eax, AI_GENERATED
jz .ok
ud2
.ok:
ret
(keine Clanker benutzt)
Aufgabe 2
a) /IAdoe
- Compute Memory: SUB, ADD, OPLUS, OR, AND
- LOAD
- STORE
b) /IN1Ldoe
- LOADIN1
- STOREIN1
c) /ALUAdoe
- LOADIN1, LOADIN2
- STOREIN1, STOREIN2
Page 2
Aufgabe 3
Gesucht ist die minimale Menge von RETI-Befehlen, sodass jeder Treiber (außer PCAd) mindestens einmal genutzt wird, und die Menge irredundant ist.
-
JUMP i
Aktive Treiber: ALUDId, PCLd, IRd
Alleinstellung: PCLd -
ADD ACC i
Aktive Treiber: ALUDId, ACCLd, DRd, IAd, ASMd
Alleinstellung: DRd -
STORE i
Aktive Treiber: ACCDd, IAd, ASMd
Alleinstellung: ACCDd -
LOADIN1 IN2 i
Aktive Treiber: IN1Ld, IRd, ALUAd, DDId, IN2Ld, ASMd
Alleinstellung: IN1Ld, ALUAd, IN2Ld -
LOADI ACC i
Aktive Treiber: 0Ld, IRd, ALUDId, ACCLd
Alleinstellung: 0Ld -
MOVE ACC IN1
Aktive Treiber: ALUDId, 0Rd, IN1Ld
Alleinstellung: 0Rd
Warum ist PCAd ausgenommen?
PCAd wird nur in der Fetch-Phase verwendet und wird unabhängig vom Befehl bei N0 enabled und bei N3 disabled. In der Execute Phase ist PCAd bei keinem Befehl aktiv.
Page 3
Aufgabe 4
Der obere Transistor ist ein PMOS (leitet bei Gate = 0, zieht
Gewünschtes Verhalten:
- /OE = 1:
, also müssen beide Transistoren sperren: (unabhängig von ) - /OE = 0,
: , also PMOS leitet, NMOS sperrt: - /OE = 0,
: , also PMOS sperrt, NMOS leitet:
| /OE | |||
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 0 |
Page 4
Aufgabe 5
Es gilt alle binären Operatoren
| Boolescher Ausdruck | Name | ITE | ||||
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | Null (FALSE) | ITE(1, 0, 0) |
| 0 | 0 | 0 | 1 | AND | ITE( |
|
| 0 | 0 | 1 | 0 | ITE( |
||
| 0 | 0 | 1 | 1 | ITE( |
||
| 0 | 1 | 0 | 0 | ITE( |
||
| 0 | 1 | 0 | 1 | ITE( |
||
| 0 | 1 | 1 | 0 | XOR | ITE( |
|
| 0 | 1 | 1 | 1 | OR | ITE( |
|
| 1 | 0 | 0 | 0 | NOR | ITE( |
|
| 1 | 0 | 0 | 1 | XNOR | ITE( |
|
| 1 | 0 | 1 | 0 | NOT |
ITE( |
|
| 1 | 0 | 1 | 1 | ITE( |
||
| 1 | 1 | 0 | 0 | NOT |
ITE( |
|
| 1 | 1 | 0 | 1 | ITE( |
||
| 1 | 1 | 1 | 0 | NAND | ITE( |
|
| 1 | 1 | 1 | 1 | 1 | Eins (TRUE) | ITE(1, 1, 0) |
Page 5
Aufgabe 6
Pseudocode:
IN1 := 100
M(100) := 0 // f(0)
if n == 0: jump to end
M(101) := 1 // f(1)
count := n - 1 // Anzahl der Schleifendurchläufe (k = 2..n)
if count <= 0: jump to end // n <= 1
M(98) := count
IN1 := IN1 + 2 // IN1 = 102, zeigt auf Slot von f(2)
LOOP BEGIN:
scratch := M(IN1 - 1) // f(k-1)
ACC := M(IN1 - 2) // f(k-2)
ACC := ACC + scratch // f(k) = f(k-1) + f(k-2)
M(IN1) := ACC // f(k) speichern
IN1 := IN1 + 1 // Zeiger erhöhen
count := count - 1
M(98) := count
if count > 0: jump to loop begin
END
Page 6
RETI-Programm:
PC Befehl Kommentar
0 LOADI IN1 100 ; IN1 := 100 (Zeiger auf M(100))
1 LOADI ACC 0 ; ACC := 0
2 STOREIN1 0 ; M(100) := 0 = f(0)
3 LOAD ACC 99 ; ACC := n
4 JUMP= 18 ; falls n = 0: -> ENDE
5 LOADI ACC 1 ; ACC := 1
6 STOREIN1 1 ; M(101) := 1 = f(1)
7 LOAD ACC 99 ; ACC := n
8 SUBI ACC 1 ; ACC := n - 1 = Anzahl Durchläufe cnt
9 JUMP<= 13 ; falls n-1 <= 0 (n<=1): -> ENDE
10 STORE 98 ; M(98) := cnt
11 ADDI IN1 2 ; IN1 := 102 (Slot von f(2))
; ---------- LOOP ----------
12 LOADIN1 ACC -1 ; ACC := M(IN1-1) = f(k-1)
13 STORE 97 ; M(97) := f(k-1) (Zwischenspeicher)
14 LOADIN1 ACC -2 ; ACC := M(IN1-2) = f(k-2)
15 ADD ACC 97 ; ACC := f(k-2) + f(k-1) = f(k)
16 STOREIN1 0 ; M(IN1) := f(k) = M(100+k)
17 ADDI IN1 1 ; IN1 := IN1 + 1 (Zeiger nachziehen)
18 LOAD ACC 98 ; ACC := cnt
19 SUBI ACC 1 ; cnt := cnt - 1
20 STORE 98 ; M(98) := cnt
21 JUMP> -9 ; falls cnt > 0: -> LOOP (PC 12)
; ---------- ENDE ----------
22 JUMP 0 ; Programmende
b) Die exakte Anzahl ausgeführter Befehle beträgt:
| Fall | ausgeführte Befehle |
|---|---|
| 6 | |
| 11 | |
Mit Zykluszeit
: : :