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