z. B. int 21h unter DOS und wie unter inline ASM?



  • Hi,

    also wenn ich unter DOS beispielsweise feststellen will, ob eine BTrieve
    Datenbank laeuft, dann muss ich ax = 0ab00h sezten und den Interrupt 2F
    aufrufen.

    Wie mache ich das aber beispielsweise im inline ASM von Borland?
    Ich schreibe in ax den Wert 0ab00h und dann? int 2F kann man ja nicht machen,
    dann stuertzt das Programm ja ab.

    Danke im Voraus und ich hoffe, ich hab die Frage verstaendlich ausgedrueckt -;)

    mfg
    v R



  • warum sollte es abstürzen?

    Das Programm wird unterbrochen, in in die Interruptfunktion gesprungen und dann wird das Prog weiter ausgeführt..

    Du kannst Wahlweise auch in der Interrupttabelle nach der Adresse suchen und die Funktion dann direkt mit nam call aufrufen. ist sogar schneller..

    cYa
    DjR



  • Hi,

    sorry, hab mich wohl schlecht ausgedrueckt.
    Ich meine in einer Win32 Anwendung.

    Da stuerzt es naemlich immer bei der Zeile

    int 2fh

    ab.

    Kann mir da jemand weiterhelfen?

    mfg
    v R

    [ Dieser Beitrag wurde am 20.09.2002 um 17:56 Uhr von virtuell Realisticer editiert. ]



  • Interrupts kannst Du in Win32-Anwendungen nicht benutzen, stimmt.
    Wenn Du aber mit einem DOS-Interface arbeiten willst und auf die WinAPI verzichten kannst, wuerde ich doch der Einfachheit halber mal vorschlagen, dass Du dein Programm besser fuer 16Bit DOS schreiben solltest.



  • Hi,

    stimmt. Ich wollte halt nur testen, da wir in der Firma ein Warenwirtschafts-
    system auf Win32 umschreiben. Und da haette man das einbauen koennen, zumal
    das auch noch, so komisch es sich anhoert, weniger Code ist, als wenn ich
    die entsprechende API-Funktion aufrufen wuerde um das vorhanden sein einer
    Datenbank zu pruefen.

    Gibt es denn gar keine Moeglichkeit sowas auch unter Win32 zu machen?

    mfg
    v R



  • Unter Win32 kann die Datenbank gar keinen Interrupthandler einrichten, also selbst wenn du so den Interrupt aufrufen kannst, hilfts dir nichts, weil sich die Datenbank nie melden würde 🙂 Da musste schon die passende API nutzen

    PS: Dass die Int-Instruktion verreckt ist kein sonderliches Wunder, damit springst du (zumindest unter jedem WinNT) in eine Prozedur, die dem Benutzermodus garnicht gestattet ist und dann gehts hops für dein prog 🙂

    [ Dieser Beitrag wurde am 20.09.2002 um 20:54 Uhr von TriPhoenix editiert. ]



  • Naja, ob die BTrive-Datenbank installiert ist, kann man unter DOS ganz einfach
    herausbekommen, indem man in ax den Wert 0ab00h schreibt und dann den Interrupt
    2F ausloest. Danach muss in al der Wert 04dh stehen. Ist das der Fall, so ist
    die Datenbank installiert, ist es nicht der Fall, ist sie nicht installiert.

    Hat halt unter DOS auch so funktioniert, aber wenn es unter Win32 nicht mehr
    so einfach geht, muss mans halt doch mit der entsprechenden API machen.

    Danke fuer die Antworten

    mfg
    v R


Log in to reply