TI2/Rechnerarchitektur-Tutorium, 05./06.05.2015

Organisatorisches

Zu den Übungszetteln

  • Keine Einzelabgaben
  • Auf den Zettel: Euer Name, Mein Name, Tag des Tutoriums
  • Übungsblatt ist kein Chat: Groß-/Kleinschreibung, Rechtschreibung
  • Quellenangaben

Nachbesprechung 1. Übungszettel

Vorbesprechung 3. Übungszettel

Assembler

Weitere bedingte Sprünge

  • Bisher kennen wir: je, jne, jz, jnz
  • Wollen Vergleiche wie a > b haben
  • Unterscheidung zwischen Zahlen mit Vorzeichen und ohne Vorzeichen
  • Mit Vorzeichen:
    • jg (if greater),
    • jge (greater or equal)
    • jl (less)
    • jle (less or equal)
  • Ohne Vorzeichen:
    • ja (if above)
    • jae (above or equal)
    • jb (below)
    • jbe (below or equal)

Inhaltliches

Speicher

  • Bisher: Wir arbeiten auf Registern
  • Was ist, wenn Anzahl an Registern nicht ausreicht?
  • (Zusätzliche) Nutzung des Hauptspeichers
  • Wichtiger Speicherbereich: Stack

Stack

Example layout of a call stack showing stack frames and frame pointer, 2007, R. S. Shaw, Public Domain
Example layout of a call stack showing stack frames and frame pointer, 2007, R. S. Shaw, Public Domain

Benutzung des Stacks

  • push op1
    • packt op1 (Register, oder Zahl) oben auf den Stack
  • pop op1
    • nimmt das oberste Element vom Stack und packt es in op1
  • diese beiden Register nicht überschreiben: rsp und rbp
    • sind für die Funktionalität des Stacks wichtig

Stack (cont’d)

  • Wie funktionieren Funktionsaufrufe technisch?
  • Rücksprungadressen
  • Lokale Adressen

Speicherzugriff

  • Eckige Klammern
  • [ Basisregister + Indexregister * Skalierung + Offset ]
    • Basisregister und Indexregister (optional) sind Register
    • Skalierung und Offset sind Konstanten (beide optional)
    • Skalierung ist ein Wert aus 1,2,4,8
  • Für Adressierung werden speziell RBX und RBP als Basis- und RDI und RSI als Indexregister benutzt.