Seite 2 von 2

Verfasst: 22.04.2009 18:05
von Marvin
Max_der_Held hat geschrieben:ps: kann ich die INT-befehle jetzt noch hernehmen, oder ist dass irgendwie veraltet, oder so..?
INT 21h geht eben nur unter DOS (bzw. garantiert auch unter FreeDOS etc.), es gibt ja aber auch noch die "BIOS-API". Man kann BIOS-Funktionen über Interrupts aufrufen (z. B. etwas auf den Bildschirm ausgeben, etwas von einem Datenträger lesen, ...), aber nur im RealMode. Außerdem funktionieren Systemaufrufe oft über Interrupts. Der Linux-"Systeminterrupt" ist "int 0x80".
ZeHa hat geschrieben:Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...
DOS ist 16 Bit, Windows (NT) hingegen 32 Bit. Man kann DOS-Programme nicht unter NT starten.
ZeHa hat geschrieben:Vermutlich simuliert Windows dem DOS-Programm dann einfach eine gewisse Real-Mode-Umgebung oder so (brauchen ja eh nur 640K zu sein).
Genau. Es gibt neben ProtectedMode und RealMode noch (unter anderem) einen Modus namens VM86. Wird der aktiviert, dann schaltet sich der Prozessor sozusagen vom ProtectedMode in den RealMode. Wichtig ist, dass man diesen Modus für jeden Prozess einzeln setzen kann. Dadurch können theoretisch auch RealMode-Anwendungen auf einem ProtectedMode-System laufen. Der Anwendung wird dabei genau ein MB Speicher vorgegaukelt (eben RealMode) und alle "Systemaufrufe" (cli, int, ...) werden an das System als Exception weitergeleitet. Dieses muss dann dafür sorgen, dass der Aufruf korrekt ausgeführt wird. Meistens wird dazu der BIOS-Speicher an (physisch) 0xF000 (z. B.) der Applikation an diese Stelle eingeblendet (Paging empfiehlt sich SEHR bei VM86). Alle Interrupts werden dann entsprechend der RealMode-IVT dort ausgeführt.
Ich weiß aber nicht, ob NT noch diesen Modus unterstützt...

P. S.:
Little John hat geschrieben:PB ist ein Windows-Compiler.
Ich würde PB nicht als Assembler missbrauchen... :wink:

Verfasst: 23.04.2009 00:50
von Thorium
Naja, alle Bücher fangen mit dem 16Bit DOS-Kram an. Ich hatte das einfach übersprungen als ich Assembler angefangen hab zu lernen.

OS-Unabhängig programmieren ist aber schwierig. Da musst du dann tatsächlich fast alles zu Fuß erledigen. Wobei man teilweise garnicht OS-Unabhängig programmieren kann. Esseiden das Programm soll ganz ohne OS laufen. Aus dem Bootsektor raus, z.B.
Ansonsten ist man teilweise gezwungen die API zu nutzen, weil die OS-Struktur das so verlangt.

Ich empfehle immer die 2 Bücher:
Assembler: Maschinennahes Programmieren von Anfang an. Mit Windows-Programmierung als Lehrbuch
Assembler Ge-Packt als Referenz
Little John hat geschrieben: Windows läuft ja im Protected Mode. Kann man da denn überhaupt Real Mode Interrupts aufrufen?
Jaein.
Normalerweise kann man keine Interrupts aufrufen. Der Aufruf generiert eine Exception. Es gibt aber ein paar Ausnahmen.