2009-04-08 15 views
8

Estoy tratando de portar algún código de ensamblado escrito en Visual Studio en ensamblado en línea de GNU en Linux. El código original utiliza _emit cuales MSDN describe como una instrucción de pseudo y explica como:¿Cuál es el equivalente de _emit en Linux?

la pseudoinstrucción _emit es similar a la directiva DB de MASM. Utiliza _emit para definir un solo byte inmediato en la ubicación actual en el segmento de texto actual. Sin embargo, _emit puede definir solo un byte a la vez, y solo puede definir bytes en el segmento de texto. Utiliza la misma sintaxis que la instrucción INT.

¿Cómo puedo hacer lo mismo en Linux?

Respuesta

15

para emitir 0x12 bytes (por ejemplo), hacer:

asm __volatile__ (".byte 0x12"); 

Aunque, es posible obtener resultados sorprendentes con optimizaciones habilitadas.

+0

+1, buen punto acerca de las optimizaciones. –

+0

¡Gracias! Esto funcionó bien. – samgrover

+0

Con '__volatile__' (o simplemente' volátil' en los compiladores modernos) no deberías tener ningún problema incluso con las optimizaciones habilitadas. El compilador debe emitir el byte en la ubicación indicada (por supuesto, el código que lo rodea podría estar muy optimizado ...). – BeeOnRope

Cuestiones relacionadas