Assembler Unterprogramme
|
|
- Wolfgang Flater
- vor 7 Jahren
- Abrufe
Transkript
1 Assembler Unterprogramme Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Unterprogramme 1/
2 Unterprogramme Unterprogramme: Prozeduren und Funktionen Unterprogramme sind aus modernen Programmiersprachen nicht mehr wegzudenken Ideen hinter der Unterprogrammtechnik sollten auch im Assembler-Code erhalten bleiben: Need-to-Know : Aufrufer des Unterprogramms sollte nur die Parameter, Rückgabewerte und den Namen des Unterprogramms kennen müssen Need-to-Know : aufgerufene Funktion sollte kein Wissen über den Aufrufer besitzen müssen Hauptprogramm und Unterprogramm sollten getrennt schreibund übersetzbar sein jede Art direkter oder indirekter Rekursion muss möglich sein jede beliebige Schachtelungstiefe muss möglich sein (nur begrenzt durch Speichergröße) Assembler Unterprogramme 2/
3 Unterprogramme Aufruf eines Unterprogramms (1. Lösungsansatz): / Hauptprogramm / jmp uprog u p r o g r e t : uprog : / Unterprogramm / jmp u p r o g r e t Assembler Unterprogramme 3/
4 Unterprogramme Das Unterprogramm selbst muss in diesem Falle mit jmp uprogret zum Hauptprogramm zurückspringen. Problematisch, wenn Unterprogramm von mehreren Stellen aus dem Hauptprogramm heraus aufgerufen wird. Man muss sich merken, von wo aus das Unterprogramm aufgerufen wurde bzw. wohin zurückgekehrt werden soll ( Rückkehradresse, Return-Address ). Assembler Unterprogramme 4/
5 Unterprogramme Aufruf eines Unterprogramms (2. Lösungsansatz): / Hauptprogramm / movl $uprogret1, %eax jmp uprog u p r o g r e t 1 : movl $uprogret2, %eax jmp uprog u p r o g r e t 2 : uprog : / Unterprogramm / jmp %eax Assembler Unterprogramme 5/
6 Unterprogramme Unterprogramm kehrt jetzt zum jeweiligen Aufrufort zurück. Dennoch problematisch: verschachtelte Unterprogrammaufrufe (z.b. Rekursion) nicht möglich (jedes Register kann nur maximal eine Rücksprungadresse speichern, Anzahl der Register beschränkt) Unterprogramm-Aufrufer muss wissen, in welchem Register das Unterprogramm die Rückkehradresse erwartet, oder aufgerufene Funktion muss wissen, in welchem Register die Rückkehradresse steht Assembler Unterprogramme 6/
7 Unterprogramme Aufruf eines Unterprogramms: / Hauptprogramm / movl $uprogret1, (%esp)+ jmp uprog u p r o g r e t 1 : movl $uprogret2, (%esp)+ jmp uprog u p r o g r e t 2 : uprog : / Unterprogramm / jmp (%esp ) Assembler Unterprogramme 7/
8 Unterprogramme Stack %esp ( Stack-Pointer ) muss zu Programmbeginn die Adresse eines genügend großen Speicherbereiches ( Stack ) enthalten. Funktioniert für beliebig verschachtelte Unterprogramme (auch Rekursion)! Assembler Unterprogramme 8/
9 Unterprogramme Stack Vier verschiedene Möglichkeiten für die Stack-Verwaltung: Stack wird von den kleinen Adressen hin zu den großen beschrieben (1) von den großen Adressen hin zu den kleinen beschrieben (2) Stack-Pointer zeigt auf das zuletzt abgelegte Datum (A) den nächsten freien Speicherplatz (B) Dementsprechend sind zu verwenden: push pop 1A mov..., +(%esp) mov (%esp)-,... 1B mov..., (%esp)+ mov -(%esp),... 2A mov..., -(%esp) mov (%esp)+,... 2B mov..., (%esp)- mov +(%esp),... Assembler Unterprogramme 9/
10 Unterprogramme Stack Hinweise: Stack des i80x86 und m68x05 wächst von den hohen Adressen hin zu den niedrigeren Stack-Pointer des i80x86 zeigt auf das zuletzt abgelegte Datum Stack-Pointer des m68x05 zeigt auf den nächsten freien Speicherplatz andere Schreibweise: r a : movl $ra, (%esp ) jmp uprog i80x86 m68x05 c a l l uprog j s r uprog jmp (%esp)+ r e t r t s Assembler Unterprogramme 10/
11 Unterprogramme Parameter/Return-Wert Verschiedene Möglichkeiten: Register: Speicher: Stack: Anzahl beschränkt nicht geeignet für rekursive Unterprogramme langsam nicht geeignet für rekursive Unterprogramme langsam => Übergabe der Parameter über den Stack, Return-Wert über Register (z.t. Mischformen) Assembler Unterprogramme 11/
12 Unterprogramme Parameter/Return-Wert Beispiel: Übergabe der Parameter und des Return-Wertes über Register: x = sub ( y, z ) ; i n t sub ( i n t a, i n t b ) { return a b ; } => => sub : movl y, %eax movl z, %ebx c a l l sub movl %eax, x s u b l %ebx, %eax r e t Assembler Unterprogramme 12/
13 Unterprogramme Parameter/Return-Wert Beispiel: Übergabe der Parameter auf dem Stack und des Return-Wertes über ein Register (hier: %eax): x = sub ( y, z ) ; i n t sub ( i n t a, i n t b ) { return a b ; } => => movl $, %esp movl z, (%esp ) movl y, (%esp ) c a l l sub a d d l $8, %esp movl %eax, x sub : movl 4(%esp ), %eax s u b l 8(%esp ), %eax r e t Assembler Unterprogramme 13/
14 Unterprogramme Parameter/Return-Wert Übergabe der Parameter auf dem Stack und des Return-Wertes über ein Register (i80x86: %eax) ist Standard-Verfahren. Unterprogrammaufrufe sollten daher immer folgendes Format haben: p u s h l <paramn> p u s h l <param2> p u s h l <param1> c a l l <subprog> a d d l $, %esp movl %eax, <r e s u l t > Assembler Unterprogramme 14/
15 Unterprogramme Parameter Dass die Parameter im umgekehrter Reihenfolge auf den Stack gepusht werden, hat folgende Vorteile: <param1> liegt (unabhängig von der Anzahl der Parameter) immer an bekannter Adresse (4(%esp)). Dies ermöglicht Unterprogramm-Aufrufe mit variabler Anzahl von Parametern (z.b. C-Funktion printf). Da der Stack von hohen Adressen hin zu kleinen Adressen wächst, liegen die Parameter wie in einem Array vor. Assembler Unterprogramme 15/
16 Unterprogramme Lokale Variablen Viele Unterprogramme verwenden lokale (temporäre) Variablen. Speicherung dieser Variablen in Registern schneller Zugriff, kurze Befehle (einfache Adressierungsarten), wenige Register, keine Rekursion (direkt) möglich in festen Speicherzellen i.a. genügend Speicherkapazität, langsamer Zugriff, keine Rekursion (direkt) möglich, alter Wert beim widerholten Aufruf des Unterprogramms noch intakt auf dem Stack i.a. genügend Speicherkapazität, kurze Befehle (einfache Adressierungsarten), Rekursion direkt möglich, langsamer Zugriff => Mischformen aus allen Speicherarten Assembler Unterprogramme 16/
17 Unterprogramme Lokale Variablen Register-Variablen für die am häufigsten verwendeten Variablen (z.b. Schleifen-Zähler, temporäre Variablen bei der Ausdrucksberechnung) Variablen in festen Speicherzellen für Werte, die beim widerholten Aufruf des Unterprogramms erhalten sein müssen (static-werte) Variablen auf dem Stack für seltener verwendete Variablen für große Variablen (z.b. Records, Arrays) Zwischenspeicher für Register-Variablen (z.b. für Rekursion) Assembler Unterprogramme 17/
18 Unterprogramme Lokale Register-Variablen Vorsicht bei der Verwendung von Register-Variablen! Man darf in einem Unterprogramm die Register-Variablen-Werte des Hauptprogramms nicht überschreiben. Zwei Möglichkeiten: call-used: Hauptprogramm sichert Register-Werte vor Aufruf des Unterprogramms und restauriert Werte nach Rückkehr call-saved: Unterprogramm sichert Register-Werte zu Beginn der Unterprogrammausführung restauriert Werte vor Rücksprung Assembler Unterprogramme 18/
19 Unterprogramme Lokale Register-Variablen Call-Used (i80x86: %eax, %ecx, %edx): p u s h l %r e g c a l l uprog < uprog kann %r e g verwenden p opl %r e g Assembler Unterprogramme 19/
20 Unterprogramme Lokale Register-Variablen Call-Saved (i80x86: %ebx, %ebp, %edi, %esi): p u s h l %r e g < h i e r kann %r e g verwendet werden p opl %r e g r e t Assembler Unterprogramme 20/
21 Unterprogramme Stack-Variablen Benutzung von Variablen auf dem Stack (vorausgesetzt, %esp zeigt auf das Ende eines freien Speicherbereiches): Reservieren von Speicherplatz: s u b l $<nbytes >, %esp Nutzung der Variablen (Beispiele): movl 4(%esp ), %eax movb %bl, 8(%esp ) addw $4, 6(%esp ) Freigeben des Speicherbereiches: a d d l $<nbytes >, %esp Assembler Unterprogramme 21/
22 Unterprogramme Stack-Variablen Beispiel (i80x86): void proc ( void ) { long i n t a ; short i n t b ; } a = ; b = ; => proc : s u b l $6, %esp movl, 0(%esp ) movw, 4(%esp ) a d d l $6, %esp r e t Assembler Unterprogramme 22/
23 Unterprogramme Stack-Frame Jedes Unterprogramm kann Aufruf-Parameter bekommen verfügt über eine Rückkehr-Adresse benutzt u.u. lokale Stack-Variablen verwendet ggf. Stack für neue Unterprogramm-Aufrufe Dieser Bereich des Stacks wird als Stack-Frame des Unterprogramms bezeichnet. Assembler Unterprogramme 23/
24 Unterprogramme Stack-Frame void A( i n t x, i n t y ) { long i n t z ; char c ; B( z, c ) ; } Assembler Unterprogramme 24/
25 Unterprogramme Frame-Pointer Problem: relative Adressen (bzgl. %esp) der lokalen Stack-Variablen ändert sich bei jeder Ausführung eines push- bzw. pop-befehls. long i n t x ; proc ( x, x ) ; ergibt compiliert: s u b l $4, %esp p u s h l 0(%esp ) p u s h l 4(%esp ) // r e l. Adr. mit p u s h l m o d i f i z i e r t! c a l l proc a d d l $8, %esp => Zugriff auf Stack-Variablen / Parameter sehr mühsam und Assembler Unterprogramme 25/ fehleranfällig!
26 Unterprogramme Frame-Pointer Extra-Register (Frame-Pointer; i80x86: %ebp) enthält Adresse für Stack-Variablen- und Parameter-Zugriff: Beispiel ergibt compiliert: p u s h l %ebp \ movl %esp, %ebp enter $4 s u b l $4, %esp / p u s h l 4(%ebp ) p u s h l 4(%ebp ) // p u s h l a e n d e r t %ebp n i c h t! c a l l proc a d d l $8, %esp movl %ebp, %esp \ p o p l %ebp / leave r e t Assembler Unterprogramme 26/
27 Unterprogramme Frame-Pointer Stack-Frames mit Frame-Pointern: Durch Verfolgung der Frame-Pointer kann die gesamte Aufruf-Hierarchie der Unterprogramme verfolgt werden (Debugger). Assembler Unterprogramme 27/
28 Unterprogramme ABI ABI: Application Binary Interface Interface-Definition beschreibt: Namenskonvention Übergabeverfahren für Parameter Übergabeverfahren für Return-Werte Nutzung der Register ggf. Fehlerbehandlung ABI wird sinnvollerweise vom CPU-Hersteller definiert. Compiler-Hersteller sollten sich daran halten. Sonst sind von verschiedenen Compilern übersetzte Programmteile (z.b. Libraries) zueinander inkompatibel. Assembler Unterprogramme 28/
29 Unterprogramme ABI Namen Unterprogramm-Namen einfach für Sprachen wie z.b. C oder Pascal: Unterprogramm-Name im Assembler-Code entspricht dem Namen in der Hochsprache. Schwieriger bei überladenen Unterprogrammen. Dann existieren mehrere gleiche Hochsprachen-Unterprogramm-Namen. Lösung: Parameter- und Return-Typen in den Namen hineinkodieren. Beispiele: i n t f ( i n t x ) ; void f ( unsigned long x ) ; i n t _ f _ i n t : void_f_unsigned_long : Um Mehrdeutigkeiten (z.b. void f(unsigned long x); und void f(unsigned x, long y);) zu umgehen, ggf. noch aufwändiger. Assembler Unterprogramme 29/
30 Unterprogramme ABI Namen Um Kollisionen von vom Compiler vergebenen Namen (z.b. für Labels oder temporäre Variablen) und vom Programmierer vergebenen Namen zu vermeiden, wird ein _ vor die Hochsprachen-Namen oder zwei _ oder ein. vor die vom Compiler vergebenen Namen gesetzt. gcc: Hochsprachen-Namen bleiben erhalten, gcc nutzt. als Namensprefix für temporäre Namen/Labels. Assembler Unterprogramme 30/
31 Unterprogramme ABI Parameter/Return-Wert Standardmässig übergibt i386-gcc Parameter über den Stack. Parameter werden in Pascal: normaler C/C++: umgekehrter Java: undefinierter Reihenfolge auf dem Stack abgelegt. Return-Werte werden erwartet der i386-gcc in %eax: char-, short-, int-, long-werte und Adressen %edx/%eax: long-long-werte %st(0): float-, double, long-double-werte Strukturen und Arrays können standardmässig nicht übergeben werden! Assembler Unterprogramme 31/
32 Unterprogramme ABI Register ABI regelt für jedes Register, ob aufrufendes Unterprogramm oder aufgerufenes Unterprogramm benutztes Register sichern muss ( caller-saved-regs, callee-saved-regs ). Assembler Unterprogramme 32/
33 Unterprogramme ABI Register i386-standard: Aufrufendes Unterprogramm muss %eax, %ecx und %edx sichern, bevor es weiteres Unterprogramm aufruft. Nach dem Aufruf muss es die Werte wiederherstellen. aufgerufenes Unterprogramm muss %ebx, %edi und %esi sichern, bevor es sie verändert. Vor dem Rücksprung zum Aufrufer müssen Werte restauriert werden. %esp und %ebp werden als Stack-Pointer bzw. Frame-Pointer verwendet. (Natürlich nur, wenn die Register vom Unterprogramm verwendet werden.) Assembler Unterprogramme 33/
34 Unterprogramme ABI Register Beispiel: func : p u s h l %ebx // %ebx muss g e s i c h e r t werden p u s h l %edi // %edi muss g e s i c h e r t werden p u s h l %e s i // %e s i muss g e s i c h e r t werden p u s h l %eax // %eax muss g e s i c h e r t werden p u s h l %ecx // %ecx muss g e s i c h e r t werden p u s h l %edx // %edx muss g e s i c h e r t werden c a l l p opl %edx // %edx w i e d e r h e r s t e l l e n p opl %ecx // %ecx w i e d e r h e r s t e l l e n p opl %eax // %eax w i e d e r h e r s t e l l e n p opl %e s i // %e s i w i e d e r h e r s t e l l e n p opl %edi // %edi w i e d e r h e r s t e l l e n p opl %ebx Assembler // %ebx Unterprogramme w i e34/43 d e r h e r s t e l l e n r e t
35 Unterprogramme Verschachtelte Unterprogramme Z.B. Pascal oder C-Erweiterungen erlauben verschachtelte Unterprogramme. Beispiel: i n t main ( ) { i n t y ; i n t f ( i n t x ) { return x y ; } y = ; } return f ( 4 ) ; Assembler Unterprogramme 35/
36 Unterprogramme Verschachtelte Unterprogramme Verschachtelte Unterprogramme haben jeweils Zugriff auf ihre Parameter, ihre lokalen Variablen, die Parameter ihrer übergeordneten Unterprogramm(e), die lokalen Variablen ihrer übergeordneten Unterprogramm(e), globale Variablen. Assembler Unterprogramme 36/
37 Unterprogramme Verschachtelte Unterprogramme Lösung: Als Parameter werden solchen Unterprogrammen Adressen von Stack-Frames höherer Unterprogramme mitgegeben. Über diese Adressen können sie dann auf die Variablen/Parameter ihrer übergeordneten Unterprogramme zugreifen. Das funktioniert ggf. auch rekursiv und/oder mehrstufig. Assembler Unterprogramme 37/
38 Unterprogramme Fehlerbehandlung i n t proc ( ) { i n t e r r o r ; } f o r ( ; ; ) { e r r o r = func1 ( ) ; i f ( e r r o r ) return e r r o r ; e r r o r = func2 ( ) ; i f ( e r r o r ) return e r r o r ; } return 0 ; Probleme: fehleranfällig zu programmieren zeitraubende if-abfragen für (hoffentlich) nie auftretende Fälle Assembler Unterprogramme 38/
39 Unterprogramme Fehlerbehandlung Übersichtlicher, schneller, kürzer (Java): void proc ( ) throws E r r o r { t r y { f o r ( ; ; ) { func1 ( ) ; func2 ( ) ; } } c atch ( E r r o r e r r o r ) { throw e r r o r ; } } Assembler Unterprogramme 39/
40 Unterprogramme Fehlerbehandlung e r r o r _ i p :. l o n g 0 e r r o r _ s p :. l o n g 0 proc :. g l o b l proc p u s h l e r r o r _ i p p u s h l e r r o r _ s p movl $catch, e r r o r _ i p movl %esp, e r r o r _ s p // Try Part movl $0, %eax // No E r r o r c a t c h : p opl e r r o r _ s p p opl e r r o r _ i p cmpl $0, %eax j e no_err movl e r r o r _ s p, %esp // throw e r r o r p u s h l e r r o r _ i p no_err : r e t Assembler Unterprogramme 40/
41 Unterprogramme Fehlerbehandlung Übersichtlicher(?), schneller, kürzer (C, C++): jmpbuf s t a t e ; void proc ( ) { jmpbuf o l d s t a t e = s t a t e ; i n t e r r o r ; } e r r o r = setjmp ( s t a t e ) ; i f ( e r r o r == 0) { f o r ( ; ; ) { func1 ( ) ; func2 ( ) ; } } e l s e { s t a t e = o l d s t a t e ; longjmp ( s t a t e, e r r o r ) ; } Assembler Unterprogramme 41/
42 Unterprogramme Fehlerbehandlung setjmp :. g l o b l setjmp movl 4(%esp ), %edx // A d r e s s e von " s t a t e " movl (%esp ), %eax // Return A d r e s s e movl %eax, (%edx ) l e a 4(%esp ), %eax // Stack P o i n t e r movl %eax, 4(%edx ) movl $0, %eax r e t // No E r r o r longjmp :. g l o b l longjmp movl 8(%esp ), %eax // E r r o r movl 4(%esp ), %edx // A d r e s s e von " s t a t e " movl 4(%edx ), %esp // Stack P o i n t e r p u s h l (%edx ) // Return A d r e s s e r e t Assembler Unterprogramme 42/
43 Unterprogramme Fehlerbehandlung Eigenschaften setjmp/longjmp: keine echten Unterprogramme Unterprogramme mit unvorhersehbarem Kontrollfluss wiederhergestellt werden nur %eip, %esp (und ggf. %ebp) Register-Variablen nicht wiederherstellbar Stack-Variablen behalten aktuellen Wert Assembler Unterprogramme 43/
Assembler - Adressierungsarten
Assembler - Adressierungsarten Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Adressierungsarten 1/31 2008-04-01
MehrAssembler - Variablen
Assembler - Variablen Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Variablen 1/30 2008-04-21 Variablen Variablen
MehrVorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)
Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) J. Zhang zhang@informatik.uni-hamburg.de Universität Hamburg AB Technische Aspekte Multimodaler Systeme
MehrGrundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes
Grundlagen der Informatik III Wintersemester 2010/2011 7. Vorlesung Dr.-Ing. Wolfgang Heenes int main() { printf("hello, world!"); return 0; } msg: main:.data.asciiz "Hello, world!".text.globl main la
MehrAssembler - Einleitung
Assembler - Einleitung Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Einleitung 1/19 2008-04-01 Teil 1: Hochsprache
MehrAssembler. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg
Assembler Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2017/2018 V. Sieh Assembler (WS16/17) 1 15 Einleitung
MehrU23 Assembler Workshop
Ike e.v. http://koeln.ccc.de 2016-11-05 Überblick 1 CPU, Assembler Überblick x86 x86 Assembler 2 RAM, Stack, Calling Conventions Stack Calling Conventions Stackframes 3 Branches Jumps 4 Speicher, C-Interface
MehrU23 Assembler Workshop
Ike e.v. http://koeln.ccc.de 2016-11-05 Überblick 1 CPU, Assembler Überblick x86 x86 Assembler 2 RAM, Stack, Calling Conventions Stack Calling Conventions Stackframes 3 Branches Jumps 4 Speicher, C-Interface
MehrBetriebssysteme Teil 3: Laufzeitsystem für Programme
Betriebssysteme Teil 3: Laufzeitsystem für Programme 23.10.15 1 Literatur [3-1] Stack: http://fbim.fh-regensburg.de/~hab39652/pg1/skriptum/ ausdruecke/maschinenmodell.html [3-2] https://de.wikipedia.org/wiki/dynamischer_speicher
MehrRechnern netze und Organisatio on
Rechnernetze und Organisation Subroutines 1 Übersicht Motivation Bibliotheken Call und Return Stack Parameterübergabe Lokale Variablen Shared Libraries Interrupts und Exceptions 2 Reusability von Code
MehrTechnische Informatik I Übung 3: Assembler
Technische Informatik I Übung 3: Assembler Roman Trüb Computer Engineering Group, ETH Zürich 1 Lernziele Übung 3 Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Assembler Codeanalyse Aufgabe 2
MehrAssembler Integer-Arithmetik
Assembler Integer-Arithmetik Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Integer-Arithmetik 1/23 2008-04-01 Arithmetik
MehrGrundlagen zur Assemblerprogrammierung unter SPIM im Sommersemester Lorenz Schauer Mobile & Verteilte Systeme
Grundlagen zur Assemblerprogrammierung unter SPIM im Sommersemester 2016 Lorenz Schauer Mobile & Verteilte Systeme 12. Juli 2016 Agenda heute Grundlagen: Unterprogramme I Call-by-Value (CBV) vs. Call-by-Reference
MehrKarlsruher Institut für Technologie
Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt
MehrJust-In-Time-Compiler (2)
Just-In-Time-Compiler (2) Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2011/2012 Just-In-Time-Compiler (2) 1/13 2011-09-12 Just-In-Time-Compiler
MehrKodieren von Anweisungen im Binärformat für Maschinen quasi natürlich, zumindest effizient. Für Menschen hingegen ist Binärformat schwierig
2.1 Einleitung Kodieren von Anweisungen im Binärformat für Maschinen quasi natürlich, zumindest effizient Hinsichtlich Zuverlässigkeit (digital vorteilhafter als analog) Für Menschen hingegen ist Binärformat
MehrJust-In-Time-Compiler (2)
Just-In-Time-Compiler (2) Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015/2016 V. Sieh Just-In-Time-Compiler
MehrSystemaufrufe. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011
Systemaufrufe Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Systemaufrufe 1/17 2010-09-13 Motivation Am Beispiel
Mehr7 Laufzeit-Speicherverwaltung
7.1 Grundlagen Bevor wir die Code-Generierung betrachten, müssen wir uns Gedanken über zur Laufzeit des zu generierenden Programms notwendige Aktivitäten zur Zuordnung und Freigabe von Speicherplatz machen.
MehrExploit-Entwicklung mit Python
Penetration Testing III Bachelor in Computer Science (BCS) 6. Semester Exploit-Entwicklung mit Python von Daniel Baier und Demian Rosenkranz 1 / 20 Gliederung Grundlagen Sicherheitslücken Prozess- und
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
Mehrx86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013
x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle
MehrRechnernetze und -Organisation. Teil B 2012 Tomislav Nad Karl C. Posch
Rechnernetze und -Organisation Teil B 2012 Tomislav Nad Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/ 1 Two different assemblers GNU Assembler as : Uses
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrRechnernetze und -Organisation. Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch
Rechnernetz R Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/ 1 Zeitplan für Teil B Mittwoch 23. März 2011 Mittwoch
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrVorlesung Rechnerarchitektur
Vorlesung Rechnerarchitektur Sommersemester 2017 Carsten Hahn 8. Juni 2017 Agenda Grundlagen: Wiederholung Kontroll-Strukturen Stack-Speicher Unterprogramme I Unterprogramme II Call-by-Value (CBV) vs.
MehrÜbung zu Betriebssysteme
Übung zu Betriebssysteme Threadumschaltung 6. & 8. Dezember 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte Systeme
MehrEinführung in die Systemprogrammierung
Einführung in die Systemprogrammierung Die Programmiersprache C Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 14. Mai 2015 Hallo, Welt! main() { printf("hallo, Welt!\n"); } main:
MehrFunktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen
Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden
MehrRechnerne etze und -O Organisatio on
Rechnernetze und -Organisation Rechnerne etze und -O Organisatio on Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/
MehrMikrocomputertechnik. Unterprogramm
Unterprogramm Ein Teilproblem wird entweder zur mehrmaligen Verwendung oder zur Programmstrukturierung als Unterprogramm codiert. Ein Unterprogramm wird von einem übergeordneten Programm (Hauptprogramm)
Mehr"Organisation und Technologie von Rechensystemen 4"
Klausur OTRS-4, 29.09.2004 Seite 1 (12) INSTITUT FÜR INFORMATIK Lehrstuhl für Rechnerarchitektur (Informatik 3) Universität Erlangen-Nürnberg Martensstr. 3, 91058 Erlangen 29.09.2004 Klausur zu "Organisation
MehrUnterprogramme. Unterprogramme
Unterprogramme Unterprogramme wichtiges Hilfsmittel für mehrfach benötigte Programmabschnitte spielen in höheren Programmiersprachen eine wesentliche Rolle in Assembler sind bestimmte Konventionen nötig
MehrU23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides
Twix e.v. http://koeln.ccc.de 2016-11-28 Überblick 1 Motivation Was ist Shellcode? Beispiel 2 Einstieg Erzeugen, Testen von Shellcode 3 Der erste Shellcode Strings in Shellcode 4 Nullbytes, NOP Slides
MehrBetriebssystembau (BSB)
Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-.de/de/teaching/ws2013/bsb/ Olaf Spinczyk olaf.spinczyk@tu-.de http://ess.cs.tu-.de/~os AG Eingebettete System Informatik 12, TU Dortmund Agenda Aufgabe
MehrTechnische Informatik I - HS 18
Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik I - HS 18 Musterlösung zu Übung 3 Datum : 25.-26. Oktober 2018 Aufgabe 1: Wurzelverfahren nach Heron Das
MehrComputersysteme. Stacks Anwendung in der Assembler-Programmierung
Computersysteme Stacks Anwendung in der Assembler-Programmierung 1 Unterprogramme Betrachten wir zunächst folgendes Programm m_mod_n : /Berechne m modulo n für positive Integerwerte m und n. /Beim Programmstart
MehrTechnische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015
Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse
MehrInformatik I (D-ITET)
//009 Informatik I (D-ITET) Übungsstunde 8, 6..009 simonmayer@student.ethz.ch ETH Zürich Besprechung/Vertiefung der Vorlesung [..009] ArrayStack Ausgezeichnet Einige haben s etwas kompliziert gemacht clear()
MehrAssembler Kontrollstrukturen
Assembler Kontrollstrukturen Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Kontrollstrukturen 1/21 2008-04-03 Kontrollstrukturen
MehrHinweise C-Programmierung
Hinweise C-Programmierung Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2016/2017 V. Sieh Hinweise C-Programmierung
MehrJava Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017
Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java
MehrInformatik II SS Inhalt. Objektlebensdauer (2/3) Objektlebensdauer (1/3)
Inhalt Informatik II SS 2004 Teil 6: Sprachen, Compiler und Theorie 5 Lebensdauer von Objekten Speichermanagement Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrBetriebssystembau (BSB)
Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-dortmund.de/de/teaching/ws2015/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik
MehrMaschinensprache. 2.5 x86 Speicherzugriff. Universität Mannheim
Maschinensprache 2.5 x86 Speicherzugriff Hauptspeicher Speicheraufbau Linearer, zusammenhängender Adressraum Kleinste adressierbare Einheit: 1 Byte Unterteilung in physikalischen, linearen und virtuellen
MehrVorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrÜbungsblatt 10 (Block C 2) (16 Punkte)
georg.von-der-brueggen [ ] tu-dortmund.de ulrich.gabor [ ] tu-dortmund.de pascal.libuschewski [ ] tu-dortmund.de Übung zur Vorlesung Rechnerstrukturen Wintersemester 2016 Übungsblatt 10 (Block C 2) (16
MehrBetriebssystembau (BSB)
Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-dortmund.de/de/teaching/ws2012/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik
MehrDatenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures
Vorbesprechung U8 Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures Basistypen Alignment der Basistypen auf deren Grösse Grössen (abhängig
MehrERA-Zentralübung Maschinenprogrammierung
ERA-Zentralübung Maschinenprogrammierung M. Meyer LRR TU München 27.10.2017 Arithmetik mit 80386 Inhalt Rechenmodell Register Befehle Beispiele 80386-Rechenmodell Typisches Zwei-Address-Format Ziel :=
MehrComputer-Systeme Teil 11: Routinen
Computer-Systeme Teil 11: Routinen Computer-Systeme WS 12/13 - Teil 11/Routinen 03.12.2012 1 Übersicht Stack Subroutinen Makros CPU-Modi Traps Computer-Systeme WS 12/13 - Teil 11/Routinen 2 Die einzelnen
MehrSystemnahe Programmierung in C (SPiC)
Systemnahe Programmierung in C (SPiC) 9 Funktionen Jürgen Kleinöder, Daniel Lohmann, Volkmar Sieh Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg
MehrInteger Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen
1 C-Schlüsselwörter Schlüsselwörter sind in allen Programmiersprachen reservierte Wörter. In C sind auch alle Namen _[A-Z]... und... reserviert, auch _... bereichsweise. Weiterhin durch die Standard-
MehrGrundlagen der Informatik III Wintersemester 2010/2011
Grundlagen der Informatik III Wintersemester 2010/2011 Wolfgang Heenes, Patrik Schmittat 2. Aufgabenblatt mit Lösungsvorschlag 08.11.2010 Hinweis: Der Schnelltest und die Aufgaben sollen in den Übungsgruppen
MehrMethoden und Funktionen
Programmieren mit Java Modul 4 Methoden und Funktionen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Methoden 3 2.1 Methoden ohne Rückgabewert (Prozeduren)................ 3 2.2 Methoden mit Rückgabewert
MehrBetriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund
Betriebssystembau 7. Übung Michael Engel Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund michael.engel@tu-dortmund.de http://ess.cs.uni-dortmund.de/~me/ 1 Agenda Coroutinen
MehrEinleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn
C: Funktionen Philip Gawehn Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Do., 22.05.2014 1 / 23 Gliederung
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrProgrammierung mit C Funktionen
Programmierung mit C Funktionen Funktionen... sind Unterprogramme (Subroutinen), mit denen Sie Teilprobleme einer größeren Aufgabe lösen können.... fassen Anweisungen zu einem Block zusammen, der eine
MehrÜbung 1 - Betriebssysteme I
Prof. Dr. Th. Letschert FB MNI 13. März 2002 Aufgabe 0: Basiswissen Rechnerarchitektur: Übung 1 - Betriebssysteme I Aus welchen Komponenten besteht ein Rechner mit Von-Neumann Architektur? Was sind Bits
MehrEinführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009
Einführung Übungen zur Vorlesung Virtuelle Maschinen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SoSe 2009 Übungsaufgaben 1 Entwickeln
MehrVorkurs Informatik WiSe 17/18
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann
MehrAssembler-Programmierung
Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung
Mehreinlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
MehrUnterprogramme. AnPr. Wiederholungen im Code werden vermieden. Programme werden leichter lesbar. Die Entwicklung und der Test werden vereinfacht.
Name Klasse Datum 1 Allgemeines Programme werden üblicherweise nicht als ein einziger, fortlaufender Programmcode verfasst, sondern mit geeigneten Mitteln unterteilt und somit strukturiert. Die Methodik
MehrTechnische Informatik II Rechnerarchitektur
Technische Informatik II Rechnerarchitektur 3.Unterprogramme in MMIX Matthias Dräger E-Mail: www: mdraeger@mi.fu-berlin.de www.matthias-draeger.info/lehre/sose2010ti2/ tinyurl.com/sose2010ti2 Zuletzt bearbeitet:
MehrÜbung zu Betriebssysteme
Übung zu Betriebssysteme Threadumschaltung 7. & 10. Dezember 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte
MehrÜbungsblatt 10 (Block C 2) (16 Punkte)
georg.von-der-brueggen [ ] tu-dortmund.de ulrich.gabor [ ] tu-dortmund.de marco.duerr [ ] tu-dortmund.de Übung zur Vorlesung Rechnerstrukturen Wintersemester 2018 Übungsblatt 10 (Block C 2) (16 Punkte)
MehrBibliotheks-basierte Virtualisierung
Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015/2016 V. Sieh Bibliotheks-basierte Virtualisierung (WS15/16)
MehrCS1005 Objektorientierte Programmierung
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Funktionen / statische Methoden - Definition - Verwendung - Ausführung Seite 1 Th Letschert Funktionen: Definition und Verwendung
MehrRechnerstrukturen Wintersemester 2002/03. Maschinensprache Opcode, Operanden, Adressierung Für Menschen schwer verdauliche Folgen von 0 und 1
(c) Peter Sturm, Universität Trier 1 Rechnerstrukturen 8. Assembler Für Hartgesottene Maschinensprache Opcode, Operanden, Adressierung Für Menschen schwer verdauliche Folgen von 0 und 1 Assembler Symbolische
MehrInformatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 8, 22.4.2009 simonmayer@student.ethz.ch ETH Zürich Aufgabe 1: Pointer & Structs Schauen wir s uns an! Aufgabe 2: Grossteils gut gemacht! Dynamische Arrays! Sortieren:
MehrERA-Zentralübung Maschinenprogrammierung
Marcel Meyer LRR TU München 04.11.2016 Inhalt Aufgabe 1.1 Aufgabe 1.2 Speicherzugriffe Unbedingte Sprünge Stapelspeicher Unterprogramme Aufgabe 1.1 Quellregister AX, BX, CX Konstante deklarieren Werte
MehrProgrammiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 1: Von der Maschinensprache zu C Prof. Dr. Maschinensprache: MIPS R2000 Was bewirkt folgendes Programm: 00100111101111011111111111100000 10101111101111110000000000010100
MehrInstitut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.
Kontrollstrukturen Informatik II SS 2004 Teil 4: Assembler Programmierung Sprünge (bedingte und unbedingte) If-then-else, Case Loop (n Durchläufe) While (Abbruchbedingung) Institut für Informatik Prof.
MehrC# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services
C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften
MehrSpeicherklassen (1) Lokale Variablen
Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrVorkurs Informatik WiSe 16/17
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,
MehrFAKULTÄT FÜR INFORMATIK
FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN Lehrstuhl für Rechnertechnik und Rechnerorganisation Prof. Dr. Arndt Bode Einführung in die Rechnerarchitektur Wintersemester 2016/2017 Zentralübung
MehrHerzlich willkommen!
Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in
Mehr6. Unterprogramme 6-1
6. Unterprogramme 6.1 Prozeduren und Funktionen 6.2 Deklaration und Aufruf 6.3 Call-by-Value / Call-by-Reference 6.4 Standardfunktionen in C 6.5 Gültigkeitsbereich von Namen 6.6 Rekursion 6. Unterprogramme
MehrEinleitung Funktionsaufrufe Berechnungen Verzweigungen Systemaufrufe Speicherzugriffe Fazit Quellen. Laufzeitkosten in C.
Laufzeitkosten in C Tobias Fechner Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 19-12-2013 Tobias Fechner
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
MehrVorlesung Programmieren
Vorlesung Programmieren 17 Vom Programm zur Maschine Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),
Mehr