Ograniczenia składni zespołu Intela w porównaniu do AT & T [zamknięte]

Dla mnie składnia Intela jest znacznie łatwiejsza do odczytania. Jeśli przejdę przez assembly forest koncentrując się tylko na składni Intela, czy coś przeoczę? Czy jest jakiś powód, dla którego chciałbym przełączyć się na AT & T (poza tym, że mogę czytać montaż AT&T innych osób)? Moja pierwsza wskazówka jest taka, że gdb domyślnie używa AT & T.

Jeśli to ma znaczenie, skupiam się tylko na dowolnej relacji i składni do Linuksa / BSD i języka C.

Author: Josh Caswell, 2009-06-10

7 answers

Naprawdę nie ma przewagi jednego nad drugim. Zgadzam się jednak, że składnia Intela jest dużo łatwiejsza do odczytania. Pamiętaj, AFAIK, że wszystkie narzędzia GNU mają również możliwość użycia składni Intela.

Wygląda na to, że GDB może używać składni Intela:

set disassembly-flavor intel

GCC może wykonywać składnię Intela za pomocą -masm=intel.

 65
Author: Zifre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 21:32:12

Podstawowa składnia GNU assemblera (gas) to AT&T. składnia Intela jest stosunkowo nowym dodatkiem do niej. montaż x86 w jądrze Linuksa jest w składni AT & T. W świecie Linuksa to powszechna składnia. W MS world składnia Intela jest bardziej powszechna.

Osobiście, ja nienawidzę składni AT & T . Istnieje wiele darmowych asemblerów (NASM, YASM) wraz z GAS, które również obsługują składnię Intela, więc nie będzie żadnych problemów z wykonywaniem składni Intela w Linuksie.

Poza tym, to tylko różnica składniowa. Rezultatem obu będzie ten sam kod maszynowy x86.

 37
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 21:36:13

Naprawdę nie ma przewagi jednego nad drugim. Nie zgadzam się jednak, że składnia Intela jest dużo łatwiejsza do odczytania, ponieważ osobiście nienawidzę składni Intela . Pamiętaj, AFAIK, że wszystkie narzędzia GNU mają również możliwość użycia składni Intela.

at&t noprefix                   intel
mov eax, -4(ebp,edx,4)          mov DWORD PTR[-4 +ebp +edx *4], eax
mov eax, -4(ebp)                mov DWORD PTR[-4 +ebp], eax
mov edx, (ecx)                  mov DWORD PTR[ecx], edx
lea (   ,eax,4), eax            lea eax, DWORD PTR[8 + eax*4]
lea (eax,eax,2), eax            lea eax, DWORD PTR[eax*2+eax]

...i staje się bardziej skomplikowana dzięki bardziej złożonym instrukcjom

"Nuff said.

PS: ta odpowiedź istnieje głównie z powodu podkreślania (IMHO) słabości w niektórych innych odpowiedziach, które w rzeczywistości nie są odpowiedzi, ale opinie. I oczywiście ta odpowiedź w rzeczywistości jest tylko moim skromnym zdaniem.

PPS: nie nienawidzę składni Intela, po prostu mnie to nie obchodzi.

 32
Author: Gunther Piez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-31 18:22:50

Jest to "ten sam język", ponieważ kompiluje się do tego samego kodu maszynowego, ma te same kody opcodes, itp. Z drugiej strony, jeśli w ogóle używasz GCC, prawdopodobnie będziesz chciał nauczyć się składni AT & T, tylko dlatego, że jest to domyślne--bez zmieniania opcji kompilatora, itp. żeby ją zdobyć.

Ja też przeciąłem zęby na Intel-syntax x86 ASM (również na DOS-ie) i okazało się, że jest bardziej intuicyjny początkowo przy przełączaniu na C / UNIX. Ale kiedy nauczysz się AT & T, będzie to wyglądać tak samo łatwo.

Nie dałbym tego dużo myśli - - - łatwo się nauczyć W&T, gdy znasz Intela i vice-versa. Rzeczywisty język jest znacznie trudniejszy do opanowania niż składnia. Więc po prostu skup się na jednym, a potem naucz się drugiego,kiedy nadejdzie.

 21
Author: Jacob B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 21:37:22

To oznaka profesjonalizmu, że jesteś gotów dostosować się do tego, co jest w użyciu. Nie ma realnej przewagi dla jednego lub drugiego. Składnia Intela jest powszechna w świecie Microsoft, AT & T jest standardem w systemie Linux/Unix. Ponieważ nie ma żadnej przewagi, ludzie mają tendencję do odciskania na tym, co zobaczyli pierwsi. To powiedziawszy, profesjonalny programista podnosi ponad takie rzeczy. Używaj tego, czego używają w pracy lub w domenie, w której pracujesz.

 19
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 06:25:02

Składnia Intela obejmuje wszystko (zakładając, że asembler / disassembler jest aktualny z najnowszymi śmieciowymi Intel dodanymi do ich zestawu instrukcji). Jestem pewien, że at & t jest taki sam.

at&t                             intel
movl -4(%ebp, %edx, 4), %eax     mov eax, [ebp-4+edx*4]
movl -4(%ebp), %eax              mov eax, [ebp-4]
movl (%ecx), %edx                mov edx, [ecx]
leal 8(,%eax,4), %eax            lea eax, [eax*4+8]
leal (%eax,%eax,2), %eax         lea eax, [eax*2+eax]

...i staje się bardziej skomplikowane z bardziej złożonymi instrukcjami

"Nuff said.
 7
Author: L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-01 13:53:48

Moim pierwszym językiem asemblera był MIPS, który zauważyłem, że jest bardzo podobny do składni ATT. Więc wolę składnię ATT, ale to nie ma znaczenia, dopóki możesz ją przeczytać.

 3
Author: gsk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-07 19:14:20