Verfasst: 22.04.2009 18:05
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".Max_der_Held hat geschrieben:ps: kann ich die INT-befehle jetzt noch hernehmen, oder ist dass irgendwie veraltet, oder so..?
DOS ist 16 Bit, Windows (NT) hingegen 32 Bit. Man kann DOS-Programme nicht unter NT starten.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...
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.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).
Ich weiß aber nicht, ob NT noch diesen Modus unterstützt...
P. S.:
Ich würde PB nicht als Assembler missbrauchen...Little John hat geschrieben:PB ist ein Windows-Compiler.
