Assembler-Programme. Systemprogrammierung (37-023) Elementare Komponenten eines Assembler-Programmes



Ähnliche Dokumente
Einführung in die C++ Programmierung für Ingenieure

I.1 Die Parrot Assemblersprache

Die Programmiersprache C

Grundlagen der Rechnerarchitektur

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Systemprogrammierung (37-023)

Zählen von Objekten einer bestimmten Klasse

Zahlensysteme: Oktal- und Hexadezimalsystem

Deklarationen in C. Prof. Dr. Margarita Esponda

Prozessor HC680 fiktiv

4D Server v12 64-bit Version BETA VERSION

1. Stellenwerte im Dualsystem

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Modul 122 VBA Scribt.docx

Technische Informatik 2 Adressierungsarten

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Einführung in die Programmierung

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Mächtigkeit von WHILE-Programmen

Mikroprozessor bzw. CPU (Central Processing. - Steuerwerk (Control Unit) - Rechenwerk bzw. ALU (Arithmetic Logic Unit)

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Grundlagen der Rechnerarchitektur. Einführung

Zugriff auf die Modul-EEPROMs

5 Speicherverwaltung. bs-5.1 1

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

N Bit binäre Zahlen (signed)

Technische Informatik 1

Die Mikroprogrammebene eines Rechners

Computerarithmetik ( )

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Hochschule München, FK 03 FA SS Ingenieurinformatik

Dateiname Name(n) und Matrikelnr. des/der Bearbeiter Tel.-Nr. und -Adresse für den Fall, dass die Diskette nicht lesbar ist.

Einführung in die Systemprogrammierung

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Modellierung und Programmierung 1

Kapitel 1: Einführung

Die Programmiersprache C99: Zusammenfassung

Programmierung in C. Grundlagen. Stefan Kallerhoff

Mikrocomputertechnik. Adressierungsarten

Version 0.3. Installation von MinGW und Eclipse CDT

Übungen zu C++ Kapitel 1

N Bit Binärzahlen. Stelle: Binär-Digit:

Grundlagen. Kapitel 1

Algorithmen zur Integer-Multiplikation

Einführung in die Programmierung

Informationsdarstellung im Rechner

Der SD-Kartenslot befindet sich an der rechten Gehäuseseite unterhalb der rechteckigen hellgrauen Gummiabdeckung.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

2.2 Rechnerorganisation: Aufbau und Funktionsweise

Computer-Architektur Ein Überblick

SOFiSTiK AG Installationsanleitung

Teil VIII Von Neumann Rechner 1

2 Einfache Rechnungen

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/13

2. Negative Dualzahlen darstellen

Einführung in die Informatik I

Verbinden. der Firma

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Daten, Informationen, Kodierung. Binärkodierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Einführung in die C-Programmierung

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Bedienungsanleitung Control DC Supply

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Zahlensysteme und Datendarstellung

ARM-Cortex-M4 / Thumb-2-Befehlssatz Adressierungsarten und arithmetische Operationen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

1.7 Assembler Programmierung

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

L3. Datenmanipulation

Grundlagen der Rechnerarchitektur. Einführung

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

E-PRIME TUTORIUM Die Programmiersprache BASIC

Benutzerkonto unter Windows 2000

2. Semester, 2. Prüfung, Lösung

1. So beginnen Sie eine Kalkulation

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Der Toy Rechner Ein einfacher Mikrorechner

2 Darstellung von Zahlen und Zeichen

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

QTrade GmbH Landshuter Allee München Seite 1

Funktionale Programmierung mit Haskell

Gegenüberstellung von Assembler- und C-Programmierung

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at

Zahlensysteme Seite -1- Zahlensysteme

Instruktionssatz-Architektur

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

Übersicht Programmablaufsteuerung

Assembler/C Programmierung eines Mikrocontrollers

Befehlssatz zum High Speed Interface-88-USB (HSI-88-USB) (ab Firmware 0.71) (Version 1.2)

Transkript:

Systemprogrammierung (37-023) Assemblerprogrammierung Betriebssystemgrundlagen Maschinenmodelle Dozent: Prof. Thomas Stricker krankheitshalber vertreten durch: Felix Rauch WebSite: http://www.cs.inf.ethz.ch/37-023/ Begleit-/Textbuch: R. Paul: SPARC Architecture, Assembly Language Programming and C --- B. Kernigham, D. Richie: The C Programming Language Heute: Erste Schritte mit der SPARC-Assemblersprache 20.11.00-1 37-023 Systemprogrammierung Stricker Assembler-Programme Die Assemblersprache ist gemäss Definition eine Metasprache, welche zwischen einer höheren Programmiersprache und dem Maschinencode vermittelt. Compiler: Programm zur Übersetzung eines Programmes aus einer höheren Programmiersprache in eine Assemblersprache. Assembler: Programm zur Übersetzung eines Assemblerprogramms in eine Maschinensprache. Beispiel: C-Programm 30 main() 31 { 32 int a = 1; 33 int b = 2; 34 int c; 35 c = a + b; 36 printf( %d\n,c); 37 } 20.11.00-2 37-023 Systemprogrammierung Stricker Assembler-Code: 1.data 2 a:.word 1 3 b:.word 2 4 5 start:.text 6 set a, %r1 7 ld [%r1], %r1 8 set b, %r2 9 ld [%r2], %r2 10 add %r1, %r2, %r3 11 end: ta 0 Maschinen-Code (Binärdatei): ^A^C^A^K \234 ^C^P\202^P`^DÂ@^E^P\204^P Ä\200\206X@^B\221D ^Oÿ^Oÿ^D^C^N^D ^U^F@^X^F@^D^[^D!^D <%^E @-^E @4 @^H:^G@^HB @^HN Elementare Komponenten eines Assembler-Programmes Allgemeines: Assemblersprache ist zeilenbasiert Assemblersprache ist vom Prozessor abhängig Jedes Statement spezifiziert eine Instruktion (Anweisung) oder ein Datenelement Assembler-Programme sind i. A. schlecht lesbar Kommentare sind von grosser Bedeutung! ld [%r1], %r1! a -> r1 ld [% fp+ 96], %l0! y1 in %l0 /* auch C-style ist erlaubt */ 20.11.00-3 37-023 Systemprogrammierung Stricker 20.11.00-4 37-023 Systemprogrammierung Stricker

Organisation in Segmente Text: Programcode Data: Konstanten und vorgegebene Daten BSS: Block Storage Segment oder Block Started by Symbol: Speicherung dynamischer Daten und nicht initialisierter globaler Variablen. Text und Data-Segmente werden im Programm gespeichert, BSS ist dynamisch. Verwendung verschiedener Zahlensysteme. x:.word 23 y:.word 0x3fce Verarbeitung in der CPU jedoch immer binär. Anweisungen an den Assembler Labels <name>: Beispiel: start: Dienen zur Markierung bzw. Addressierung von Speicheradressen Dienen der Übersichtlichkeit des Programmes (erhöhen Lesbarkeit) Können Variablen darstellen (x:.word 42) Insbesondere im Kontext von Kontrollstrukturen und Subroutines Elementares Label ist die Startadresse des Programmes: _main 20.11.00-5 37-023 Systemprogrammierung Stricker 20.11.00-6 37-023 Systemprogrammierung Stricker Assembler Direktiven.<name>.data.word.global Geben Anweisungen an den Assembler Werden nicht von der CPU ausgeführt Sind als Pseudo-Operationen zu interpretieren Wählen aktuelles Segment aus (Text, Daten, BSS): Label in Datensegment: Variable Label in Textsegment: Sprungadresse Instruktionen <name> <operand1>,<operand2>,... add %r1, %r1, %r2 ld [%r1], %r2 Spezifizieren eine Anweisung, welche von der CPU decodiert und ausgeführt werden kann Operanden sind typischerweise Register oder Konstanten (vgl. Load/Store Architektur) Operanden können nicht direkt in Speicheradressen stehen. (vgl. fetch im v. Neumann Zyklus) Geben Variablengrösse an:.word.byte 20.11.00-7 37-023 Systemprogrammierung Stricker 20.11.00-8 37-023 Systemprogrammierung Stricker

Synthetische Instruktionen dienen der kompakteren Programmierung, werden jedoch in Folgen von elementaren Instruktionen zerlegt. clr regd or %r0, %r0, regd mov regs, regd or %r0, regs, regd dec regd sub regd, 1, regd set val, regd sethi %hi(val), regd or regd, %lo(val), regd Wobei val links eine volle 32 Bits Zahl ist und %hi() und %lo() Assemblerdirektiven sind, welche die oberen 22 respektive die unteren 13 Bits aus ihrem Argument extrahieren. set small, regd or %r0, small, regd Wobei small maximal eine 13 Bit grosse Zahl sein darf. 20.11.00-9 37-023 Systemprogrammierung Stricker SPARC Prozessoren: Übersicht Allgmeines: SPARC = Scalable Processor Architecture SPARC Prozessoren von der Firma Sun microsystems als Weiter-/Seitentwicklung der RISC I und II Architektur angeboten (RISC: Reduced Instruction Set Computer). Aktuell: UltraSPARC-III. Prozessor unterstützt nur wenige, einfache, dafür schnelle Befehle. Kompaktere Architektur und schnellere Programmausführung Sparc ist eine offene Architektur Vorlesung ist an V8 angelehnt (aktuell V9) Rechner in den Übungsräumen sind mit Sun UltraSPARC ausgerüstet 20.11.00-10 37-023 Systemprogrammierung Stricker Vorführungen und Übungen mit einem SPARC Simulator (tkisem) 32 Bit tiefe Register (Integer Unit bis 540 Register) Insgesamt 32 sichtbare Integer Register Signed Integer Wertebereich von -2 31 <= n < 2 31 Big Endian: Wortadresse = Adresse des MSB SPARC Assembler Besonderheit: Registernamen treten zweifach auf 20.11.00-11 37-023 Systemprogrammierung Stricker 20.11.00-12 37-023 Systemprogrammierung Stricker

Elementare Assembler-Direktiven.word x:.word 0x1f3 Generiert ein initialisiertes Wort im aktuellen Speichersegment. Wortgrösse bei SPARC 32 Bit.halfword x:.halfword 0x1f3 Generiert ein initialisiertes Halbwort im aktuellen Speichersegment. Grösse bei SPARC 16 Bit.byte x:.byte 0x1f Generiert ein initialisiertes Byte im aktuellen Speichersegment 8 Bit 20.11.00-13 37-023 Systemprogrammierung Stricker.text.text Deklariert das folgende Segment als Text und setzt den Adresszähler auf das folgende Byte..data.data Deklariert das folgende Segment als Data und setzt den Adresszähler auf das folgende Byte..ascii x:.ascii hello Generiert einen String von ASCII Zeichen. (.asciz beendet String zusätzlich mit 0-Byte)..global.global _main Markiert ein Symbol (Label) als global sichtbar.include.include gx.h Schliesst die folgende Datei mit ein. Sinnvoll bei Header-Dateien zur Definition von Variablen und Datenstrukturen. (Vgl. C-Anweisung: #include) 20.11.00-14 37-023 Systemprogrammierung Stricker Elementare Instruktionen Löschen einer Speicheradresse (synthetisch) clr [address] Kopieren von Register-Inhalten (synthetisch) mov register1, register2 Addition und Subtraktion add src_r1, src_r2, dst_r sub src_r1, src_r2, dst_r signed und unsigned Multiplikation smul src_r1, src_r2, dst_r umul src_r1, src_r2, dst_r Führt eine Multiplikation von zwei 32 Bit Zahlen durch. Die Operanden können dabei mit oder ohne Vorzeichen (Zweierkomplement) interpretiert werden. Das Ergebnis ist 64 Bit lang, die oberen 32 Bit (most significant bits) stehen im register %y (delayed write). signed und unsigned Division sdiv src_r1, src_r2, dst_r 20.11.00-15 37-023 Systemprogrammierung Stricker udiv src_r1, src_r2, dst_r Führt eine Division von zwei 32 Bit Zahlen durch. Die Operanden können dabei mit oder ohne Vorzeichen (Zweierkomplement) interpretiert werden. Operand 1 ist 64 lang, die oberen 32 Bit (most significant bits) stehen im register %y. Anmerkung: Erst ab SPARC V8 implementiert Null-Operation nop store Instruktion speichert Registerinhalt in Adresse st register, [address] load Instruktion lädt Speicherinhalt in Register ld [address], register Trap always ruft das Betriebssystem auf mit einem Request, der in register %g1 codiert ist. ta 0 20.11.00-16 37-023 Systemprogrammierung Stricker

Assembler-Programm 1.data 2 a2:.word 1 3 a1:.word 5 4 a0:.word 7 /* bsp6.s */ 5 x:.word 9 /* y=(x-a2)*(x-a1)/(x-a0) */ 6 y:.word 0 7 8.text 9 start: set x, %r1 10 ld [%r1], %r1 11 set a2, %r2 12 ld [%r2], %r2 13 set a1, %r3 14 ld [%r3], %r3 15 set a0, %r4 16 ld [%r4], %r4 17 set y, %r7 18 sub %r1, %r2, %r5 19 sub %r1, %r3, %r6 20 smul %r6, %r5, %r5 21 sub %r1, %r4, %r6 22 sdiv %r5, %r6, %r5 23! / (x - a0) 24 st %r5, [%r7] 25 end: ta 0 20.11.00-17 37-023 Systemprogrammierung Stricker Der SPARC Simulator TKISEM C++ Programm zur Simulation der SPARC Architektur (V8) Von University of New Mexico entwickelt Ist interaktiv bedienbar Erleichtert den Zugang zur Assemblersprache Gibt Einsicht in Register, Programmund Datenspeicher Eigenes Betriebssystem (ROM) Läuft unter UNIX Betriebssystem Ist mit einem Assembler und Linker ausgestattet Objektdatei erzeugen: isem-as bsp6.s -o bsp6.o Programm erzeugen: isem-ld bsp6.o -o bsp6 20.11.00-18 37-023 Systemprogrammierung Stricker Wesentliche Komponenten Load und Run button Step modus User und Supervisor Modi Statusregister User Text Breakpoints User Data Register Übersicht PC und NPC Y und Status-Register Set Register-Funktion Next Instruction Repräsentation im hexadezimal-format Beispiel: Multiplikation von 32 Bit Zahlen 1! 32 bit Multiplikation 2 3.data 4 a2:.word 0x0fffffff 5 a1:.word 0x0fffffff 6 7.text 8 start: set a1, %r1 9 ld [%r1], %r1 10 set a2, %r2 11 ld [%r2], %r2 12 smul %r1, %r2, %r3 13 end: ta 0 Bemerkung: %Y-Register muss bei Division getrennt initialisiert werden -> delayed write 20.11.00-19 37-023 Systemprogrammierung Stricker 20.11.00-20 37-023 Systemprogrammierung Stricker