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.