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

Für allgemeine Fragen zur Programmierung mit PureBasic.
melow
Beiträge: 32
Registriert: 04.02.2006 05:05
Wohnort: Thailand

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

Beitrag von melow »

Super. Einwandfrei alles. Danke.

Und

Code: Alles auswählen

PokeA(*pointer + 1 , Ascii.a + 33)
in ASM?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
melow
Beiträge: 32
Registriert: 04.02.2006 05:05
Wohnort: Thailand

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

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
melow
Beiträge: 32
Registriert: 04.02.2006 05:05
Wohnort: Thailand

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

Beitrag 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.]
melow
Beiträge: 32
Registriert: 04.02.2006 05:05
Wohnort: Thailand

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

Beitrag von melow »

Vieleicht noch eins... kriegs einfach (noch) nicht hin:

n.q = n.q / 85

in ASM?
:roll:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

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

Beitrag von NicTheQuick »

Kannst du mir mal zeigen wie dein Code bisher aussieht?
melow
Beiträge: 32
Registriert: 04.02.2006 05:05
Wohnort: Thailand

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

Beitrag von melow »

Jo. Ich schnitz aber vorher noch bischen daran. Sobald Fertig post ich ihn. lg Melow :-)
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

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

Beitrag 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.
Zuletzt geändert von Thorium am 02.09.2013 23:18, insgesamt 1-mal geändert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

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

Beitrag 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:
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten