Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Assembler gesucht! (https://www.delphipraxis.net/16030-assembler-gesucht.html)

Borti 9. Feb 2004 12:40


Assembler gesucht!
 
Hat von euch einer einen gescheiten Assembler? (nicht so einen integrierten, wie in Delphi)
Gruß,
Borti

MrKnogge 9. Feb 2004 12:46

Re: Assembler gesucht!
 
Für welche Programmiersprache ?
Für Assembler : nein
Für Pascal : Such mal bei sourceforge.net - Der is sogar OpenSource :-D

Mikko 9. Feb 2004 17:20

Re: Assembler gesucht!
 
Such mal nach NASM.

NicoDE 9. Feb 2004 19:23

Re: Assembler gesucht!
 
Microsoft Assembler - http://www.masm32.com
Turbo Assembler - http://shop.borland.com/dr/sat4/ec_M...0023&xid=39696
Netwide Assembler - http://nasm.sourceforge.net/

Borti 12. Feb 2004 16:14

Re: Assembler gesucht!
 
Laufen die Programme, die ich mit diesen Assemblern kompiliert habe auch unter Windows NT, XP und Me?
Gruß,
Borti

NicoDE 12. Feb 2004 16:44

Re: Assembler gesucht!
 
DAs kommt auf Deinen Quellcode an.

Chewie 12. Feb 2004 16:46

Re: Assembler gesucht!
 
Starten kannst du sie auf jeden Fall. Ob sie Laufzeitfehler hervorrufen, hängt davon ab, welcher Code ausgeführt wird. Wenn du Interrupts benutzts oder direkt auf Ports zugreifst, kannst du davon ausgehen, dass das nicht funktioniert. Solange du aber nur auf Register und Speicher zugreifst, sollte es keine Probleme geben.

Borti 12. Feb 2004 16:58

Re: Assembler gesucht!
 
:wall: :cry: :wall:
Zitat:

Wenn du Interrupts benutzts oder direkt auf Ports zugreifst
genau das hatte ich vor!
kann ich nicht einfach das register $378 im Arbeistspeicher abfragen und ich erhalte das byte vom Datenregisters des LPT-ports? (ist der port nicht direckt mit einem register im Arbeitsspeicherverbunden?)
Gruß,
Borti

Chewie 12. Feb 2004 17:06

Re: Assembler gesucht!
 
Ich kenn mich mit der Peripherie nicht aus, aber es könnte schwierig werden, überhaupt erst an die physische Adresse $378 zu kommen, da Windows den physischen Speicher in einen virtuellen Speicher mappt. Die logische Adresse $378 entspricht also nicht der physischen $378!

Außerdem läuft eine WinNT-Usermode-Anwendung in einem geschützten Modus (protected mode), der bestimmte Anweisungen, wie Interrupts, nicht zulässt. Dafür müsstest du schon einen Treiber schreiben.

Assarbad 14. Feb 2004 18:02

Re: Assembler gesucht!
 
Also, "Interrupts aufrufen" kein Problem ... nur welchen?!? Windows selbst hat nen eigenen Mux-Int und Int3 sollte jedem Debugger-Besitzer auch unter Windows was sagen.

Der MASM-Link ist IMO nicht legal ... aber wenn selbst MS dagegen bisher nix unternommen hat, weiß ich auch nicht.

Du kannst mit einem Windows-Treiber vom Ring-0 (also Kernelmode) aus auch auf Ports zugreifen. Aber wozu?!? Mir scheint doch, daß du nur einen der LPTs ansprechen willst. Das sollte auch ohne Treiber möglich sein.

Borti 15. Feb 2004 11:22

Re: Assembler gesucht!
 
Zitat:

Mir scheint doch, daß du nur einen der LPTs ansprechen willst. Das sollte auch ohne Treiber möglich sein.
leider nicht unter den 32-bit versionen von windows.
was meinst du mit
Zitat:

Also, "Interrupts aufrufen" kein Problem ... nur welchen?!? Windows selbst hat nen eigenen Mux-Int und Int3 sollte jedem Debugger-Besitzer auch unter Windows was sagen.
Ich hör zum ersten mal davon
gruß,
Borti

Chewie 15. Feb 2004 13:01

Re: Assembler gesucht!
 
Zitat:

Zitat von Borti
Zitat:

Mir scheint doch, daß du nur einen der LPTs ansprechen willst. Das sollte auch ohne Treiber möglich sein.
leider nicht unter den 32-bit versionen von windows.

Wieso denn nicht? Eine Möglichkeit: Du öffnest die Datei \\.\LPT (ich hoffe, so heißt sie) und benutzt das Handle in DeviceIOControl.

Assarbad 15. Feb 2004 15:44

Re: Assembler gesucht!
 
Eben, geb ich Chewie voll recht.

Und Interrupts siehe oben + Int2Eh als MUXer

herges 15. Feb 2004 16:18

Re: Assembler gesucht!
 
o.k. Leute wir programmieren in der Schule Delphi, da noch die Version 5.
Und da verwenden wir diese Methode:
Delphi-Quellcode:
asm
   push dx
   mov dx, 888
   mov al, Datenwert
   Out dx, al
   pop dx
end;
Mit Handle kann ich zwar grad nich viel anfangen.
Könnte das mir armen Schüler mal einer genauer erklären, ich kam mit den englischen Help-files noch nie klar.
(Liegt nicht am Englisch.)

Gruß
herges

Assarbad 15. Feb 2004 16:27

Re: Assembler gesucht!
 
Super, funzt unter Win9x (unter Umständen), auf NT-basierten Systemen wird das Programm sich sehr schnell beruhigen, denn es hat nicht die Rechte privilegierte Befehle auszuführen.

Chewie 15. Feb 2004 17:11

Re: Assembler gesucht!
 
Mit meinen sehr beschränkten Assembler-Kenntnissen würd ich sagen:

Delphi-Quellcode:
asm
   push dx           ; Inhalt des Registers DX auf Stack sichern
   mov dx, 888        ; Dezimalzahl 888 in Register DX schreiben
   mov al, Datenwert ; in das Low-Byte des Registers den Wert von Datenwert schreiben
   Out dx, al        ; den Datenwert an den Port 888 = LPT senden
   pop dx            ; den Inhalt, den DX vorher hatte, wieder in DX schreiben
end;
Ist vielleicht als Anschauungsbeispiel, wie so eine Peripherieansteuerung funktioniert, ganz OK, aber in einem Programm, das wirklich für was gut ist und auch unter WinNTff laufen soll, wenig geeignet.

herges 15. Feb 2004 19:15

Re: Assembler gesucht!
 
O.K. war einen Versuch wert.
War von unserem Lehrer ja auch als Beispiel gedacht.
Aber ich schlag mich auch schon mit dem Problem herum.
Deshalb ja auch die Frage nach dem Handle.

Chewie 15. Feb 2004 19:19

Re: Assembler gesucht!
 
Ach so, das Handle. Also:

Unter Windows gibt es eine Vielzahl von Objekten. Jede geöffnete Datei, jedes erzeugte Fenster, jeder Thread usw. ist ein solches Objekt. Um mit einem Objekt irgendwas machen zu können, benötigt man einen Zugriff darauf. Solch einen Zugriff nennt man ein Handle. Handle heißt ja soviel wie Griff, stell dir vor, du hast einen Griff, über den du dein Objekt steuerst. Genauso machst du das mit der Datei: Du lässt dir einen Griff reservieren (CreateFile) und benutzt diesen, um das Objekt zu steuren (DeviceIOControl). Wenn du fertig bist, lässt du den Griff wieder los (CloseHandle).

Assarbad 15. Feb 2004 19:54

Re: Assembler gesucht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schöne Erklärung. Hier nochmal die Vielzahl an Objekttypen im Bild (siehe Anhang) auf einem W2K Pro.

http://www.delphipraxis.com/download.php?id=4073

Borti 16. Feb 2004 12:20

Re: Assembler gesucht!
 
ok, das mit dem handle scheint ein ganz vielversprechender ansatz zu sein. könnt ihr mir mal den code posten? (Ich hab's gestern schon versucht mich selber durch dieverse Bücher, websites und die online-hilfe durchzubeißen bin aber kläglich gescheitert.
Danke,
Borti

herges 16. Feb 2004 14:25

Re: Assembler gesucht!
 
Borti kann ich mich nur anschließen.
Ich kann mit dem Handle soweit nichts anfangen, da ich nich weiß wie man so ein Ding benutzt.
Danke im Vorraus
herges

Assarbad 16. Feb 2004 17:06

Re: Assembler gesucht!
 
Dann empfehle ich dringend die Lektüre des PSDK bzw der Win32 Hilfedatei.

Man kann zwar auch versuchen hier Grundlagen zu erklären, aber im Grossen und Ganzen ist das an anderer Stelle weit besser beschrieben. Ganz kurz wurde es ja schon geschrieben.

Nicht täuschen lassen ... ein Handle kann man nicht dereferenzieren oder ähnliches (Usermode), es ist einfach ein 32bit-Wert, der dem System sagt welches Objekt du ansprechen willst. Das Handle auf das Objekt wurde vorher mit Funktionen ala RegOpenKeyEx(), CreateFile(), CreateMutex() und anderen Funktionen erzeugt/geöffnet und dient danach den entsprechenden Toolfunktionen wie ReadFile(), WriteFile(), WaitForSingleObject() als Anhaltspunkt was gemeint ist. Handles werden meist mit CloseHandle() oder einer anderen (in der Doku erwähnten) Funktion "geschlossen".


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.

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