C'è un modo per inserire il codice assembly in C?
-
09-06-2019 - |
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.
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.