Programmieren in Assembler

Slides:



Advertisements
Ähnliche Präsentationen
Kurzwiederholung Informatik I, Teil I: Grundkonzepte
Advertisements

Vom HW-Automaten zum Prozessor
ALP II: Objektorientierte Programmierung Sommersemester 2006
CPI Der einzelne Befehl braucht immer noch 5 Zyklen (stimmt nicht ganz, einige brauchen weniger!) Was verbessert wird, ist der Durchsatz = #Befehle /
Befehlssatz und Struktur
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
Der Crusoe-Prozessor von Transmeta
2.5 Vektorrechner & Multimedia-Erweiterungen
Java: Grundlagen der Sprache
Kapitel 3 5 Rechnerorganisation
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
FOR Anweisung.
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
Rechneraufbau & Rechnerstrukturen, Folie 10.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 10.
Rechnerstrukturen, Teil 2
WIRTSCHAFTSINFORMATIK Westfälische Wilhelms-Universität Münster WIRTSCHAFTS INFORMATIK TotalView Debugger Vorgestellt von Marco Dyballa mail:
ilmenau.de Exploiting Pocket PC. ilmenau.de Exploiting Pocket PC PocketPC existiert seit über 5 Jahren (Windows CE seit ca. 10)
Medizinische Statistik und Informationsverarbeitung Goldschmidt, Quade, Baur Institut für Medizinische Statistik, Dokumentation und Datenverarbeitung.
Vorl. 6: Single- und Multitasking Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 5: Interrupts Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin Wintersemester.
Vorlesung 5 Interrupts Peter B. Ladkin
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Einführung.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester.
2 Grundlegende Prozessortechniken
Seite 1 Prof. J. WALTER Kurstitel Stand: Januar 2000 mc Mikrocomputertechnik Herzlich Willkommen Prof. Jürgen Walter.
Open Source Prozessor Leon2 Peer Royla und Marco Siebert RST-Labor WS 04/05 Prof. Dr.-Ing. Thomas Risse.
EPIC, IA-64 und Itanium Eine Kurzpräsentation von Jan Hübbers bei Prof. Dr.-Ing. Risse im Fach Labor Rechnerstrukturen an der Hochschule Bremen
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Prof. Dr. Christian Scheideler TU München
Struktogramme IF-ELSE FOR – Schleife
Wichtige Fachausdrücke in C
Grafische Oberflächen
Informatik Grundlagen, WS04, Seminar 11
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Vom Von-Neumann-Prinzip zu heutigen Rechnerarchitekturen Marcel Waldvogel.
Aufbau eines von-Neumann- Rechners Marcel Waldvogel.
Dateisysteme Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2 Dateisysteme Was ist eine Datei?
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter Indirekte Adressierung- Quickie Beschreibung.
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter Speicher-Quickie Beschreibung.
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter EVA-WIE-Quickie Eingabe – Verarbeitung - Ausgabe.
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
Computerorientierte Physik VORLESUNG und Übungen Vorlesung Zeit: Mo., – Uhr Ort: Hörsaal 5.01, Institut für Physik, Universitätsplatz 5, A-8010.
Computerorientierte Physik VORLESUNG
CPU-Register EINLEITUNG UND INHALT eines Pentium Prozessors
Anwendung von Microcontollern
Verteilte Systeme Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2 Verteilte Systeme Entwicklung.
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Rechnersysteme: Halbzeit Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2 Daten und Information.
Schaltnetze und Schaltwerke Marcel Waldvogel
Systemsoftware und Betriebssysteme
Interprozess- kommunikation (IPC)
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Rechnerarchitekturen
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 2
Rechnersysteme Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2  Wer bin ich?  Die Vorlesung.
Mikrocomputertechnik Jürgen Walter
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter „EVA-WAS-Quickie“ Eingabe – Verarbeitung - Ausgabe.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
6. Übung Informatik 1 Inhalte: Der DLX-Prozessor
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Praktische Informatik 1
Aufbau und Funktionsweise einer CPU
Interrupts Wozu Interrupts? Interruptmodell Einige Attiny-Interrupts
Durchschnitt (verbal)
Vom HW-Automaten zum Prozessor
CSL211 Computer Architecture
 Präsentation transkript:

Programmieren in Assembler http://www.erg.abdn.ac.uk/users/gorry/eg2069/dispatch.html http://whatis.techtarget.com/definition/0,,sid9_gci214025,00.html Marcel Waldvogel

Hierarchie Konzeptionelle Ebene Hochsprachenebene Implementation Hochsprachenebene Compiler Assemblersprachenebene Assembler Betriebssystemebene Partielle Interpretation Maschinenebene Interpretation Mikroprogrammebene Direkte Ausführung Hardwareebene

Assembler vs. Assembler C vs. C? Pascal vs. Pascal? Nein. Konzeptionelle Ideen übertragbar Assemblerprogramm lesen oder schreiben: Handbuch kaufen/herunterladen Prozessor und Hilfschips Einsatz von Assembler Betriebssysteme Leistungssteigerung Compilerbau (inklusive JIT etc.) Analysieren von Programmen ohne Quelltext

Beispielprozessor: MIPS "Typischer" RISC-Vertreter Kleinster gemeinsamer Nenner Keine Details, leichte Vereinfachungen 32 Integerregister (r0 . . . r31) r0=0 32 Fliesskommaregister Flags Zero Negative Carry oVerflow Stapelspeicher

Befehlssatz Standardbefehle (ADD, SUB, ...): Register ADD r3, r1, r2 # r3 := r1+r2 SUB r3, r1, r2 # r3 := r1–r2 Standardbefehle: Register-Immediate ADDI r3, r1, #5 # r3 := r1+5 Wertebereich: 16 Bit Lade-/Speicherbefehle LD r3, (r1) # r3 := Mem[r1] ST r3, 8(r1) # Mem[r1+8] := r3 Laden von Konstanten LDA 5000(r2), r3 # r3 := 5000+r2 LDA 5000(r0), r3 # r3 := 5000

Test und Sprung Vergleiche Bedingte Sprünge Unbedingte Sprünge SUB r0, r1, r2 # Vergleiche r1 und r2 ADD r0, r1, r0 # Vergleiche r1 mit 0 Bedingte Sprünge BEQ marke # Springe zu "marke", wenn = BNE, BGT, BLT, BGE, BLE, ... Unbedingte Sprünge J ziel JAL unterprogramm RET # Rückkehr Unterprogramm

Beispiel: Bits Zählen Aufgabenstellung Ansatz Wieviele Bits eines Registers haben Wert 1? Eingabe: r1, Ausgabe: r2 Ansatz Höherer Programmiersprache, keine Tricks Umsetzen nach Assembler Testen Optimieren

Von C nach Assembler int bitcount(int bits) { int i; int count = 0; for (i = 0; i < 32; i++) { if (bits[i] == 1) { count += 1; } return count; int bitcount(int bits) { int i = 0; int count = 0; do { int bit_i = (bits & (1 << i); if (bit_i != 0) { count += 1; } i += 1; } while (i < 32); return count;

Von C nach Assembler (2) int bitcount(int bits) { int i = 0; int count = 0; do { int bit_i = (bits & (1 << i); if (bit_i != 0) { count += 1; } i += 1; } while (i < 32); return count; bitcount: ADD r2, r0, r0 ADD r3, r0, r0 loop: ADD I r4, r0, #1 SHLL r4, r4, r2 AND r4, r4, r1 BEQZ noadd ADDI r2, r0, #1 noadd: SUBI r0, r2, #32 BNEZ loop RET

MIPS vs. Intel bitcount: ADD r2, r0, r0 ADD r3, r0, r0 loop: ADD I r4, r0, #1 SHLL r4, r4, r2 AND r4, r4, r1 BEQZ noadd ADDI r2, r0, #1 noadd: SUBI r0, r2, #32 BNEZ loop RET bitcount: # EAX->EBX XOR EBX, EBX XOR CL, CL loop: MOV EDX, #1 SHL EDX, CL AND EDX, EAX BEQ noadd INC EBX noadd: INC CL CMP CL, #32 BNE loop RET

Weitere Beispiele Addition zweier Variablen Vektoraddition 3n+1 Adressen konstant Adressen in Registern Anwendung: Multiplikation Vektoraddition Rückwärts 3n+1 Zählen Unterprogramm

Programmiertipps Nachschlagetabellen Dekrementieren bei Schleifenzählern Spart Test und oft ein Register Bitfieseleien oft schneller als Sprünge Sprünge teuer (oft 10-20 Instruktionen) Conditional Moves (alle modernen CPUs) bzw. Conditional Opcodes (ARM) Bits zählen: ADD with Carry Wert mit sich selbst überschreiben (fast) gratis Befehl ausführen und Nebeneffekt kompensieren: 3n+1 = 6(n >> 1)+4, wenn n ungerade Datenstrukturen linearisieren: Matrixaddition Werte frühzeitig bestimmen Instruktionsumordnung des Prozessors

Architekturtipps Registerfenster (SPARC) Je 8 Register Input, Local, Output und Global Mehrere Bedingungsvariablen (ARM) Flags in jedem Register möglich (Alpha) Verzögerungen Branch Delay Slot (SPARC) Load/Store Delay (MIPS)

Besonderheiten Usermodus Systemmodus Segmente und -präfixe (x86) Wiederhol-/Stringbefehle (x86, m68k) Prefetch, Cache Management Systemmodus Unzählige spezifische Kontrollregister (Data) Breakpoint, Zähler Memory Management/Virtual Memory Zugriff auf physikalische Adressen Adressen aus Sicht anderer Prozessoren/Karten

Abkürzungen B, BR = Branch; J, JMP = Jump B = Byte, danach z.B. Short und Long; (un)bedingt B = Byte, danach z.B. W = Word (16 Bits), L = Long (32 Bits), Q = Quadword (64 Bits) H = Halfword (16), W = Word (32), D = Doubleword (64) Segmentadressierung: Near, Far (x86)