Wstawki ASM (Code::Blocks). AT&T i Intel.

0

Czesc
Używam środowiska CodeBlocks pod Win7, gdzie kompiluje bez pośrednio z pod niego. Jestem na 3 semestrze informatyki i przyszedł czas żeby liznąć Assemblera. Ale chciał bym się go uczyć poprzez wstawki asm. Zresztą tak nas uczą na uczelni. Ale jest problem domyślnie kompilator(GNU GCC) który posiada CodeBlocks wymaga uzywania skladni AT&T, a my sie uczymy Intel ktora nawet wyglada na latwiejsza. Czy jest ktos mi w stanie pomoc?

W opcjach kompilatora, zakladka "other options" dopisalem -amasm=intel (bo w compiler flags nie bylo takiej opcji) ale to nic nie dalo. A podczas kompilacji wybija blad "error: unrecognized command line option "-amasm=intel".

1

-masm=intel

0

Dalej to samo, znaczy nie wybija errora tylko np. MOV nie zadeklarowane, tam mu nawiasa brakuje znowu ; itp.

1

U mnie np. ten program przechodzi:

int main()
{
   asm("mov eax, 0x1");
}

g++ prog.cpp -masm=intel

0

Elegancko wszystko działa tak jak powinno :) składnia trochę inne niż Visual Studio i przez to mi nie działało. Dla jasności jak byś to zapisał (dziwne ze u ciebie są "" i nie ma ; )? Tak to wygląda w Visual Studio.

__asm
{
PRZENIES: mov eax,0xaaff;
mov ebx,eax;
inc eax; //??
inc eax;
dec ecx;
dec eax;
add a,eax; // ??
push a;
pop ebx;

	mov eax,a;
	mov ebx,b;
	add eax,b;
	cmp eax, ebx;
	sub eax,b;
	mul ecx;
}
0

Mniej więcej tak:

__asm
         (
               "PRZENIES: mov eax,0xaaff\n"
               "mov ebx,eax\n"
               "inc eax\n" //??
               "inc eax\n"
               "dec ecx\n"
               "dec eax\n"
               "add %0,eax\n" // ??
               "push %0\n"
               "pop ebx\n"

               "mov eax,%0\n"
               "mov ebx,%1\n"
               "add eax,%1\n"
               "cmp eax, ebx\n"
               "sub eax,%1\n"
               "mul ecx\n"
               :/* TODO: zmienne wyjsciowe */:/* TODO: zmienne wejsciowe */: "eax", "ebx", "ecx"
         );

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