Domanda

Ricordo che in passato con il vecchio compilatore DOS Borland potevi fare qualcosa del genere:

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

Esiste un modo semi-indipendente dalla piattaforma per farlo adesso?Ho bisogno di effettuare una chiamata al BIOS, quindi se ci fosse un modo per farlo senza il codice asm, mi sarebbe altrettanto utile.

È stato utile?

Soluzione

Utilizzando CCG

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

Utilizzando VC++

__asm {
  mov eax, edx
  add eax, 2
}

Altri suggerimenti

Nel GCC c'è molto di più.Nell'istruzione, devi dire al compilatore cosa è cambiato, in modo che il suo ottimizzatore non rovini.Non sono un esperto, ma a volte assomiglia a questo:

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

È una buona idea scrivere del codice di esempio in C, quindi chiedere a GCC di produrre un elenco di assembly, quindi modificare quel codice.

Un buon inizio sarebbe leggere questo articolo che parla dell'assemblaggio inline in C/C++:

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

Esempio dall'articolo:

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

I compilatori Microsoft non x86 non supportano l'assemblaggio in linea.Devi definire l'intera funzione in un file sorgente assembly separato e passarlo a un assembler.

È altamente improbabile che tu possa accedere al BIOS con un sistema operativo in modalità protetta e dovresti utilizzare tutte le funzionalità disponibili su quel sistema.Anche se sei in modalità kernel probabilmente non è sicuro: se lo fai, il BIOS potrebbe non essere sincronizzato correttamente rispetto allo stato del sistema operativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top