8088er-Maschinensprache in C...



  • Servus@all

    Hier meine Frage:

    Wie kann ich *stinknormalen* 16-Bit 😋 -Maschinencode in
    C einbinden? (benutze den DJGPP-Compiler für DOS.)
    Ich beherrsche Assembler, und möchte mit ein paar Codezeilen
    aus meinem Programm die Softwareinterrupts aufrufen.
    Wie schreibt man diese Zeilen? Ich will z.B. sowas starten:
    ***
    MOV AH, 0
    MOV AL, 0x13
    INT 0x10
    ***
    Da muss doch noch irgendwas davor und dahinter.
    Bloss ich hab nirgendwo sowas gefunden...

    Danke schon mal für alle Antworten.



  • __asm ? _asm ? asm ? Ich weiss nu nicht, was bei DJGPP verwendet wird, aber es hat nix mit ANSI-C zu tun...

    mfg h4xX0r



  • h4xX0r schrieb:

    __asm ? _asm ? asm ? Ich weiss nu nicht, was bei DJGPP verwendet wird, aber es hat nox mit ANSI-C zu tun...

    inline static unsigned char inportb(int port)
    {
    	register unsigned char r;
    
       	asm volatile
    	( 
    		"inb %%dx, %%al\n\t" 
    		: "=a" (r) 
    		: "d" (port)
    	);
    
       	return (r);
    }
    
    inline static void outportb(int port, unsigned char data)
    {
    	asm volatile
    	(
    		"outb %%al, %%dx\n\t" 
    		:
    		: "a" (data), "d" (port)
    	);
    }
    


  • http://www-106.ibm.com/developerworks/linux/library/l-ia.html?dwzone=linux

    aber denk dran, dass der DJGPP eh 32Bit Binarys erstellt, deine Binarys also nicht im 8088 Emu Modus laufen können, sondern im Protected Mode laufen!



  • @quark
    Bei manchen alten 16Bit Compilern gibt es sogar C-Funktionen (aber nicht ANSI-C!), die einen Interruptaufruf machen. Die, die ich kenne heißt int86(). Als Parameter brauchst du eine Variable vom Typ union REGS.


Log in to reply