Question

Je me souviens qu'à l'époque, avec l'ancien compilateur Borland DOS, vous pouviez faire quelque chose comme ceci :

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

Existe-t-il désormais un moyen indépendant de la semi-plateforme de procéder ?J'ai besoin de faire un appel au BIOS, donc s'il y avait un moyen de le faire sans code asm, cela me serait également utile.

Était-ce utile?

La solution

En utilisant CCG

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

En utilisant CV++

__asm {
  mov eax, edx
  add eax, 2
}

Autres conseils

Dans GCC, il y a bien plus que cela.Dans l'instruction, vous devez indiquer au compilateur ce qui a changé, afin que son optimiseur ne se trompe pas.Je ne suis pas un expert, mais parfois cela ressemble à ceci :

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

C'est une bonne idée d'écrire un exemple de code en C, puis de demander à GCC de produire une liste d'assemblys, puis de modifier ce code.

Un bon début serait de lire cet article qui parle de l'assemblage en ligne en C/C++ :

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

Exemple tiré de l'article :

#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 ;
}

Les compilateurs Microsoft non x86 ne prennent pas en charge l'assemblage en ligne.Vous devez définir l'intégralité de la fonction dans un fichier source d'assembly séparé et la transmettre à un assembleur.

Il est très peu probable que vous puissiez appeler le BIOS sous un système d'exploitation en mode protégé et devez utiliser toutes les fonctionnalités disponibles sur ce système.Même si vous êtes en mode noyau, ce n'est probablement pas sûr : le BIOS risque de ne pas être correctement synchronisé par rapport à l'état du système d'exploitation si vous le faites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top