TI2/Rechnerarchitektur-Tutorium, 17.11.2016

Inhaltliches

Darstellung negativer Zahlen

  • Betrag und Vorzeichen (MSB)
  • Einerkomplement
  • Zweierkomplement
  • Offset-Dual- / Exzess-Darstellung

Gleitkommazahlen

  • Allgemein: Wert = ( − 1)Vorzeichen ⋅ Mantisse ⋅ 2Exponent
  • Begriffe: maxreal, minreal, smallreal
  • Normalisierung
  • Darstellbare Zahlen
  • Mathematische Gesetze gelten (im Allgemeinen) nicht

Assembler-Programmierung

Debugging

  • Programme können mittels GNU Debugger (gdb) untersucht werden
  • Sei prog euer Programm, so ruft ihr gdb prog auf
  • In der folgenden Ansicht könnt ihr das Programm mittels run starten
    • Komamndozeilenparameter können auch übergeben werden
    • run 15 ruft im Endeffekt ./prog 15 auf

Disassemblieren

  • GDB kann uns den Assemblercode von einzelnen Funktionen ausspucken
  • Dazu schreiben wir disassemble <function> – statt <function> kommt die zu disassemblierende Funktion
  • Der ausgespuckte Assemblercode sieht anders aus als wir es kennen, es ist AT&T-Syntax
  • Für die von uns verwendete Intel-Syntax schreiben wir set disassembly-flavor intel
  • Um das nicht jedes Mal machen zu müssen, öffnen wir die Datei ~/.gdbinit (oder legen sie neu an) und schreiben dort die obere Zeile rein

Breakpoints

  • Wir wollen das Programm an bestimmten stellen anhalten, um es genauer untersuchen zu können
  • break <label> weist den Debugger an, das Programm zu unterbrechen, wenn er an der Stelle angelangt ist
  • Starten wir danach das Programm mittels run stoppt die Ausführung und wir können weitere Befehle angeben

Register anschauen, durch den Code laufen

  • Mittels info registers können wir uns die aktuellen Werte in den Registern anschauen
  • Mittels stepi können wir dann den nächsten Maschinenbefehl ausführen lassen
  • Mittels continue können wir auch das Programm bis zum Ende laufen lassen
  • Hier findet ihr weitere Befehle

Debugging einfacher machen

  • Mittels layout asm gefolgt von layout regs zeigt GDB euch
    • die Eingabekonsole in der ihr Befehle eingeben könnt
    • eine Übersicht über die aktuellen Registerwerte
    • den Assemblercode der gerade ausgeführten Funktion mit Markierungen

Beim Kompilieren Debug-Symbole hinzufügen

  • Normalerweise entfernt der Assembler/Compiler Namen, die nicht benötigt werden, z.B.
    • Namen von Sprungmarken, die nicht als global markiert werden
  • Gebt ihr beim Assemblieren/Kompilieren zusätzlich den Flag -g an, so bleiben die Informationen erhalten
    • nasm -g -f elf64 func.asm
    • gcc -g -o ausgabe datei.c func.o