AssembleIt.au3

  • Hey Leute

    ich hab hier https://autoit.de/index.php?page…adID=26107& heute etwas über Assembler gelesen und mal schnell gegooglet. Das was ich verstanden habe ist, dass es auch eine Art Programmiersprache ist, aber schneller als AutoIt.

    Hab mir auch schon die AssembleIt.au3 geholt, werde aber aus den Beispielen nicht ganz schlau.

    Kann man damit jetzt nur eigene Funktionen aufrufen oder auch andere.

    Die Parameterbeschreibung kapier ich auch nicht ?(

    Ist das überhaupt wichtig oder mir einfach zu hoch?

    Ich hoffe ihr könnt mir helfen ;)

    DFPWare

  • Hi,
    Assembler ist die Sprache des Prozessors. Daher ist das auch ziemlich schwer weil man jeden noch so kleinen Schritt selber denken muss. Man hat mit Assembler die volle Kontrolle über die gesamte Hardware des Rechners.
    Mann kann Assembler als EXE nutzen oder im Programm selber (inline Assembler).
    Für den Anfang würde ich mit Inline AsM anfangen weil es einfach leichter ist und weniger Frusterzeugend^^.


    Das Tutorial von Andy ist schon sehr einfach geschrieben, aber mann muss sich beim lesen konzentrieren. (Eine Menge selbststudium gehört aber auch dazu ;) )
    AssembleIt kannst du als eine Hilfe beim Assembler Programmieren sehen. Der Assemblercode steht in AutoIt Funktionen die wiederrum FASMAdd (oder _) aufrufen( fügt eine Codezeile hinzu)
    _ ist nur ein Pseudonym von FasmAdd. (Wurde von mir aus reiner Faulheit erfunden :D Wer will schon immer FASMAdd schreiben ;) )

    So hier habe ich noch ein Beispiel für so eine AutoIt - Assembler Funktion

    Spoiler anzeigen
    [autoit]

    Func Test()
    _("use32")
    _("mov eax,10")
    _("add eax,1")
    _("ret")
    EndFunc ;==>Test

    [/autoit]


    Nicht erschrecken :D Es sieht nur kompliziert aus :P

    Aufrufen würde mann dann das so: _AssembleIt("int","Test"))
    AssembleIt führt dann den Assembler Code aus und mann erhält als Rückgabewert 11.

  • Hi DFPWare,
    Ja ist sie ;). EAX ist ein Speicherregister. Das ist wenn du so willst eine Variable.

    //Edit: Was ich noch vergaß zu sagen: Der Frustfaktor wird noch verstärkt durch die wenigen Debugmöglichkeiten. Zumindest Offiziell gibt es noch keinen Inline FASM Debugger. Inoffiziell schon :P, der wird auch bald Releast.
    Wenn man denn etwas erleuchteter :D in Sachen Assembler ist sollte mann sich mit den Bit's und Bytes beschäftigen die eine große Rolle einnehmen.

  • Hi,
    die Assemblersprache ist einfach gesagt die Maschinensprache, die dein Prozessor direkt verarbeiten kann.
    Der Assembler transferiert das Programm in die berühmten Nullen und Einsen, die der Prozessor verarbeitet.
    Dabei werden die Prozessorregister gelesen und geschrieben, genauso wie jedes einzelne Bit im Speicher oder einem Laufwerk.

    Einen Assembler (guck mal nach, wie das aus Englisch übersetzt wird) nennt man auch das Programm, dass diese Maschinensprache in lauffähige Programme umsetzt.

    Ein Compiler dagegen übersetzt aus einer Hochsprache (egal welche) in lauffähigen Code, in dem er das ganze Programm Zuhilfenahme der Assemblerbefehle in Maschinencode übersetzt.
    Interpreter (so wie AutoIt) übersetzen die Hochsprachenbefehle (Scripte) Befehl für Befehl nacheinander in die entsprechenden Maschinencodes, die dann vom Prozessor ausgeführt werden. Das so übersetzte Programm läuft idR wesentlich langsamer als ein von einem Compiler (oder assembler) übersetztes Programm.

    Mit Assembler bist du am dichtesten am Prozessor dran, ein Assembler übersetzt 1:1 genau das, was du programmierst, in Prozessorbefehle. Ein Bit eines Registers oder Flags falsch gesetzt, zack, Ausnahmefehler. Im heute verwendeten protected mode gibts da glücklicherweise eine Fehlermeldung, früher war ein Hardreset angesagt.
    Heutzutage gibt es nur noch sehr wenige Anwendungsfälle für diese Art der Programmierung, wobei Spezialisten immer noch gesucht werden. Die Compiler sind mittlerweile in der Lage, sehr schnellen Code zu generieren. Wenn allerdings sehr kompakter Code erstellt, oder das letzte an Geschwindigkeit aus einem Programm rausgekitzelt werden muss, bietet sich Assembler an.

    AutoIt ist ein Interpreter, generiert also im Vergleich zu einem Compiler eher langsame Programme (was man auch nur in bestimmten Bereichen überhaupt bemerkt!). Muss man aber, z.B. für Bildbearbeitung oder komplexe mathematische Berechnungen, sehr schnellen Code erzeugen, bietet sich ein Weg an, Assemblerbefehle 8und damit extrem schnelle Programme) in AutoIt einzubinden.
    Ein Tool dazu ist AssembleIt.
    Es ermöglicht die Verwendung von x86-Assemblercode innerhalb von AutoItscripten!
    Das heisst konkret, das "normale" Script wird vom Interpreter abgearbeitet, bis die AssembleIt()-Funktion erreicht wird. AssembleIt schreibt die vom FASM-Assembler assemblierten Maschinenbefehle aus dem Script in den Speicher, wo sie dann direkt vom Prozessor ausgeführt werden können. Das führt in bestimmten Bereichen zu Geschwindigkeitsverbesserungen um den Faktor 1000, also tausendmal schneller als der gleichwertige AutoIt-Code. Das ist auch der einzige Grund (und ein bissl Wehmut bzgl der "guten alten Zeiten") warum ich (eigentlich just for Fun) Assembler einsetze.


    Assembler ist eine eigene "Sprache", da sie sehr einfach aufgebaut ist, auch nicht weiter schwer. Mit ca. 20 Maschinenbefehlen wird sicherlich 90% der heute compilierten Software auskommen. Durch die Verwendung von Macros,Libraries und div. Schleifenkonstrukten ist auch sehr schnelle Entwicklung möglich, da unterscheidet sich Assembler imho nicht mehr viel von einer Hochsprache (mal von den esoterischen Sprachen abgesehen oder Sprachen die auf Software aufsetzen wie z.B Javascript, php usw)

  • Das "ASM-Tut" ist von mir nicht für Anfänger geschrieben worden sondern richtet sich an Anwender, die wissen wollen, wie man den Assembler in AutoIt integrieren kann.

    Allerdings sind in den ersten Absätzen Artikel und auch sehr gute Tut´s verlinkt, die auch Anfänger ansprechen....
    AssembleIt ist imho schon eine Vereinfachung, zzt. ist ein Debugger bei einigen hier im Forum in der Testphase, der es erlaubt, zur Laufzeit der Assemblerprogramme auf Prozessorregister, Flags, Speicher usw. zuzugreifen

  • jo habs mir schon angeguckt ;)

    ist dieser protected mode immer an?

    hab keine Lust dass mir der PC abschmiert beim rumprobieren :rofl:

    Dann werd ich mich da mal drum kümmern wenn ich mal wieder Langeweile hab:D

    kann man Assembler auch anders als in AutoIt programmieren, also in nem eigenen Programm (sowas wie Visual C++ für C++)

    Danke nochmal besonders an Andy für den vielen Text ;)


    //EDIT: hab schon das hier gefunden: http://flatassembler.net/

  • Zitat

    kann man Assembler auch anders als in AutoIt programmieren, also in nem eigenen Programm (sowas wie Visual C++ für C++)

    Ja, entweder der FASM oder auch MASM, der ist sogar völlig in die Visual-Umgebung zu integrieren, schau mal im MASM-Forum!
    Relativ einfach ist es auch, wenn man c++ kann, den Assemblercode zu "inlinen". Da fährt man dann nicht mit Rollschuhen spazieren sondern fügt zeilenweise Assemblerbefehle in den c++-code ein^^

    Eins noch, der in AutoIt integrierte Assembler ist bei weitem nicht so Leistungsfähig wie der "echte" FASM. Der kann Macros verwenden, Libs einbinden, DLL´s erstellen, hat eine eigene IDE (*hust*) simpelste Zugriffe auf die Windows-API uswusf...