Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Findfirst/Findnext in Assembler (https://www.delphipraxis.net/8902-findfirst-findnext-assembler.html)

Dannyboy 15. Sep 2003 09:29


Findfirst/Findnext in Assembler
 
Hi,
hat jemand ein Findfirst/Findnext Beispiel in Assembler?
Bin gerade dabei mir die Grundfunktionen anzueignen
und bräuchte daher dieses Beispiel in REINEM Assembler.
Insbesondere müsste ich wissen, wie die Information
der Dateiattribute aufgebaut ist, die an den Register
übergeben wird.

Ein Beispiel, welches einfach alle Dateien (*.*) im
aktuellen Ordner sucht, und mir deren Namen auf den
Stack pushed, wäre gut. :gruebel:

Danke.

negaH 15. Sep 2003 10:51

Re: Findfirst/Findnext in Assembler
 
Warum benötigst du dies in Assembler ?
Jeder Compiler wie Delphi/C wird genau so guten Assembler compilieren wie der Mensch. Das liegt daran das bei einer FindFirst()/FindNext() Schleife du nicht viele Möglichkeiten hast durch manuellen Assembler was zu verbessern. Erzeuge einen Delphi Source, compiliere ihn, setze Breakpoint auf erste Quelltestzeile, starte dann Anwendung. Wenn am Breakpoint gehalten wird öffne den CPU View der IDE und nun kannste dir den Machinencode anschauen. Du wirst sehen das eine FindFirst() FindNext() Schleife fast nur aus CALL's zu API Funktionen besteht. Somit wird die Performance dieser Schleife fast nur durchs API bestimmt. Da du auch in Assembler diese CALL's nutzen musst bringt dieser keiner bessere Performance.

Zudem, in Delphi/C kannste mit geschützen Codeblöcken arbeiten, sprich try finally usw. Das geht auch in Assembler aber du kannst dann nicht mehr so einfach die try finally's vom Delphi benutzen. D.h. in Deinem Beispiel bingt Assembler keine Vorteile, nur Nachteile bei der Wartung der Source.

Gruß Hagen

Dannyboy 15. Sep 2003 12:18

Re: Findfirst/Findnext in Assembler
 
Danke für Deine Mühe, aber das mit Delphi etc, bringt mir nichts, da
ich dabei bin ASSEMBLER zu lernen und daher NICHT den einfachen Weg
durch Delphi gehen möchte. Es geht auch nicht um das Sparen von
Ressourcen. Ich werde aber mal die Breakpoints setzten und mir die
Register ansehen.


Dankeschön :coder:

Christian Seehase 15. Sep 2003 13:24

Re: Findfirst/Findnext in Assembler
 
Moin Dannyboy,

dann würde es sich allerdings anbieten, wenn Du Dich, zur Übung, mal damit beschäftigst, beispielsweise StringFunktionen wie StringReplace oder Copy in Assembler zu erstellen.
Das dürfte als Übung, und auch anschliessend, mehr bringen, als Register für den Aufruf von Betriebssystemfunktionen vorzubereiten.

Ein kleines Beispiel findest Du auch hier in der Code-Library. Dort hat sakura eine erweiterte Pos-Funktion reingestellt.

Lillebrohr 15. Sep 2003 13:47

Re: Findfirst/Findnext in Assembler
 
Guten Tag Dannyboy,


Da ich selber in Assembler code kann ich dir für den Anfang nur die Tutorials von Iczelion empfehlen. Hier ist ein Link zu seinem Tutorial.

http://www.robsite.de/download.php?i...brik=tassembly

Und als Buch kann ich dir nur das Assembler Buch von Addison Wresley empfehlen.

nur als Tip: fang nich gleich mit sowas an. Beschäftige dich erstmal eine Weile mit strings und Stringformatierungen. Was sehr wichtig ist, DER STACK + HEAP :freak: . Wenn du erst einmal gepeilt hast wie der funktioniert hast du schon einiges gut.


Just do it !


MfG

LB

Dannyboy 15. Sep 2003 14:01

Re: Findfirst/Findnext in Assembler
 
Ja, so'n paar Stack Sachen hab' ich schon gepushed und "gepoppt". :wink:
Ich habe mir mal diese Liste der Interrupts
besorgt, da steht so viel drin ... Ja, vielleicht habt ihr Recht.
Ich versuche nun mal ein kleines Quicksort mit ASM zu schreiben.
In dem integrierten Asm von Pascal habe ich das schon realisiert,
weil ich da sowieso das Array, welches sortiert werden muss, in
der VAR-Dekla von Pascal deklariere. Ich weiss nicht, wie man ein
Array in reinem Asm definiert, aber das kriege ich schon hin. Ich
werde dann mal ein wenig „tief stapeln“ und mit ein paar Stack Operationen
weiter machen. Thx, boyz

Lillebrohr 15. Sep 2003 14:07

Re: Findfirst/Findnext in Assembler
 
Guten Tag,


Wie jetzt ? du machst noch nichmal reines ASM ? nur son Mix aus Pascal und Asm ? Das ist ja quatsch, find ich. Aber naja muss jeder selber wissen.

Und wie ich ejtzt mitbekommen habe machst du 16 bit asm. Tja da helfen dir die Tuts auch nciht allzu viel.


Na gut, dann push mal weiter. ;)


MfG


LB

jbg 15. Sep 2003 14:13

Re: Findfirst/Findnext in Assembler
 
Zitat:

Zitat von Dannyboy
Ich weiss nicht, wie man ein Array in reinem Asm definiert

Code:
var MyArray: array[0..9] of DWORD

MyArray DD 10 DUP (?)

Du wirst die Interrupts aber hoffentlich nicht in einem Win32 Programm verwenden.

negaH 15. Sep 2003 16:14

Re: Findfirst/Findnext in Assembler
 
Zitat:

Wie jetzt ? du machst noch nichmal reines ASM ? nur son Mix aus Pascal und Asm ? Das ist ja quatsch, find ich. Aber naja muss jeder selber wissen.
Quatsch ist es heutzutage alles in Assembler zu coden. Gerade die Kombination aus einer guten Hochsprache + Assembler ist effektiv. Ein guter Compiler wird durchschnittlich besseren Code erzeugen als dies der Mensch in der gleichen Zeit könnte. Bevor du überhaupt nachgedacht hast wie dein Assemblersource aussehen soll hat der Compiler einer Hochsprache feritg compiliert. Ich persönlich nutzte nur noch den Inline-ASM und dann auch nur wenn ich weiß das meine Maunuelle Assemblersource mir mehr als 20% Speedup bringen muß. Im Durchschnitt wird ein reiner Assemblersource nur maximal 5-10% schneller sein als ein compilierter Source einer Hochsprache. Demzufolge sind heute nicht die Grundalgorithmen entscheidend sondern es ist entscheidend den Überblick über komplexere Algorithmen zu haben. Dies ist mit Assembler niemals möglich. Deshalb sind reine Assembler Coder Leute die sich lieber auf die Optimierung von Kleinigkeiten stürtzen, als ein Problem im gesammten besser zu optimieren. Sorry, wenn ich das so hart sage, aber diese Erfahrungen habe ich selber an mir festgestellt :)
Wenn ich dir meine 250.000 Zeilen Anwendung maile und du solltest sie in Assembler umsetzen, dann geht das nicht in entsprechender Zeit.

Gruß Hagen

Lillebrohr 15. Sep 2003 16:35

Re: Findfirst/Findnext in Assembler
 
Guten Tag Hagen,

also ich programiere ASM nicht um irgendwelche Riesenprogramme zu schreiben sondern aus verschiedenen Gründen:

- Copy & Paste aus IDA (Disassembler)
- Geringe Filesize (10 kb)
- ist einfach geil

Ok, ich mein mal von der Filesize ausgehend ist es für mich schwachsinn z.B. in Delphi ASM zu integrieren. Da ja trodzdem 400 KB rauskommen.

Ich bin halt ein kleiner Größenfetischist. :coder:

MfG

LB


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz