Assembler: Für was/aktuell? Lernen wo, wie?



  • nachfeuer,
    was ist eigentlich aus deinem interaktiven Einstiegskurs geworden? Bin nämlich immer noch nicht erleuchte hinsichtlich des Begriffes „Multipass“ oder „Mutlipass-Register“!



  • mit weitergehender programmierung meinte ich beispielsweise gui-programmierung, wie sie in dem von mir genannten buch anhand von windows angerissen wird, oder auch hardwarenahe programmierung.

    meistermathematiker mußt du nicht sein, aber summen-, potenz-, bruch-, wurzel- und vektorrechnung sind schon ganz gut, und programme, die nach eingabe einer funktion die drei ableitungen, die stammfunktion und bei bedarf die steigung, die krümmung und das integral (was nach landläufiger ansicht schon meitermathematik ist) ausgeben, tragen sehr gut zur "hirnaktivierung" bei und werden immer gebraucht, sofern man nicht grad nen texteditor programmieren will. es besteht natürlich die möglichkeit, alles in klickibunti zu machen, aber dafür ist visual basic dann besser geeignet.



  • HansKlaus,
    dann zeig doch bitte mal schnell den Code, der Symbolisch integriert oder differenziert.
    Ist ja wirklich trivial - selbst mein uralt CAS-Taschenrechner findet, wie natürlich zu erwarten, die Stammfunktionen beliebiger Funktionen.



  • es geht doch nicht darum, irgendwelche rechenmaschinen neu zu erfinden, sondern darum, das programmieren zu lernen. für irgendwelche algorithmen machst du nachher copy & paste bzw wandelst den pseudo-code dann in assemblersprache, c, oder was auch immer, um, sofern du es denn schon aufwendig machen willst und nicht einfach irgendwelche funktionsbibliotheken verwendest. wenn du von null mit assembler anfangen willst, ist es in meinen augen das beste, erstmal nur zu wissen, was man machen muß, damit zeichenketten von der tastatur eingelesen werden und was man machen muß, damit irgendwelche zeichenketten auf dem bildschirm ausgegeben werden. dann kommt es dran, diese zeichenketten in zahlenwerte umzuwandeln und zahlenwerte in zeichenketten umzuwandeln. danach kommt dann die obengenannte mathematik dran und dann kann man schon behaupten, man könne die grundzüge von assembler.

    wenn einen diese dinge nicht interessieren, wäre visual basic mit sql einfach besser, da man damit supergeile programme bauen kann, ohne großartig das rad neu erfinden oder son bißchen unter die haube gucken zu müssen.



  • Was hat den bitte schon Assembler mit CASs zu tun? Genau - garnichts: so was frickelt man nicht in Assembler zusammen. Auch Ein- und Ausgabe sind nicht sonderlich erhellend, wenn man sich nicht mit der Spezifischen Hardware (datasheets und co.) auseinandersetzen will. Für Anfänger geht es Hauptsächlich darum den Umgang mit Pointer (direkt/indirekte Adressierung), Register, Flags und dem Stack zu erlernen. Die meisten fangen daher an, mit irgendwelchen Schleifenkonstrukten herum zu spielen, in denen irgendwas berechnet und/oder Ein- oder Ausgegeben wird. Um das zu bewerkstelligen, muss man kein CAS &co implementieren können!



  • Wenn man eher bei 0 anfängt, dann braucht man eine Art Aufbauenden roten Faden. Den gibt es aber in den Nachschlagebüchern
    http://www.amazon.de/Assembler-Maschinennahes-Programmieren-Anfang-Windows-Programmierung/dp/3499612240/
    und
    http://www.amazon.de/Assembler-Grundlagen-Programmierung-mitp-Professional/dp/3826614690/
    und
    http://www.amazon.de/Assembler-GE-PACKT-Ge-packt-Joachim-Rohde/dp/3826617568/

    Das erste hab ich, dass liest sich aber wie Mist (Muss man ertragen). Nach dem Inhaltsverzeichnis scheinen mir die letzten beiden Bücher Themen an zuschneiden, welche das erste Buch nicht tut (Falls falsch bitte korrigieren^^).

    Der größte Mist ist, warum zeigen die alle Beispiele unter DOS? WinAPI gehört ja da rein, aber DOS ist schon längst tot und dabei mit ner DOSBox parallel rumzuspielen ist ziemlich lästig (Finde ich jedenfalls).

    Gibt es eig. auch Bücher wo Assembler anhand von AT&T Syntax (Von mir aus auch Intel), glibc und mit gcc Tools gezeigt wird? glibc wäre auch ein guter DOS ersatz, da das auch für windoof portiert ist :D.

    Mfg HeavyMetalGeek.



  • Nur Masochisten quaelen sich heute noch mit Assembler rum. Lass das lieber die paar Spezialisten bei Grosskonzernen machen, die sich damit abgeben MUESSEN.

    Letztlich lernt man dabei doch fast nichts, da man das Grundprinzip in einer Stunde verstanden hat und sich dann nur noch mit Mikrodetails wie "Welches Bit muss in welchem Register stehen; In Welchem Register steht der Rueckgabewert" etc. rumplagt. Weder sehr erleuchtend noch spannend.



  • -Realist- schrieb:

    Nur Masochisten quaelen sich heute noch mit Assembler rum. Lass das lieber die paar Spezialisten bei Grosskonzernen machen, die sich damit abgeben MUESSEN.

    Letztlich lernt man dabei doch fast nichts, da man das Grundprinzip in einer Stunde verstanden hat und sich dann nur noch mit Mikrodetails wie "Welches Bit muss in welchem Register stehen; In Welchem Register steht der Rueckgabewert" etc. rumplagt. Weder sehr erleuchtend noch spannend.

    jo, wenn ich mir nur eine Stunde zum Assemblerlernen Zeit gelassen hätte, würde ich ganz genauso daherschreiben.

    @Headbängerheini:
    http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
    http://asm.sourceforge.net//resources.html



  • also ich habe jetzt nicht wirklich viel länger (naja vielleicht 3std) für assembler gebraucht. was wirklich zeit frißt, ist eben das "programmieren", sprich die algorithmen und deren umsetzung. ob man jetzt direkt mit assembler anfangen soll, weiß ich nicht, aber als man den computer entwickelt hat, gab es ja auch nur assembler und man war gezwungen, es zu lernen.
    ob jetzt "call schreibe_string" in assembler oder "puts()" in c benutzt, ist dabei mmn scheißegal.



  • HansKlaus schrieb:

    also ich habe jetzt nicht wirklich viel länger (naja vielleicht 3std) für assembler gebraucht. was wirklich zeit frißt, ist eben das "programmieren", sprich die algorithmen und deren umsetzung. ob man jetzt direkt mit assembler anfangen soll, weiß ich nicht, aber als man den computer entwickelt hat, gab es ja auch nur assembler und man war gezwungen, es zu lernen.
    ob jetzt "call schreibe_string" in assembler oder "puts()" in c benutzt, ist dabei mmn scheißegal.

    Stell Dir mal vor in einer Grossbank werden täglich - sagen wir 40 Millionen Datenbankzugriffe (und das ist eher sehr wenig) gemacht. Man kann sich dann recht leicht vorstellen, wie sich jeder unnötige Zyklus der CPU geradezu potenziert. Bei solchen Programmen, die einerseits "transaktionssicher" - andererseits bei jeder Transaktion aufgerufen werden, ist absolute Effizienz das erste Gebot. Man kann zwar mit gewissen Hochsprachen sehr effizient programmieren - C++ oder Java und sonst so überladenen Programmiersprachen haben dort aber nichts verloren...



  • Also ich hab zwar selber nix in dem Sektor zu tun aber ich hatte schon die ein oder andere Unterhaltung mit Jemandem der hat und ich kann dir versichern dass solche Bankensoftware nicht in Assembler geschrieben wird 😉



  • dot schrieb:

    Also ich hab zwar selber nix in dem Sektor zu tun aber ich hatte schon die ein oder andere Unterhaltung mit Jemandem der hat und ich kann dir versichern dass solche Bankensoftware nicht in Assembler geschrieben wird 😉

    Naja... hier zwei Links, einer zum Verständinis - der andere für einen Kurs 😉

    http://www.mainframes.com/assembler.htm
    http://www.com-software.de/index.php?id=359&L=0

    Ich mache jetzt ein wenig Werbung für die Konkurrenz - aber warum nicht.. :p



  • HansKlaus schrieb:

    also ich habe jetzt nicht wirklich viel länger (naja vielleicht 3std) für assembler gebraucht.

    Echt? Toll. Könntest du schnell mal aufzeigen, wie du das gemacht hast bzw. wie es funktioniert, innerhalb von 3 Stunden Assembler zu lernen - inklusive complexen Taschenrechnersimulator mit allem Pipapo erstellen. Hier schauen nämlich viele Einsteiger rein und wir könnten sie einfach auf dein elaboriertes Lernkonzept verweisen und hoffen, das die absurdesten Sprüche und dämlichsten Behauptungen hier im Asm-Forum etwas weniger werden.

    ( http://webster.cs.ucr.edu/AsmTools/HLA/HLADoc/HTMLDoc/WhatIsHLA.html )



  • nachtfeuer schrieb:

    Echt? Toll. Könntest du schnell mal aufzeigen, wie du das gemacht hast bzw. wie es funktioniert, innerhalb von 3 Stunden Assembler zu lernen - inklusive complexen Taschenrechnersimulator mit allem Pipapo erstellen.

    Gehört das dazu? Taschenrechner?

    Die 3 Stunden sind Angeberei, aber im Grunde stimmt das doch. Jeder sollte sich IMO die Grundzüge von Assembler aneignen, damit man die Maschine halbwegs versteht und Assembler lesen kann, und dann wieder was anderes machen!



  • Hostfreak schrieb:

    C++ oder Java und sonst so überladenen Programmiersprachen haben dort aber nichts verloren...

    Was ist an C++ so überladen bitte?
    Mit Java bin ich d'accord mit dir.



  • Aha...?...! schrieb:

    Was ist an C++ so überladen bitte?
    Mit Java bin ich d'accord mit dir.

    Ich begreife die Frage nicht richtig. Ich kann ne nette lustige Applikation in C++ mit QT oder GTK oder was auch immer schreiben - ich kann ne nette lustige Applikation in Java mit Swingklassen schreiben - wie auch immer. Das hat nichts mit zig Millionen Transaktionen zu tun. Jeder Bankautomat - jede Kassentransaktion - jede interne Buchng - das gesamte HR usw.
    Es geht um die Programmierung ganz unten.. also dort wo jede der erwähnten Transaktionen schlussendlich ankommen...
    Nun C++ - alleine schon, dass da ein Constructor und ein Destructor bei jeder Instanzierung erforderlich ist, ist ein "Overhead" - Viel zu viele Instruktionen, die gar nicht nötig wären.. Wer seine Daten im Griff hat und auch im Team benötigt keine Kapselung der Daten... Dieses Problem ist ein Problem aus der Unix und Windows Welt. Wenn globale Variable (Daten) gleich automatisch allen Beteiligten einer "Unit of Compile" unkonntrolliert zur verfügung steht, ist an diesem Konzept etwas falsch... - oder?? Ansonsten würde man doch OO gar nicht benötigen.



  • Hostfreak schrieb:

    Naja... hier zwei Links, einer zum Verständinis - der andere für einen Kurs 😉

    Sry aber ich kapier echt nicht was genau mir diese Links jetzt sagen sollen 😕
    Falls es dich beruhigt: Ich bin jetzt sicherlich kein Guru aber auch ganz sicher kein totaler Analphabet was Assembler angeht...

    Hostfrak schrieb:

    Nun C++ - alleine schon, dass da ein Constructor und ein Destructor bei jeder Instanzierung erforderlich ist, ist ein "Overhead" - Viel zu viele Instruktionen, die gar nicht nötig wären..

    Man sieht du hast dich ja sehr eingehend mit C++ und der Funktionsweise moderner Compiler auseinandergesetzt 😉

    Hostfrak schrieb:

    Wenn globale Variable (Daten) gleich automatisch allen Beteiligten einer "Unit of Compile" unkonntrolliert zur verfügung steht, ist an diesem Konzept etwas falsch... - oder?? Ansonsten würde man doch OO gar nicht benötigen.

    Man kann übrigens auch in ASM wunderbar OO programmieren, OOP hat nämlich nichts mit irgendwelchen Schlüsselwörtern konkreter sogenannter OO Sprachen zu tun (ich kann dir z.B. Tonnen von C++ Code zeigen der voll von class und frei von OOP ist 😉 ). Abgesehen davon ist OO natürlich kein Wundermittel aber deinen Satz da oben kapier ich nicht.

    Hostfrak schrieb:

    Das hat nichts mit zig Millionen Transaktionen zu tun. Jeder Bankautomat - jede Kassentransaktion - jede interne Buchng - das gesamte HR usw.

    Klar, das ist natürlich alles in Assembler gecodet, was sonst? Gerade wenn es ums Finanzsystem geht ist es doch essentiell absolute Kontrolle über die Hardware zu haben und Assembler hierfür geradezu prädestiniert, schließlich hat es sich ja gezeigt dass die stabilsten und sichersten Programme genau dann geschrieben werden wenn jede Zeile Code jede beliebige Speicherstelle verändern kann. Auch sind Assemblerprogramme so übersichtlich dass selbst komplexeste Zusammenhänge in derart riesigen Systemen sofort begreifbar sind. Die daraus resultierende extrem leichte Wartbarkeit kombiniert mit der hohen Portabilität des Code macht Assembler zum idealen Kandidaten für die Entwicklung solcher Software... 🙄

    Assembler hat seinen Platz aber dort seh ich ihn definitiv nicht...



  • dot schrieb:

    Sry aber ich kapier echt nicht was genau mir diese Links jetzt sagen sollen 😕
    Falls es dich beruhigt: Ich bin jetzt sicherlich kein Guru aber auch ganz sicher kein totaler Analphabet was Assembler angeht...

    Wir reden von zwei verschiedenen Welten: Ich rede von der z/OS Welt, Du meinst wohl die Unix, Linux, Windows Welt.
    Als ich mich vor ein paar Jahren an euere Welt eher hobbymässig angenähert habe, habe ich genauso mit dem Kopf geschüttelt und mich gefragt: "Was machen die denn da?"

    dot schrieb:

    Man sieht du hast dich ja sehr eingehend mit C++ und der Funktionsweise moderner Compiler auseinandergesetzt 😉

    Nein, das habe ich nicht, und das ist auch nicht mein Anliegen. Der TE hatte gefragt:

    Da ich leider nicht viel finde frag ich jetzt einfach mal hier drauf los. Und zwar überlege ich mir mich an asm heranzuwagen, doch da kommt ne Frage von mir. Nämlich ist das noch aktuell. Findest es nur noch vorwiegend in Hardware-programmierung Anwendung oder gibt es noch andere Anwendungsbereiche.

    Meine ursprüngliche Antwort bezog sich also darauf und ich wollte erläutern, dass optimaler Code im Systembereich von Grossrechnern, auf denen zig Millionen Transaktionen täglich laufen sehr wichtig sind. In der IBM Grossrechnerwelt (und nicht nur da) geht man sogar soweit, dass man etwa einen Compress nicht softwaremässig löst, sondern in der Hardware implementiert.
    http://www-01.ibm.com/software/data/db2imstools/imstools/ims-hardware-data-compression/
    Info was das ist:
    http://www.differencebetween.net/technology/difference-between-hardware-compression-and-software-compression/

    dot schrieb:

    Klar, das ist natürlich alles in Assembler gecodet, was sonst? Gerade wenn es ums Finanzsystem geht ist es doch essentiell absolute Kontrolle über die Hardware zu haben und Assembler hierfür geradezu prädestiniert,

    Assembler hat seinen Platz aber dort seh ich ihn definitiv nicht...

    In der Anwendungsentwicklng hat Assembler sicher nichts zu suchen. Aber wie gesagt ganz unten im System... Dort ist Assembler unentbehrlich. Und als alter Hardcore Assembler Programmierer kann ich dem TE nur empfehlen:
    Arbeite Dich in einen Prozessor ein - wenn man den mal richtig beherrscht, arbeitet man sich auch recht schnell in andere Prozessortypen ein.

    Das war eigentlich alles, was ich zu diesem Thema sagen wollte... 😉



  • Hostfreak schrieb:

    dot schrieb:

    Man sieht du hast dich ja sehr eingehend mit C++ und der Funktionsweise moderner Compiler auseinandergesetzt 😉

    Nein, das habe ich nicht, und das ist auch nicht mein Anliegen.

    Der Punkt ist: Wenn du das hättest dann wüsstest du dass moderne C++ Compiler extrem gut Optimieren und dass der Compiler z.B. Konstruktor/Destruktor-Aufrufe wegoptimieren wird wenn diese nicht, z.B. aufgrund irgendwelcher Seiteneffekte, unbedingt nötig sind. Und wenn du die Seiteneffekte brauchst dann hast du den äquivalenten Code auch in Assembler. Compiler sind natürlich nicht perfekt, aber ein moderner C++ Compiler verschwendet in der Regel garantiert nicht unnötig CPU Cycles. Und er ist dabei in der Regel besser als ein normaler Mensch, vorausgestzt der C++ Code ist entsprechend gut. Natürlich kann man in jeder Sprache beliebig schlechten und langsamen Code schreiben, das geht aber auch in Assembler 😉

    Aber ja, wenn es um maximale Performance geht dann ist es sicher von Vorteil wenn man Assembler (zumindest lesen) kann, Ahnung von der Hardware hat auf der man läuft und sich in den kritischen Bereichen auch mal anschaut was der Compiler so macht. Falls er da wirklich wo Performance liegen lässt dann wird das in den meisten Fällen an suboptimalem C++ Code liegen (der dem Compiler die Möglichkeit zur Optimierung verwehrt) und sich daher auch auf C++ Ebene beheben lassen. Assembler lesen und verstehen würde ich also als nach wie vor wichtigen Skill in einigen Bereichen ansehen. Wirklich Assembler programmieren dagegen eher kaum.

    Abgesehen davon muss aber natürlich irgendwer die Compiler und Optimizer ja auch bauen. Das sind die Orte wo Assembler seinen Platz hat und immer haben wird, keine Frage. Das betrifft aber auch nur ganz wenige Menschen.

    Hostfreak schrieb:

    Meine ursprüngliche Antwort bezog sich also darauf und ich wollte erläutern, dass optimaler Code im Systembereich von Grossrechnern, auf denen zig Millionen Transaktionen täglich laufen sehr wichtig sind.

    Da widerspreche ich nicht. Allerdings sollte auch in diesen Bereichen eine Sprache wie z.B. C++ mit einem vernünftigen Compiler in 99.9999% der Fälle mindestens ausreichende Performance bieten. Wenn dem nicht so wäre dann wären die Server von google oder WoW oder Facebook, oder ... wohl jedenfalls in Assembler geschrieben, was sie aber nicht sind 😉

    Hostfreak schrieb:

    Aber wie gesagt ganz unten im System... Dort ist Assembler unentbehrlich.

    Ja, aber selbst in einem OS Kernel braucht man nur sehr wenige Zeilen Assembler.



  • dot schrieb:

    Hostfreak schrieb:

    dot schrieb:

    Man sieht du hast dich ja sehr eingehend mit C++ und der Funktionsweise moderner Compiler auseinandergesetzt 😉

    Nein, das habe ich nicht, und das ist auch nicht mein Anliegen.

    Der Punkt ist: Wenn du das hättest dann wüsstest du dass moderne C++ Compiler extrem gut Optimieren und dass der Compiler z.B. Konstruktor/Destruktor-Aufrufe wegoptimieren wird wenn diese nicht, z.B. aufgrund irgendwelcher Seiteneffekte, unbedingt nötig sind.

    Ich wollte jetzt sowas nicht anfangen, aber naja warum nicht.....
    Hier ein OO Hallo Welt Programm:

    #include <iostream>	
    using namespace std;  
    
    class hello_world				// Die wunderbare Klasse
    {
    	char *hello_world_sample;
    public:
    	hello_world(void);			// mit zwei Methoden
    	char * get_hello_world(void);
    };
    
    hello_world::hello_world(void)
    {
    	hello_world_sample = "Hello world";
    	return;
    }
    char * hello_world::get_hello_world(void)
    {
    	return (hello_world_sample);
    }
    int main()
    {
    hello_world hello_world;
       cout <<  hello_world.get_hello_world() << "\n";
    return (0);
    }
    

    Da stellen sich mir schon die Nackenhaare
    Aber es kommt noch besser - hier der erzeugte Assemblercode mit g++ in Ubuntu 10.4:

    .file	"samp.cpp"
    	.local	_ZStL8__ioinit
    	.comm	_ZStL8__ioinit,1,1
    	.section	.rodata
    .LC0:
    	.string	"Hello world"
    	.text
    	.align 2
    .globl _ZN11hello_worldC2Ev
    	.type	_ZN11hello_worldC2Ev, @function
    _ZN11hello_worldC2Ev:
    .LFB958:
    	.cfi_startproc
    	.cfi_personality 0x0,__gxx_personality_v0
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	movl	%esp, %ebp
    	.cfi_offset 5, -8
    	.cfi_def_cfa_register 5
    	movl	8(%ebp), %eax
    	movl	$.LC0, (%eax)
    	popl	%ebp
    	ret
    	.cfi_endproc
    .LFE958:
    	.size	_ZN11hello_worldC2Ev, .-_ZN11hello_worldC2Ev
    	.align 2
    .globl _ZN11hello_worldC1Ev
    	.type	_ZN11hello_worldC1Ev, @function
    _ZN11hello_worldC1Ev:
    .LFB959:
    	.cfi_startproc
    	.cfi_personality 0x0,__gxx_personality_v0
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	movl	%esp, %ebp
    	.cfi_offset 5, -8
    	.cfi_def_cfa_register 5
    	movl	8(%ebp), %eax
    	movl	$.LC0, (%eax)
    	popl	%ebp
    	ret
    	.cfi_endproc
    .LFE959:
    	.size	_ZN11hello_worldC1Ev, .-_ZN11hello_worldC1Ev
    	.align 2
    .globl _ZN11hello_world15get_hello_worldEv
    	.type	_ZN11hello_world15get_hello_worldEv, @function
    _ZN11hello_world15get_hello_worldEv:
    .LFB960:
    	.cfi_startproc
    	.cfi_personality 0x0,__gxx_personality_v0
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	movl	%esp, %ebp
    	.cfi_offset 5, -8
    	.cfi_def_cfa_register 5
    	movl	8(%ebp), %eax
    	movl	(%eax), %eax
    	popl	%ebp
    	ret
    	.cfi_endproc
    .LFE960:
    	.size	_ZN11hello_world15get_hello_worldEv, .-_ZN11hello_world15get_hello_worldEv
    	.section	.rodata
    .LC1:
    	.string	"\n"
    	.text
    .globl main
    	.type	main, @function
    main:
    .LFB961:
    	.cfi_startproc
    	.cfi_personality 0x0,__gxx_personality_v0
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	movl	%esp, %ebp
    	.cfi_offset 5, -8
    	.cfi_def_cfa_register 5
    	andl	$-16, %esp
    	subl	$32, %esp
    	leal	28(%esp), %eax
    	movl	%eax, (%esp)
    	call	_ZN11hello_worldC1Ev
    	leal	28(%esp), %eax
    	movl	%eax, (%esp)
    	call	_ZN11hello_world15get_hello_worldEv
    	movl	%eax, 4(%esp)
    	movl	$_ZSt4cout, (%esp)
    	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
    	movl	$.LC1, 4(%esp)
    	movl	%eax, (%esp)
    	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
    	movl	$0, %eax
    	leave
    	ret
    	.cfi_endproc
    .LFE961:
    	.size	main, .-main
    	.type	_Z41__static_initialization_and_destruction_0ii, @function
    _Z41__static_initialization_and_destruction_0ii:
    .LFB965:
    	.cfi_startproc
    	.cfi_personality 0x0,__gxx_personality_v0
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	movl	%esp, %ebp
    	.cfi_offset 5, -8
    	.cfi_def_cfa_register 5
    	subl	$24, %esp
    	cmpl	$1, 8(%ebp)
    	jne	.L11
    	cmpl	$65535, 12(%ebp)
    	jne	.L11
    	movl	$_ZStL8__ioinit, (%esp)
    	call	_ZNSt8ios_base4InitC1Ev
    	movl	$_ZNSt8ios_base4InitD1Ev, %eax
    	movl	$__dso_handle, 8(%esp)
    	movl	$_ZStL8__ioinit, 4(%esp)
    	movl	%eax, (%esp)
    	call	__cxa_atexit
    .L11:
    	leave
    	ret
    	.cfi_endproc
    .LFE965:
    	.size	_Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
    	.type	_GLOBAL__I__ZN11hello_worldC2Ev, @function
    _GLOBAL__I__ZN11hello_worldC2Ev:
    .LFB966:
    	.cfi_startproc
    

    So und jetzt schauen wir ns das mal an wie man das in Assembler programmiert:

    .section .data
    hello: .ascii "Hello World!\n"
    .section .text
    .globl _start
    _start:
    mov $4, %eax
    mov $1, %ebx
    mov $hello, %ecx
    mov $13, %edx
    int $0x80
    mov $1, %eax
    mov $0, %ebx
    int $0x80
    

    Noch Fragen???


Anmelden zum Antworten