Assembler - was is das genau???



  • Heute macht Assembler für normale Entwicklungen praktisch keinen Sinn mehr. Die Compiler sind "schlauer" als es ein Ass-Progger sein kann. Ansonst ist Ass noch im Embeddedbereich zu Hause, wo man jedes KByte braucht. Und natürlich damals, als die Compiler nicht so gut waren, hat man viel in Ass programmiert.

    @Nobuo T! Widersprichst du dir da nicht selbst? Einerseits sollen Compiler besseren Code erzeugen, andererseits ist dieser viel zu groß? Das z.B. C-Programme so groß sind, liegt doch nicht am Compiler, sondern daran, das noch die Standard-Librarie (die sehr viele Funktionen hat) mit verlinkt wird. Der reine Code, den man selber tippt, ist doch nicht so groß



  • Um Qualtiaet des Codes mit dessen Groesse verknuepfen zu koennen, muesstest du zunaechst "Qualitaet" definieren.
    Von daher sehe ich in deinem Beispiel keinen Bezug auf meinen Beitrag und kann auch sonst keinen Widerspruch in selbigem entdecken. :p

    Wovon ich sprach, war, dass einige Compiler durchaus Code gut auf Geschwindigkeit optimieren koennen. Das bedeutet nicht zwangslaeufig, dass der Programmcode dadurch kleiner wird - das hat letztendlich teilweise sogar eher einen gegenteiligen Effekt.

    Artchi schrieb:

    Das z.B. C-Programme so groß sind, liegt doch nicht am Compiler, sondern daran, das noch die Standard-Librarie (die sehr viele Funktionen hat) mit verlinkt wird. Der reine Code, den man selber tippt, ist doch nicht so groß

    Fakt ist, diese Programme sind groesser als gleichwertige Assemblerprogramme.
    Woran das nun liegt tut bei dieser Diskussion nichts zur Sache.
    5Byte-Programme oder einen 512Byte Bootsektor wirst du mit C zB. nicht hinbekommen.



  • also werden beispielsweise master boot records in assembler geschrieben 😮
    und was noch? werden auch bestimmte teile von windows in assembler geschrieben?=



  • FlipStar schrieb:

    werden auch bestimmte teile von windows in assembler geschrieben?=

    Ja, Teile der Kernkomponenten, um den Prozessormodus zu wechseln usw. werden mit ziemlicher Sicherheit weitgehend in Assembler geschrieben worden sein.
    Ich stelle mal so die Behauptung in den Raum, das wird bei jedem ProtectedMode-System der Fall sein.

    Weitere Beispiele, die mir jetzt gerade so einfallen:
    Der Impulse Tracker wurde komplett in Assembler geschrieben.
    Weite Teile des Mixers des Modplug Trackers wurden in Inline-Assembler geschrieben.
    Ebenso wurde vieles beim VirtualDub in Asm gecoded...



  • Nobuo T schrieb:

    Weitere Beispiele, die mir jetzt gerade so einfallen:
    Der Impulse Tracker wurde komplett in Assembler geschrieben.
    Weite Teile des Mixers des Modplug Trackers wurden in Inline-Assembler geschrieben.
    Ebenso wurde vieles beim VirtualDub in Asm gecoded...

    Impulse Tracker - wäre heute total unsinnig, das in Asembler zu coden
    Modplug ebenso

    Wenn man's echt schnell haben will, soll man halt die SSE Intrinsics vom Compiler benutzen, aber nicht alles in Assembler schreiben.

    VirtualDub wäre wohl auch genausogut mit Intrinsics möglich.

    Das krankeste Assemblerprogramm ist aber wohl Prime95 (www.mersenne.org). Das ist echt gigantisch riesig.



  • Beispiel: Es gab mal ne DOS-Variante (hiess glaub ich PTS-DOS), die war komplett in Assembler geschrieben. Bot die gleichen Funktionen wie M$-DOS 6.0, aber:
    - Platz auf 1 Diskette
    - Brauchte viel weniger Speicher
    - War nachweislich schneller

    -> Nur noch Assember coden.. 🙂

    In der Hardwarenahen Programmierung spielt Assembler aber manchmal immernoch ne Rolle..



  • IMHO können zum beispiel graphikroutinen auch nur in asm geschrieben werden. (wenn kein OS zur verfügung steht) wie sollte man mit c++ einen befehl an die graphikkarte senden...



  • r++ schrieb:

    IMHO können zum beispiel graphikroutinen auch nur in asm geschrieben werden. (wenn kein OS zur verfügung steht) wie sollte man mit c++ einen befehl an die graphikkarte senden...

    Das geht ganz einfach. Du brauchst dazu nur eine einzige Funktion in Assembler schreiben: send_command_to_graphic_adapter().
    Diese Funktion macht nicht mehr als "out irgendwas" oder "int irgendwas".



  • das funktioniert über ports. und mit c kann man natürlich auch auf ports schreiben.



  • braucht man für die grafig programmierung nicht auch asm?z.b wenn ich mir eine eigene grafig lib wie allegro oder sdl schreiben will???



  • Assembler braucht man auf alle Fälle noch für Zeugs, was sich in der Hochsprache nicht ausdrücken läßt (z.B. SSE - Anweisungen u.a. Platformspezifische Befehle). Das sind dann aber meist winzige C-Funktionen, die inline-assembler enthalten.

    Vor 10 Jahren noch unumstrittenes "Hauptanwendungsgebiet" auf Hochsprachenfähigen Systemen - die "Handoptimierung" - macht heutzutage ein guter Compiler besser. Wenn es drauf ankommt, man muß zwar noch immer ein wenig Assembler "verstehen", um auch in C effektiven Code zu schreiben, aber das ist wesentlich leichter geworden.

    Die meiste Hardware-Ansteuerung läuft über in/out-Befehle bzw. hardware-gemappte Speicheradressen. Das läßt sich alles vom C aus machen.

    Auf Microcontrollern sieht das noch ein bißchen anders aus: die Compiler sind (noch) nicht so gut, und Speicher ist nicht so massig verfügbar. Da muß man häufiger zum Assembler greifen.



  • peterchen schrieb:

    Assembler braucht man auf alle Fälle noch für Zeugs, was sich in der Hochsprache nicht ausdrücken läßt (z.B. SSE - Anweisungen u.a. Platformspezifische Befehle). Das sind dann aber meist winzige C-Funktionen, die inline-assembler enthalten.

    Gute C/C++-Compiler generieren auch SSE/SSE2/3DNow!/etc-Befehle.



  • war ja nur ein Beispiel - es gibt ja meistens Prozessorfunktionalität die auch vom aktuellsten Compiler nicht / nicht vollständig abgedeckt wird.

    (und gerade bei den ganzen SIMD-Befehlen muß man wahrscheinlich seinen Code sowieso dahingehend sortieren, daß sie sinnvoll sind)



  • FlipStar schrieb:

    hallo,
    ich habe mal davon gehört,dass man programme auch direkt binär schreiben kann/könnte... dann kam immer wieder der name der programmiersprache "assemler" auf. ich weiss dass assembler programme plattform- und sogar hardwareabhängig sind...wo liegt dann der vorteil? schnelligkeit? (weil --> gegenteil von java und java = langsam 😉 )
    was schreibt man für programme in assembler?
    mfg FlipsTar

    seit wann ist ASS plattform und hardwareunabhängig? ASS ist dies eben nicht. Denn nimm mal Microcontroller, allein da gibts mega unterschiede ansetuerung der IO und ISR usw. oder code in ASS für den neuesten intel und den ältesten intel 😉 oder amd 64.



  • newkid schrieb:

    FlipStar schrieb:

    hallo,
    ich habe mal davon gehört,dass man programme auch direkt binär schreiben kann/könnte... dann kam immer wieder der name der programmiersprache "assemler" auf. ich weiss dass assembler programme plattform- und sogar hardwareabhängig sind...wo liegt dann der vorteil? schnelligkeit? (weil --> gegenteil von java und java = langsam 😉 )
    was schreibt man für programme in assembler?

    mfg FlipsTar

    seit wann ist ASS plattform und hardwareunabhängig? ASS ist dies eben nicht. Denn nimm mal Microcontroller, allein da gibts mega unterschiede ansetuerung der IO und ISR usw. oder code in ASS für den neuesten intel und den ältesten intel 😉 oder amd 64.

    💡



  • Assembler ist ist die schnellste Programmiersprache, wenn man es kann.
    Ein Compieler übersetzt jede Hochsprache in mehr oder weniger guten Objektcode.
    Der Objektcode besteht aus Hexdezimalen Zahlen die später im Ram als "Progamm"
    stehen.
    Dieser Objektcode entspricht, dem was ein Microcontroller aus seinem
    (Programmm) Ramspeicher liest "Ein Microcontroller funktioniert rein Hardware-
    mässig" d.h. er liest aus dem Ramspeicher einen Binärcode und dieser veranlasst
    die Harware Microcontroller zu einer Aktion).
    Eine Hochsprache wie C Compiliert ein Progamm in eine Binäre Sprache die der
    Microcontroller / Prozessor versteht.

    Mit Assembler übergehst du den Compieler und "sprichst" direkt mit dem
    Microcontroller/ Prozessor.

    Übrigens,
    ein Mocrocontroller hat seinen Programmspeicher innerhalb des Gehäuses, ein Microprozessor ausserhalb.

    Gruß
    Johann



  • Assembler ist ist die schnellste Programmiersprache, wenn man es kann.

    rofl 🤡



  • cd9000 schrieb:

    Gute C/C++-Compiler generieren auch SSE/SSE2/3DNow!/etc-Befehle.

    das wollte ich mal nachtesten. wohl prädestiniert dazu sind addierbefehle auf ganze arrays und ähnliches. da habe ich mit handgeschriebenen asm routinen, die mmx benutzen, temposteigerungen von teilweise mehr als faktor 4 gegenüber maximal optmiertem gcc (3.2) code erhalten.
    wenn der compiler etwas mit SIMD techniken optimieren sollte dann wohl sowas...

    hermes schrieb:

    Assembler ist ist die schnellste Programmiersprache, wenn man es kann.

    theoretisch schon, aber der aufwand, den man in der regel beitreiben müsste um besseren code als mit dem compiler zu erhalten, ist so gross, dass es sich garnicht lohnt. was hab ich denn davon mehrfach länger bei der entwicklung zu brauchen, wenn das programm nachher vielleicht 8% schneller läuft oder so...



  • hermes schrieb:

    Assembler ist ist die schnellste Programmiersprache, wenn man es kann.

    Nein, die schnellste ist Maschinensprache. 😃



  • Kurz gesagt ist Assembler die einzige Programmiersprache die der Prozessor versteht, also ohne Assembler keine anderen Programme.

    Ein Assemblerbefehl besteht ausschließlich aus 0 (Nullen) und 1 (Einsen) und wird "seriell" abgearbeitet, auch wenn es bei den heutigen Prozessorleistungen nicht mehr auffällt.

    Assembler ist eine der schlanksten Programmiersprachen, aber auch eine der kompliziertesten.


Anmelden zum Antworten