- Offizieller Beitrag
Zur Zeit bin ich ja gerade auf dem Assembler-Trip (Andy hat mit "assembleit2_64.au3" dafür eine tolle UDF abgeliefert).
Die Möglichkeit AutoIt mit Assembler-Funktionen zu beschleunigen, ist schon verlockend, aber man muss natürlich auch erstmal Erfahrungen sammeln.
Kleine Funktionen einfach mal in Assembler umzusetzen helfen dabei.
Und so ist dann eine Randomfunktion entstanden. Dabei habe ich bei einem Beispiel von Andy abgeguckt, aber ich hab's verstanden.
AutoIt
#AutoIt3Wrapper_UseX64=n ; 32Bit-Modus
#include "assembleit2_64.au3"
#Region ASM-Code
#cs random
Use32 ; 32Bit Modus!
mov ecx,[esp+4] ; erster Parameter = "von"
mov edi,[esp+8] ; zweiter Parameter = "bis"
cmp ecx,edi ; Ist "von" <= "bis"?
jbe @f ; Ja, dann ueberspringen
mov eax,0xffffffff ; ansonsten Fehlerwert laden
ret ; und zu AutoIt zurueck
@@:
inc edi ; edi++ (damit "bis" auch moeglich ist)
sub edi,ecx ; edi = "bis" minus "von" (= Bereich der Zufallszahlen)
rdtsc ; Time Stamp Counter (in EDX & EAX)
rcl eax,cl ; eax rotate left (Anzahl in CL)
mov edx,123433 ; Primzahl laden
mul edx ; eax damit multiplizieren
xor edx,edx ; edx = 0
div edi ; eax durch edi (Bereich) teilen (edx = Rest der Division)
add edx,ecx ; zu dem Rest der Division den "von"-Wert addieren (edx + ecx)
mov eax,edx ; edx nach eax kopieren
ret ; Funktion verlassen (eax = Rueckgabe an AutoIt)
#ce
#EndRegion ASM-Code
$ret = _AssembleIt2("dword", "random", "dword", 1, "dword", 49)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Alles anzeigen