Frage

Ich erinnere mich, wieder in den Tag mit dem alten borland DOS-Compiler Sie so etwas tun könnte:

asm {
 mov ax,ex
 etc etc...
}

Gibt es einen halbplattformunabhängig Weg, dies jetzt zu tun? Ich habe eine Notwendigkeit, einen BIOS-Aufruf zu machen, so dass, wenn es ein Weg dies ohne asm-Code zu tun, das wäre ebenso nützlich für mich.

War es hilfreich?

Lösung

Mit GCC

__asm__("movl %edx, %eax\n\t"
        "addl $2, %eax\n\t");

Mit VC ++

__asm {
  mov eax, edx
  add eax, 2
}

Andere Tipps

In GCC, dann ist es mehr als das. In der Anweisung, müssen Sie den Compiler sagen, was geändert wird, so dass seine Optimierer up nicht schrauben. Ich bin kein Experte, aber manchmal sieht es so etwas wie folgt aus:

    asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");

Es ist eine gute Idee, einige Beispielcodes in C, dann fragt GCC schreibt eine Assembler-Liste zu erzeugen, dann diesen Code ändern.

Ein guter Start wäre diesen Artikel lesen, die über Inline-Montage in C / C ++ sprechen:

http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx

Beispiel aus dem Artikel:

#include <stdio.h>


int main() {
    /* Add 10 and 20 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                "movl $20, %ebx;"
                "addl %ebx, %eax;"
    );

    /* Subtract 20 from 10 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                    "movl $20, %ebx;"
                    "subl %ebx, %eax;"
    );

    /* Multiply 10 and 20 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                    "movl $20, %ebx;"
                    "imull %ebx, %eax;"
    );

    return 0 ;
}

Nicht-x86 Microsoft-Compiler in-line nicht Montage unterstützen. Sie haben die ganze Funktion in einer separaten Assembly-Quelldatei zu definieren und zu einem Assembler übergeben.

Sie sind sehr unwahrscheinlich, die Lage sein, in die BIOS aufzurufen unter einem geschützten Modus Betriebssystem und soll auf diesem System unabhängig von Einrichtungen zur Verfügung steht verwenden. Auch wenn Sie im Kernel-Modus sind es wahrscheinlich unsicher -. Das BIOS nicht korrekt in Bezug auf O Zustand synchronisiert werden kann, wenn Sie dies tun

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top