He estado lidiando con Nasm en un entorno Linux durante algún tiempo y esta función funcionó muy bien ... pero ahora estoy cambiando a un entorno de Windows y quiero usar Masm (con VS2008) No puedo parecen conseguir que esto funcione ...Problema de conversión: __asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Cuando escribo algo como esto ...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
asm no es más reconocido y volátil lanza un error que dice "cadena", también probé Escribir _asm volátil pero me sale un error que dice "error de sintaxis del ensamblador en línea en 'opcode'; found 'data Tipo ' '
también: usted podría utilizar __asm {instrucciones aquí} para la sintaxis más clara, y que valdría la pena mencionar, que asm en línea no lo hará trabajar en x64, por lo que para esta arquitectura tendrá que escribir asm cod e en código independiente. –
Ok, ahora tiene sentido un poco, al menos no tengo errores ... entonces ¿qué es equivalente a inportb? Sé que escribes "in" en lugar de "out" y probablemente cambies a ax a la verdad? ¿O es más complicado que eso? – Fredrick
Pruébalo, no debería doler. Recuerde que VS usa {operation} {destination}, {source} orden, por lo que para leer el puerto sería: __asm in al, dx; y luego necesita almacenar el resultado en su variable: __asm mov data, al; y lo devuelve desde la función: datos de devolución; – Rom