Mam do czynienia z Nasm na środowisku Linux przez jakiś czas i ta funkcja działała świetnie ... ale teraz przełączam się do środowiska Windows i chcę użyć Masm (z VS2008) Nie mogę wydają się uzyskać to do pracy ...Konwersja problemu: __asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Kiedy piszę coś takiego ...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
ASM ma bardziej rozpoznawana i lotny zgłasza błąd mówiąc „ciąg”, ja też próbowałem pisząc _azmilnym ale dostaję błąd mówiąc "błąd składni asemblera inline w 'opcode'; znaleziono 'dane typ "«
Również: możesz użyć __asm {instrukcje tutaj} dla jaśniejszej składni, a może warto wspomnieć, że wbudowany asm nie będzie działa na x64, więc dla tej architektury będzie musiał napisać asm cod e w samodzielnym kodzie. –
Ok teraz ma sens trochę, najmniej nie dostaję błędów .. więc co jest równoważne inportb? Wiem, że piszesz "w" zamiast "na zewnątrz" i prawdopodobnie zmieniasz siekierę na prawą? Czy może jest to bardziej skomplikowane? – Fredrick
Spróbuj, to nie powinno boleć. Pamiętaj, że VS używa polecenia {operation} {destination}, {source}, więc dla odczytania portu będzie to: __asm w al, dx; , a następnie musisz zapisać wynik w swojej zmiennej: __asm mov data, al; i zwróć go z funkcji: dane zwracane; – Rom