frage bezüglich ASM

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: frage bezüglich ASM

Beitrag von ts-soft »

Kevin hat geschrieben:Vielen dank! scheint wirklich schneller zu sein ich dachte immer das Peek/Poke genau so schnell wäre.
Peek und Poke sind doch auch nur Funktionen / Prozeduren. Hier ist pointern immer von Vorteil, zumal sich daraus,
im Gegenteil zu Deinem ASM-Gefrickel, keine Nachteile ergeben. Peek und Poke ist nur Einsteigerfreundlicher und
mehr Basic Like, aber lohnt sich auch nicht immer. Man sollte auch mal an die Wartungsfreundlichkeit des Codes
denken, schließlich ist PureBasic eine Hochsprache, sonst könnte man ja gleich ASM nutzen :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: frage bezüglich ASM

Beitrag von Kevin »

ts-soft hat geschrieben:
Kevin hat geschrieben:Vielen dank! scheint wirklich schneller zu sein ich dachte immer das Peek/Poke genau so schnell wäre.
Peek und Poke sind doch auch nur Funktionen / Prozeduren. Hier ist pointern immer von Vorteil, zumal sich daraus,
im Gegenteil zu Deinem ASM-Gefrickel, keine Nachteile ergeben. Peek und Poke ist nur Einsteigerfreundlicher und
mehr Basic Like, aber lohnt sich auch nicht immer. Man sollte auch mal an die Wartungsfreundlichkeit des Codes
denken, schließlich ist PureBasic eine Hochsprache, sonst könnte man ja gleich ASM nutzen :wink:
Stimmt schon und ASM-Codes die ich weiterhin verwende hab ich in Macros verpackt damit es weiterhin übersichtlich aussieht. Zu Peek/Poke: ich dachte PB würde solche grundlegende/einfache befehle automatisch optimieren.

Noch eine Frage/Hinweis
bevor ich Structuren verwende wollte ich aber noch ein paar test Tests machen und da ist mir ein "Fehler" aufgefallen:

Code: Alles auswählen

Structure test
  ka1.i
  ka2.i
EndStructure

Global test.test

*test.Integer = @test\ka2

test\ka2+1234

*test\i+1234
normalerweise müsste "*test\i+1234" schneller sein aber daraus wird:
!mov ebp, [0x442b68]
!mov ebx, [ebp+
0x0]
!add ebx, 0x4d2
!push ebx
!mov ebp, [0x442b68]
!pop dword [ebp+
0x0]
wo nur
!mov ebx,
!add ebx, 0x4d2
!mov [0x442b68], ebx

nötig wäre da OffsetOf(*test\Integer) = 0 ist.

bei "test\ka1+1234" das gleiche:
!lea ebp, [0x442b54]
!mov ebx, [ebp+
0x0]
!add ebx, 0x4d2
!push ebx
!pop dword [ebp+
0x0]
wo nur
!mov ebx, [0x442b54]
!add ebx, 0x4d2
!mov [0x442b54], ebx

nötig ist. OffsetOf(test\ka1)=0.

hier noch "test\ka2" dort stimmt es: OffsetOf(test\ka2)=4.
!lea ebp, [0x442b54]
!mov ebx, [ebp+
0x4]
!add ebx, 0x4d2
!push ebx
!pop dword [ebp+
0x4]

Das ist jetzt nicht wirklich schlimm aber ich denke das wäre für Fred/Freak leicht auszumerzen. Kann ja einer mit gutem Englisch im Forum Posten...
Antworten