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.

  1. JUMP i
    Aktive Treiber: ALUDId, PCLd, IRd
    Alleinstellung: PCLd

  2. ADD ACC i
    Aktive Treiber: ALUDId, ACCLd, DRd, IAd, ASMd
    Alleinstellung: DRd

  3. STORE i
    Aktive Treiber: ACCDd, IAd, ASMd
    Alleinstellung: ACCDd

  4. LOADIN1 IN2 i
    Aktive Treiber: IN1Ld, IRd, ALUAd, DDId, IN2Ld, ASMd
    Alleinstellung: IN1Ld, ALUAd, IN2Ld

  5. LOADI ACC i
    Aktive Treiber: 0Ld, IRd, ALUDId, ACCLd
    Alleinstellung: 0Ld

  6. 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 auf 1), der untere ein NMOS (leitet bei Gate = 1, zieht auf 0).

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 in geeigneter Weise auf den ITE-Operator zurückzuführen:

Boolescher Ausdruck Name ITE
0 0 0 0 0 Null (FALSE) ITE(1, 0, 0)
0 0 0 1 AND ITE(, , 0)
0 0 1 0 ITE(, , 0)
0 0 1 1 (Projektion) ITE(, 1, 0)
0 1 0 0 ITE(, 0, )
0 1 0 1 (Projektion) ITE(, 1, 0)
0 1 1 0 XOR ITE(, , )
0 1 1 1 OR ITE(, 1, )
1 0 0 0 NOR ITE(, 0, )
1 0 0 1 XNOR ITE(, , )
1 0 1 0 NOT ITE(, 0, 1)
1 0 1 1 ITE(, 1, )
1 1 0 0 NOT ITE(, 0, 1)
1 1 0 1 () ITE(, , 1)
1 1 1 0 NAND ITE(, , 1)
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 und 8 Zyklen pro Befehl, kostet jeder Befehl :

  • :
  • :
  • :