Seite 2 von 5

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 14:37
von melow
Super. Einwandfrei alles. Danke.

Und

Code: Alles auswählen

PokeA(*pointer + 1 , Ascii.a + 33)
in ASM?

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 15:55
von STARGÅTE

Code: Alles auswählen

!MOV al, [v_ascii]
!ADD al, 33
!MOV ecx, [p_pointer]
!MOV [ecx+1], al
Dafür gibt es den Befehl ADD, mit dem du zB den Regsiter AL um eine Zahl (oder anderen Register) addieren kannst.

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 15:59
von melow
War Zeitgleich :-)
Habs grad in einer ASM Doku entnommen wie man addiert.
Genau:

Code: Alles auswählen

!ADD al, 33
oki... ich denk jetzt komm ich allein weiter mit dem Rest.
Danke nochmals an Alle.

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 16:27
von STARGÅTE
Ich weiß zwar nicht, wohin der ganze Code laufen soll, aber allgemein sollte noch folgendes gesagt werden:

Für die CPU ist es einfacher und schneller, wenn sie in "vollständigen Worten" arbeitet, also immer 4Byte/8Byte je nach Prozessor.
Denn bei jedem kürzeren Register AL/AH oder AX muss halt eine Art Maske erstellt werden, weil ja nicht der ganze Register EAX gefüllt werden soll/darf.
U.U. kann es also schneller sein, wenn du immer mit EAX usw. arbeitest, und ggf. selbst mit AND, und Shift-Befehlen deine Werte zurecht rückst.

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 17:37
von melow
Danke für den Hinweis mit den 4 bzw. 8bytes und der Performance.
In meinen Fall gings vorrangig darum Binär Daten zwischen 500kb und 3-4MB nach ASCII85 zu enkodieren (ist ähnlich wie die base64 Kodierung, nur halt mit eben 85 ASCII Zeichen)... und da bracuhte meine Routine, für 1MB, satte 9 Sekunden...

Kann ich niemanden zumuten... und es waren vorrangig meine Peek und Poke Befehle die das so verlangsamten.
Evntl. hätte man, wie Dein Zeigerbeispiel, in PB selbst da noch was rausholen können. Denke ja.

Aber die Inline ASM Sache hat mir dann doch irgendwie besser gefallen... Einfach Super schnell.

Aktuell konnte ich mehr optimieren und für 1MB brauchts jetzt grad nur noch 0,2 Sekunden... und wenn ich fitter in ASM wäre würd ich die gesamte ASCII85 Routine in ASM schreiben dann würds sehr wahrscheinlich noch weiter runter gehen...

Aber mit den 0,2 sek. pro MB bin ich schon sehr sehr zufrieden... Das ist absolut OK für meinen Programm. Aber 10 Sekunden, oder noch länger, wollt ich halt niemanden warten lassen... das ist nervig sonst.

Mehr Optimierung würd ich nur noch machen um meine ASM Kenntnisse (die quasi gleich null sind :-) ... ok... nun 0,01 :-) ) aufzupeppeln.


lg Melow :-)

[Edit: Achso ja: Der Code muss nur auf Windows/Linux 32 oder 64bit laufen. Mit den Compilerweiche und dem ASM Code klappt das auch super.]

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 17:46
von melow
Vieleicht noch eins... kriegs einfach (noch) nicht hin:

n.q = n.q / 85

in ASM?
:roll:

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 18:08
von NicTheQuick
Kannst du mir mal zeigen wie dein Code bisher aussieht?

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 18:14
von melow
Jo. Ich schnitz aber vorher noch bischen daran. Sobald Fertig post ich ihn. lg Melow :-)

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 23:16
von Thorium
melow hat geschrieben:Vieleicht noch eins... kriegs einfach (noch) nicht hin:

n.q = n.q / 85

in ASM?
:roll:
Les dich erstmal ordentlich in Assembler ein. Einiges wird dann klar werden. Bevor du weitere Fragen zu Asm stellst, solltest du nachlesen welche Register es gibt, wofür die einzelnen da sind, insbesondere das Statusregister, was der Stack ist und wie man auf den Speicher zugreift (Addressierung).

Einige Links findest du im englischen Forum: http://www.purebasic.fr/english/viewforum.php?f=35

Ansonsten kann ich dir dieses günstige Buch empfehlen: Assembler, maschinennahes programmieren
Damit hab ichs gelernt. Enthält viel alten 16Bit Kram, den man heute nicht mehr braucht aber die ganzen Basics werden gut vermittelt.

Re: Optimiert(est)er peek für einen unsigned long 32bit

Verfasst: 02.09.2013 23:18
von Regenduft
@melow: Kleiner Lektüre-Tipp (auch als kostenloser Download, allerdings nur auf englisch), falls Du irgendwann richtig in Assembler einsteigen willst: The Art of Assembly Language

EDIT: @Thorium: Gute Links! :allright: