Inline Assembler lässt sich net compilieren
-
Hi,
ich habe den code aus dem FAQ genommen und in eine C++ Funktion eigebaut, doch die will net compilieren.
void reboot (void) { asm { db 0EAh ;entspr. jmp FFFF:0000 dw 0000h dw 0FFFFh }; } void shutdown (void) { asm { mov ax,5301h ;Aktiviere RealMode APM Interface xor bx,bx int 15h mov ax,530eh ;Waehle APM Version xor bx,bx mov cx,0001h ;v.:1.1 int 15h mov ax,530fh ;Aktiviere APM fuer alle Geraete mov bx,0001h ;ID 1=Alle Geraete mov cx,0001h ;1=engage int 15h mov ax,5308h ;Aktiviere automatisches APM fuer alle Geraete mov bx,0001h ;ID 1=Alle Geraete mov cx,0001h ;1=enable int 15h mov ax,5307h ;Setze Geraetezustand mov bx,0001h ;ID 1=Alle Geraete mov cx,0003h ;Status 3=Ausgeschaltet int 15h }; }
Ich benutze den GCC!
-
der GCC benutzt einen anderen Inline-Assembler Syntax. Hilfe dazu findest du aussreichend in der FAQ und im GCC Manual.
-
Hi.
Der GCC verwendet die AT&T-Syntax. Dazu muesstest du den Code entsprechend umschreiben.
Noch einige Anmerkungen:
In C++ werden Kommentare nicht durch ein Semikolon eingeleitet
In 32Bit (Win-Konsole/Windows/Linux o.ae.) Applikationen werden diese Codes nicht funktionieren.
-
na klasse... wieso gibt es denn diese 2 verschiedenen synatxe??? fuck it
-
Ich habe mal gelesen Interrupts würden in Inline-Assembler nicht funktionieren oder gilt das nur für Win-Applikationen?
=Seraph= schrieb:
na klasse... wieso gibt es denn diese 2 verschiedenen synatxe??? fuck it
Es gibt noch mehr, z.B. NASM und wenn du es damit verlgichen hast dann MASM/TASM.
Code-Hacker
-
Code-Hacker schrieb:
Ich habe mal gelesen Interrupts würden in Inline-Assembler nicht funktionieren oder gilt das nur für Win-Applikationen?
Da hast du irgendwas verwechselt. Die aus der DOS-Programmierung gewohnten Interrupts (BIOS, DOS-API usw.) lassen sich im Protected Mode (z.B. in Windows-Programmen) nicht aufrufen, das hat aber absolut nichts mit der Verfügbarkeit der INT-Instruktion im Inline-Assembler zu tun.
BTW sagt der C++-Standard, das asm-Schlüsselwort habe die Syntax asm ( string-literal ), von daher ist das oben sowieso fragwürdig. Ich weiß, es gibt Compiler, die das so implementieren (Turbo C++ z.B.), aber man sollte nicht davon ausgehen, dass das immer klappt. Ein normaler Präprozessor könnte sich daran schon verschlucken.
-
Bashar schrieb:
Da hast du irgendwas verwechselt. Die aus der DOS-Programmierung gewohnten Interrupts (BIOS, DOS-API usw.) lassen sich im Protected Mode (z.B. in Windows-Programmen) nicht aufrufen, das hat aber absolut nichts mit der Verfügbarkeit der INT-Instruktion im Inline-Assembler zu tun.
BTW sagt der C++-Standard, das asm-Schlüsselwort habe die Syntax asm ( string-literal ), von daher ist das oben sowieso fragwürdig. Ich weiß, es gibt Compiler, die das so implementieren (Turbo C++ z.B.), aber man sollte nicht davon ausgehen, dass das immer klappt. Ein normaler Präprozessor könnte sich daran schon verschlucken.
Ich denke aber nicht das ich das verwechselt habe, es stand da nur (auf irgend ner Seite, dass man die nicht gehen in Inline-Assembler.
Aber jetzt bin ich ja aufgeklärt, thx!
Code-Hacker
-
Dann hast du eben was gelesen, was jemand anders verwexelt hat