Ich habe mit Nasm auf einer Linux-Umgebung für einige Zeit und diese Funktion funktionierte toll ... aber jetzt bin ich Wechsel zu einer Windows-Umgebung und ich möchte Masm verwenden (mit VS2008) kann ich nicht scheinen zu bekommen dies funktioniert ...Konvertierungsproblem: __asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Wenn ich so etwas schreiben ...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
asm ist nicht mehr erkannt und volatilen einen Fehler wirft „string“ zu sagen, habe ich auch versucht, Ich schreibe _asm volatile, aber ich bekomme einen Fehler, der sagt "Inline Assembler Syntax Fehler in 'Opcode'; gefunden 'Daten Typ ' ‚
auch: Sie {Anweisungen hier} für klarere Syntax __asm könnte, und es könnte, dass Inline-asm erwähnenswert, werden nicht arbeiten auf x64, so für diese Architektur muss asm cod schreiben e im eigenständigen Code. –
Ok jetzt macht es ein bisschen Sinn, am wenigsten bekomme ich keine Fehler .. also was entspricht inportb? Ich weiß, du schreibst "in" anstatt "out" und änderst wahrscheinlich die Axt, oder? Oder ist es komplizierter? – Fredrick
Probieren Sie es aus, es sollte nicht weh tun. Denken Sie daran, dass VS {operation} {destination}, {source} order verwendet, also wäre zum Lesen des Ports: __asm in al, dx; und dann müssen Sie das Ergebnis in Ihrer Variablen speichern: __asm mov data, al; und es von der Funktion zurückgeben: Rückgabedaten; – Rom