Przerobienie kodu asemblera ze składni Intel na składnię AT&T

0

Witam, męczę się z napisaniem najprostszego programu, który zaświeci mi diodę podpiętą do LPT, jednak napotkałem problem ze wstawkami asemblerowymi. Używam Nokia QT Creator, który z kolei używa kompilatora mingw. Wyczytałem, że mingw obsługuje wstawki asemblerowe w składni AT&T, a wstawki podane niżej są w składni Intel'a.

Wstawki 'oryginalnie' wyglądają tak:

asm
{
push ax
push dx
mov dx,tAdres
mov al,Value
out dx,al
pop dx
pop ax
}
//...
asm
{
push ax
push dx
mov dx,tAdres
in al,dx
mov Got,al
pop dx
pop ax
}

"Przerobiłem" je w taki sposób, że kompilator już się nie pluje:

asm
("push ax\n"
"push dx\n"
"mov dx,tAdres\n"
"mov al,Value\n"
"out dx,al\n"
"pop dx\n"
"pop ax\n");
}
//...
asm
("push ax\n"
"push dx\n"
"mov dx,tAdres\n"
"in al,dx\n"
"mov Got,al\n"
"pop dx\n"
"pop ax\n");

Jednak wtedy dostaję błędy typu: C:\DOCUME~1\**\USTAWI~1\Temp\**:247: error: Error: too many memory references for mov'`

Domyślam się, że to z powodu tego, że wstawki są w składni Intel'a a powinny być w składni AT&T.
Z racji tego, że kompletnie nie znam się na asemblerze będę wdzięczny za jakąkolwiek pomoc.

1

A spróbowałeś wpisać w google "gcc intel syntax"?

1

Zobacz czy kompilator przypadkiem nie ma jakiejś funkcji wbudowanej (intrinsic), która jest zamiennikiem asmowych instrukcji in/ out. Np tu: http://sourceforge.net/projects/mingw-w64/forums/forum/723797/topic/3635912 jest nagłówek z funkcją __inbyte/ __outbyte.

0

A więc tak:
dodanie

".intel_syntax noprefix\n"

Skutkuje wysypaniem 48 błędów (załącznik). Najmocniej przepraszam, że są to zdjęcia, jednak nie ma opcji kopiowania wszystkich błędów.
Niestety te błędy zupełnie nic mi nie mówią.
</del>

Znalazłem inny sposób, który częściowo działa, na razie próbuje sam z tym jednym problemem walczyć, jeżeli polegnę zapytam się w innym wątku. Dziękuję za pomoc.

0

Jeśli masz możliwość wpłynąć na linię poleceń mingw to wystarczy dodać parametr -masm=intel i składnia intelowska będzie działać.

0

Znalazłem inny sposób, który częściowo działa,

to napisz co to za sposób.

innym rozwiązaniem może być zewnętrzny plik .asm kompilowany np. nasm-em. tylko trzeba go odpowiednio podpiąć do projektu.
składnia nasm-a, mimo że nie całkiem zgodna z intelową, jest IMHO najwygodniejsza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1