Linux - Código ensamblador inline gcc

 
Vista:

Código ensamblador inline gcc

Publicado por Necesito Ayuda! (4 intervenciones) el 28/06/2007 12:26:39
Muy buenas:

Me estoy volviendo loco para poder compilar con gcc este código ensamblador. Cómo debería ser?

mov dx,02e
mov al,87
out dx,al
out dx,al
mov dx,02e
mov al,07
out dx,al
inc dx
inc al
out dx,al
dec dx
mov al,f6
out dx,al
inc dx
mov al,xy
out dx,al

Si pongo la siguiente instrucción en el programa en C compila pero al ejecutar la aplicación cruje y no se porqué:
asm("mov %dx,0x02e;");

¿Alguien podría echarme una mano? No tengo ni idea de ensamblador ni de como pasar ese código a inline assembler.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Código ensamblador inline gcc

Publicado por andres (1 intervención) el 30/06/2007 18:37:45
Si estas ejecutando este programa desde algun sistema operativo como linux o windows,
no se permite ejecutar instrucciones como out. Lo del ensamblador en linea busca por gcc inline.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Código ensamblador inline gcc

Publicado por TONY (1 intervención) el 17/08/2007 13:27:09
Supongo que lo que quieres es cargar en dx el valor 0x02E.

El ensamblador que empleas esta invertido , tienes que efectuar un mov $registro ,% dato .empleas un ensamblador basado en AT&T .

Previamente antes de un valor constante has de poner $ y antes de un registro %

Prueba este codigo , yo lo he provado en DEV-C y funciona .
mov fuente, destino

asm ("mov $0x02E,%dx");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Código ensamblador inline gcc

Publicado por Pablo (2 intervenciones) el 08/11/2007 02:09:58
Si usas *NIX (linux o bsd por ejemplo) o Win32 te puedo decir que evites instrucciones de acceso de puertos como out. Las instrucciones privilegiadas no pueden ser ejecutadas en programas de usuario ya que pueden causar un error de proteccion o instruccion ilegal. Las instrucciones privilegiadas pueden ser usadas en modulos de kernel (*.ko) y creo que en VxD el Win32, pero usalas con mucho cuidado (pueden provocar un panico de kernel o Pantallazo azul).

En la sintaxis tendrias que buscar, creo que es __inline__ o __asm__ __volatile__ y por cada nueva linea poner "\n" .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar