Pregunta

Recuerdo que en su día con el viejo borland DOS compilador que se podría hacer algo como esto:

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

Hay un semi-independiente de la plataforma manera de hacer esto ahora?Tengo la necesidad de hacer una BIOS de la llamada, así que si había una manera de hacer esto sin código en asm, que sería igualmente útil para mí.

¿Fue útil?

Solución

El uso de GCC

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

El uso de VC++

__asm {
  mov eax, edx
  add eax, 2
}

Otros consejos

En el GCC, que hay más a él que eso.En la instrucción, usted tiene que decirle al compilador que ha cambiado, por lo que su optimizador de no atornillar.No soy un experto, pero a veces se ve algo como esto:

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

Es una buena idea escribir algo de código de ejemplo en C, entonces pregunte a GCC para producir una lista de ensamblados, a continuación, modificar ese código.

Un buen comienzo sería la lectura de este artículo que hable de ensamblado en línea en C/C++:

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

Ejemplo de un artículo:

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

No-x86 Microsoft compiladores no apoyo en la línea de ensamblaje.Usted tiene que definir la función entera en un conjunto independiente de la fuente de archivo y pasarlo a un ensamblador.

Eres muy poco probable que sea capaz de llamar a la BIOS bajo un sistema operativo de modo protegido y debe hacer uso de lo que las instalaciones están disponibles en el sistema.Incluso si usted está en el modo de núcleo es probablemente seguro - el BIOS no puede ser sincronizado correctamente con respecto a OS estado si lo hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top