Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.05.19 00:43 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1192
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Sa 25.05.19 21:22 
Übersetzt Du 32 Bit oder 64?
Was für Interrupts versuchst du auslösen?

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.05.19 23:14 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1192
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 26.05.19 09:06 
Hmmm, ich habe ein bisschen in meinen Erinnerungen gegraben und im internet.
Zugriff auf Interrupts gibt es nur im real-mode der CPU. Der Modus in DOS Programme laufen. Single threaded.

Int33 ist ein guter bekannter. Für den hatte ich unter DOS ein paar Zeilen um die Maus ordentlich verwenden zu können.

Aber unter Windows kommt man an die Interrupts eigentlich nicht mehr ran. Es sei denn man schreibt einen Treiber.
Probier mal Int 3. Der sollte gehen. Ist der einzige Interrupt der mir einfällt.

Wenn Du was in Assembler machen willst, dann probier mal aus ein Bild um einen bestimmten Winkel zu drehen. Inclusive Sinus Tabelle und Interpolation.
(ist mir klar dass es das schon zigmal gibt, aber an sowas kann man schön sehen wieviel Zeit es spart die Reihenfolge der Befehle zu ändern oder auf andere Befehle / Register auszuweichen)

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 27.05.19 06:14 
- Nachträglich durch die Entwickler-Ecke gelöscht -
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307
Erhaltene Danke: 29

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 27.05.19 08:27 
Hallo Frühlingsrolle,

wenn Du ein schönes Beispiel hast, dann stelle es doch mal hier rein, würde mich interessieren.

Für allgemeine Laufzeitfragen kann ich www.prodelphi.de empfehlen. Ich habe damit z. B. gefunden, dass ich viel Zeit (25 %!!) mit dem häufigen Umkopieren eines RECORDS verbrauchte, von dem eigentlich nur einige wenige Elemente hätten kopiert werden müssen. Nachteil: Mit Profiler läuft das Programm deutlich langsamer.

Gruß
GuaAck

Für diesen Beitrag haben gedankt: Sinspin
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 459
Erhaltene Danke: 90

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 28.05.19 13:53 
Interrupts sind nur im sog. Real Mode des Prozessors möglich. Das ist den alten Prozessoren vor dem 80386 geschuldet, die so liefen.

Mit dem 80386 wurde der Protected Mode eingeführt, der erstmalig richtiges Multitasking (preemptiv, nicht kooperativ wie zuvor) ermöglichte. In diesem Modus werden Interrupts aber völlig anders benutzt (GDT, LDT, IDT). Jeder Versuch, einen Interrupt via INT-Mnemonic zu nutzen führt direkt in einen GPF (General Protection Fault).

Anfangs konnte man noch über das Kommandozeilen-Fenster einen Real Mode erreichen, weil dort tatsächlich noch ein richtiges MS-DOS hinter lag. Das wurde mit XP (IIRC) ebenfalls eliminiert.

Ergo: Geht nicht mehr.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
drstar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 79
Erhaltene Danke: 2

Windows 8.1/x64
Delphi 10.1
BeitragVerfasst: Mi 29.05.19 10:56 
Damit hat nicht XP Schluß gemacht, sondern die NT-Schiene an sich. Bereits unter Win 2000 war die Verwendung der Interrupts so nicht mehr möglich - zumindest nicht im Inline-Assembler. Umgehen konnte man dies, indem man den INTR-Befehl nutzte, Delphi generierte daraufhin selbstmodifizierenden Code, der offenbar auch die Deskriptoren mit eingebunden hatte. So konnte man immer noch den Int33 beispielsweise nutzen. Performant war das Ganze zwar nicht, aber es ging. Ob das heute noch geht, entzieht sich meiner Kenntnis.