Programmiersprachen Flashcards

1
Q

Programmierebenen in aktuellen Rechnern

A

Rechner als Hierarchie von Sprachebenen, deren Sprachen

  • durch Übersetzung ineinander überführbar bzw.
  • durch Interpretierung direkt ausführbar sind

Hardware → Sprache L1 → … → Sprache Ln-1 → Sprache Ln auf Benutzerebene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Höhere Programmiersprachen

A
  • zur Formulierung von Programmen aus einem bestimmten Anwendungsbereich
  • unabhängig von Hardware der Rechenmaschinen → keine umkehrbare eindeutige Zuordnung ihrer Konstrukte zu konkreten Maschinenbefehlen notwendig
  • orientiert an einem Bedeutungsfeld (Semantik) und an einem bestimmten Problemfeld
  • Beschreibung der Sprache durch: Syntax (Aufbauregeln) und Semantik (Bedeutung der Sprachkonstrukte)
  • Übersetzung o. Interpretierung der Sprache in Maschinenprogramme notwendig
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Maschinensprache

A
  • Darstellung der Befehle in numerischer Binärcodierung
  • semantisch niedrigste Ebene der Programmierung einer CPU
  • durch CPU direkt ausführbare Befehle

2 Möglichkeiten der Ausführung:

  • interaktiv durch Mikroprogramme
  • direkt durch Hardwarezugriff
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Mikroprogrammierung

A

= Firmware

  • numerische Binärcodierung
  • Ausführung von Maschinenbefehlen durch Folge von Mikrobefehlen
  • einfachste Ablaufsteuerungen
    • Bewegung von Daten
    • Öffnen von Gattern
    • Tests (z.B. ob Transistoren funktionieren)
  • in modernen Rechnern läuft Steuerung fas ausschließlich durch Mikroprogrammeinheiten (schneller/flexibler/übersichtlicher als feste Verdrahtung)
  • Sprache, mit der Prozessoren im Chip-Design entwickelt werden
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Mikroprogrammierung

Aufgaben der Steuereinheit

A

FETCH: Holen von Befehlen → Befehle addressieren und laden

DECODE: Entschlüsseln von Befehlen → Zerlegung in Bestandteile (Operations-, Operandenteil) und Erkennen der Befelsart

EXECUTE: Initiieren der Befehlsausführung → Versorgung der an der Befehlsausführung beteiligten Funktionseinheiten mit den notwendigen Steuersignalen

→ Pipelining: wenn 1. Befehl decodiert wird, kann 2. schon geholt werden = 3x schneller → z.B. paralleles Arbeiten bei Graphikkarten

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Mikroprogrammierung

Steuerung des physischen Ablaufs innerhalb eines Rechners

A
  • duech Setzen von Steuersignalen
  • bewirken Öffnen von “Türen” in den Datenwegen
    • Durchschalten der Datenwege
    • Auslösung elementarer Operationen

z.B. Registerinhalt wird auf Bus gelegt, falls s=1 (wahr) anliegt, bei s=0 wird kein Signal an Bus weitergeleitet

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Maschinensprachen

Eigenschaften

A

Instruktionssatz/Maschinensprache: Menge aller Maschinenbefehle einer CPU - niedrigste für die Programmierung frei zugängliche Ebene

Maschinenbefehl: binäres Wort fester Länge zur Auslösung einer elementaren Operation einer CPU

Maschinenprogramm: Folge von Maschinenbefehlen, Ablage im Hauptspeicher eines Rechners

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Maschinensprachen

Aufbau von Maschinenbefehlen

A

Operationscode (OpCode): Angabe der auszuführenden Operation

Operandenadressen (OpAdr): Spezifikation der Operanden, auf die die Operation angewendet werden soll, durch Angabe von

  • Konstanten
  • Registeradressen
  • Hauptspeicheradressen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Maschinensprache

Typische Befehlsformate

A

maximale Anzahl der OpAdr eines Befehls abhängig vom betrachteten Rechner und Art des Befehls - Beispiel c = a + b

1-Adress-Maschine: spezifierter Operand wird mit Inhalt eines ausgezeichneten Registers (“Accumulator”=Zwischenspeicher” gemäß dem OpCode verknüft, Ergebnis in Akkumulator gespeichert

3 Befehle, aber schnell: laod aadd bstore c

2-Adress-Maschine: Ergebnis wird im 2. Operanden gespeichert

store a,c → add b,c

3-Adress-Maschine: spezielles Ergebnisregister add a,b,c

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Maschinensprache

Befehlsarten einer CPU

A
  • Datentransportbefehle: Kopieren von Inhalten von Registern/Hauptspeicherzellen (load,store)
  • Arithmetische und logische Befehle: arithemtische/logische Verknüpfung o. Schiebeoperation, angewendet auf Inhalte von Registern/Hauptspeicherzellen (add)
  • Ablaufsteuerungsbefehle: Unterbrechung des sequentiellen Programmablaufs durch Sprungbefehle (if, jump, Schleifen)
  • Ein-/Ausgangsbefehle: Kommunikation mit E/A-Geräten
  • Sonderbefehle: Interruptbehandlung, Anhalten/Zurücksetzen der CPU, …
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Maschinensprache

Beispiel im 1-Adress-Format

A
  • 16 Bit Befehlslänge
    • Operationscode: 4 Bit → 24 Befehle
    • Operandenadresse: 12 Bit zur SPezifizierung einer Hauptspeicheradresse
  • Akkumulator: Register A
  • zur besseren Lesbarkeit: OpCode symbolisch statt numerisch
  • nur absolute Adressierung, 16-Bit-Ganzzahlen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Komplexere Maschinensprachen

A

Konzepte zur Steigerung der Leistungsfähigkeit und des Anwendungskomforts:

  • Realisierung der Stapelverarbeitung, z.B. für
    • Abarbeitung arithmetischer Ausdrücke
    • Verwaltung geschachtelter Prozeduraufgaben
  • Rechnen mit GPZ, möglichst mit großen Wortlängen
  • verschiedene Adressierungsarten
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Maschinensprache

Adressierungsarten

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Assemblersprache

Eigenschaften

A
  • maschinenorientierte Pogrammiersprache zur Formulierung von Programmen, die sich an den Eigenarten eines bestimmten Rechners orientierten → hardwarenahes Programmieren
  • ähnliche Strukturen wie Maschinensprache, aber mehr Komfort
  • in Maschinenprogramme übersetzt → keine direkte Ausführung durch Interpreter
  • Assembler/Assemblierer zur Übersetzung
  • Befehle werden symbolisch statt numerisch notiert
    • jeder Operationscode hat festen symbolischen Namen (“mnemonisch”), der an Semantik der Operation erinnert, z.B. ADD für Addition
    • Operandenadressen können Namen zugeordnet werden → Adressierung über diesen Namen
    • Befehl (ihre Adressen) können durch Lebel gekennzeichnet werde (etwa zur Festlegung von Sprungzielen)
  • Unterschied zu Maschinensprache: zusätzliche Pseudobefehle — nur für den Assembler verständliche Anweisungen für die Steuerung der Übersetzung von Assemblerprogrammen
    • Reservierung von Speicherplatz für Variablen
    • Festlegung von Programmanfangsadresse
    • Zuweisung von Werten/Adressen an symbolische Namen (Variablenzuweisung)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Assemblersprache

Befehlsaufbau

A

Markenfeld: zur symbolischen Kennzeichnung eines Assemblerbefehls, entspricht auf Maschinenebene einer Befehlsadresse

Operationsfeld: enthält entweder mnemonic eines Maschinenbefehls o. Teil eines Pseudobefehls

Operandenfeld: enthält einen/mehrere/keinen Operanden, d.h. Konstanten o. Adressangaben

Kommentarfeld: (optional) zur Dokumentation der Befehle, kann alle möglichen Zeichen enthalten

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Höhere Programmiersprachen

Kategorisierung

A
  • prozedurale Programmiersprachen: ADA, BASIC, PASCAL, C, FORTRAN
  • funktionale Programmiersprachen: LISP, LOGO, Gofer
  • prädikative Programmiersprachen: PROLOG, im Bereich der KI
  • objektorientierte Programmiersprachen: C++, C#, Java, Selphi, Smalltalk
17
Q

Assemblersprache

Assemblierer - Aufgaben

A

Programm zur Übersetzung von Assemblerprogrammen in ausführbare Maschinenprogramme

  • Syntaxanalyse der Befehle
  • Ausführung der Pseudobefehle
  • Konvertieren von Konstanten in Binärdarstellung
  • Generierung des Maschinencodes für den Operationsteil
  • Berechnung von Adressenn, die durch Symbole oder Ausdrücke gegeben sind
  • Adressrechnung: absolut o. relativ zum Programmanfang
18
Q

Assemblersprache

Assembler - 2-Pass-Assembler

A

einmaliges Durchlaufen beim Übersetzen genügt nicht, da Adressen von Vorwärtssprüngen nicht bekannt sind

  1. Durchlauf (Pass 1): Aufbau der Symboltabelle: alle verwendeten Namen/MArken mit ihrer Adresse und evtl. weiteren Angaben in Datei gespeichert
  2. Durchlauf (Pass 2): EInsetzen der Adresswerte für die Symbole mit Hilfe der Symboltabelle im übersetzten Programm
19
Q

Interpreter

A

Vorgehen: nacheinander Analyse jeder Anweisung mit unmittelbarer Ausführung

  • Vorteile: insbesondere bei Programmentwicklung
    • Änderungen im Quellprogramm direkt ausführbar
    • Werte von Variablen bei Ausführung meist abfragbar –> vereinfachte Fehlererkennung
  • Nachteile:
    • relativ großer Zeitaufwand beim Interpretieren (z.B. Schleifen immer neu interpretiert)
    • Adressen sind bei jedem Durchlauf neu zu berechnen
20
Q

Compiler

A

Vorgehen: alle Anweisungen werden zuerst in Maschinensprache o. Assembler übersetzt, das übersetzte Programm gespeichert und ist dann ausführbar

  • Vorteil: erzeugtes Programm kann beliebig oft ausgeführt werden, ohne dass eine erneute Übersetzung notwendig ist; Quelltext ist geschützt
  • Nachteil: Fehlererkennung und Programmtest schwieriger als bei interpretativer Ausführung
21
Q

Compiler

4 Phasen des Kompilierens

A
  1. lexikalische Analyse (“Scanner”)
  2. syntaktische Analyse (“Parsing”)
  3. semantische Analyse und Codegenerierung
  4. Codeoptimierung
22
Q

Compiler

  1. Phase: lexikalische Analyse (“Scanner”)
A

Zerlegung des gesamten Programms in eine Folge kleinster syntaktischer Einheiten (Tokens) anhand von Trennzeichen

  • Tokens:
    • benutzerdefinierte Namen, werden in Tabelle eingetragen (für Variablen o. Datentypen)
    • Grundsymbole: Wortsymbole und feste syntaktische Einheiten (BEGIN, IF, :=, …)
    • Zahlen: Konvertierung verschiedener Darstellungen in rechnerinterne Darstellung
    • Kommentare: werden überlesen
23
Q

Compiler

  1. Phase: syntaktische Analyse (“Parsing”)
A
  • überprüft syntaktische Korrektheit des Programms gemäß den Regeln der kontextfreien Grammatik der Programmiersprache
  • erzeugt zugehörigen Ableitungsbaum = parsing tree
24
Q

Compiler

  1. Phase: semantische Analyse und Codegenerierung
A
  • semantische Analyse: überprüft semantische Regeln
    • Vereinbarung jedes benutzten Namens
    • Verträglichkeit von Typen innerhalb eines logischen o. arithmetischen Ausdrucks o. in Zuweisungen
  • Codegenerierung:
    • Durchlaufen des Syntaxbaumes mit gleichzeitiger Erzeugung des Assembler-/Maschinenprogramms
    • i.d.R. ist jedem nichhterminalen Symbol eine Prozedur zugeorndnet, die den Code für dieses Symbol erzeugt
25
Q

Compiler

  1. Phase: Codeoptimierung
A

Optimierung des erzeugten Programms

insbesondere:

  • Laufzeitoptimierung
  • Speicherplatzoptimierung
  • z.B. Erkennung mehrfach auftretender (arithmetischer) Ausdrücke wie x = f(z)+b und y = f(z)+b*
    1. Ausdruck wird ersetzt z.B. durch y=x → nur einmalige Auswertung*
26
Q

Java Virtual Machine

A
  1. Java-Code wird zu Bytecode kompiliert
    • Befehl javac
    • plattformunabhängig, nicht direkt ausführbar
  2. Bytecode wird von virtueller Maschine interpretiert
    • Nachteil: Laufzeit
    • Vorteil: Sicherheit (kann ohne Einsicht ins Quellprogramm weitergegeben werden)
  • JIT-Compiler (Just in Time)
    • bevor eine Methode das erste Mal benutzt wird, wird der entsprechende Bytecode in Maschinensprache übersetzt
    • übersetzte Methoden werden gespeichert, um Mehrfachübersetzungen zu vermeiden
  • “echte” Compiler auch verfügbar → keine Plattformunabhängigkeit