Ho avuto a che fare con Nasm su un ambiente Linux per un po 'di tempo e questa funzione ha funzionato benissimo ... ma ora sto passando ad un ambiente Windows e voglio usare Masm (con VS2008) non posso sembrano ottenere questo al lavoro ...Conversione del problema: __asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Quando scrivo qualcosa di simile ...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
ASM non è più riconosciuto e volatile genera un errore che dice "stringa", ho anche provato scrivendo _asm volatile ma ottengo un errore che dice "errore di sintassi assemblatore in linea in 'opcode'; dati trovati Tipo ' '
Inoltre: è possibile utilizzare __asm {istruzioni qui} per la sintassi più chiara, e potrebbe essere la pena ricordare, che in linea asm non lo farà lavoro su x64, quindi per questa architettura dovrò scrivere asm cod e in codice stand alone. –
Ok ora ha senso un po ', meno sto ricevendo errori .. quindi cosa è equivalente a inportb? So che scrivi "in" anziché "out" e probabilmente cambi ascia a destra? O è più complicato di così? – Fredrick
Provalo, non dovrebbe ferire. Ricorda che VS usa l'ordine {operation} {destination}, {source}, quindi per leggere la porta sarebbe: __asm in al, dx; e quindi è necessario memorizzare il risultato nella variabile: __asm mov dati, al; e restituirlo dalla funzione: dati di ritorno; – Rom