Bagi saya, sintaks Intel jauh lebih mudah dibaca. Jika saya melewati hutan perakitan yang hanya berkonsentrasi pada sintaks Intel, apakah saya akan melewatkan sesuatu? Apakah ada alasan saya ingin beralih ke AT&T (selain dapat membaca rakitan AT&T orang lain)? Petunjuk pertama saya adalah bahwa gdb menggunakan AT&T secara default.
Jika ini penting, fokus saya hanya pada perakitan relasi dan sintaks mungkin harus ke Linux / BSD dan bahasa C.
Jawaban:
Benar-benar tidak ada keuntungan satu sama lain. Saya setuju bahwa sintaks Intel jauh lebih mudah dibaca. Ingatlah bahwa AFAIK, semua alat GNU memiliki opsi untuk menggunakan sintaks Intel juga.
Sepertinya Anda dapat membuat GDB menggunakan sintaks Intel dengan ini:
GCC dapat melakukan sintaks Intel dengan
-masm=intel
.sumber
lea -0x30(%rcx,%rax,8),%eax
adalah ATT yang berbelit-belitlea eax,[rcx+rax*8-0x30]
. Penggunaan + dan * sangat membantu dalam gaya Intel.Sintaks utama untuk GNU assembler (GAS) adalah AT&T. Sintaks Intel adalah tambahan yang relatif baru untuk itu. perakitan x86 di kernel Linux ada dalam sintaks AT&T. Di dunia Linux, ini adalah sintaks yang umum. Di dunia MS, sintaks Intel lebih umum.
Secara pribadi, saya benci sintaks AT&T . Ada banyak assembler gratis (NASM, YASM) bersama dengan GAS yang mendukung sintaks Intel juga, jadi tidak akan ada masalah dalam melakukan sintaks Intel di Linux.
Di luar itu, itu hanya perbedaan sintaksis. Hasil dari keduanya akan menjadi kode mesin x86 yang sama.
sumber
Benar-benar tidak ada keuntungan satu sama lain. Saya tidak setuju bahwa sintaks Intel jauh lebih mudah dibaca, karena secara pribadi saya benci sintaks Intel . Ingatlah bahwa AFAIK, semua alat GNU memiliki opsi untuk menggunakan sintaks Intel juga.
... dan menjadi lebih rumit dengan instruksi yang lebih kompleks
'kata nuff.
PS: Jawaban ini ada terutama karena alasan menyoroti kelemahan (IMHO) di beberapa jawaban lain yang sebenarnya bukan jawaban, tapi opini. Dan tentu saja jawaban ini pada kenyataannya hanyalah pendapat saya yang sederhana.
PPS: Saya tidak membenci sintaks Intel, saya hanya tidak peduli.
sumber
SOMEWORD PTR[]
jika ukuran operand jelas dari konteksnya. Tetapi Anda membutuhkannya jika memindahkan langsung ke lokasi memori (baikl
dari AT&T sebagai DWORD PTR dari Intel). Dan ya, contoh saya cukup dibuat-buat - tapi begitu juga contoh Anda. Jika Anda masih tidak melihat alasannya: Anda meninggalkan ukuran kata yang tidak diperlukan di Intel, tetapi memilikinya di AT&T. Anda memilih operan sedemikian rupa sehingga mereka selaras dengan baik di Intel, tetapi tidak melakukannya di AT&T.-4(ebp,edx,4)
sesuatu lebih baik dari[4*edx+ebp-4]
? Saya menemukan yang terakhir lebih intuitif.Ini adalah "bahasa yang sama", yang dikompilasi ke kode mesin yang sama, memiliki opcode yang sama, dll. Di sisi lain, jika Anda sama sekali menggunakan GCC, Anda mungkin ingin mempelajari sintaks AT&T, hanya karena itu default - tidak ada opsi kompiler yang berubah, dll. untuk mendapatkannya.
Saya juga memotong gigi saya pada Intel-syntax x86 ASM (pada DOS, juga) dan merasa lebih intuitif pada awalnya ketika beralih ke C / UNIX. Tapi begitu Anda mempelajari AT&T, itu akan terlihat sama mudahnya.
Saya tidak akan terlalu memikirkannya --- belajar AT&T itu mudah setelah Anda mengenal Intel, dan sebaliknya. Bahasa yang sebenarnya jauh lebih sulit dipahami daripada sintaksnya. Jadi dengan segala cara, fokuslah pada satu dan kemudian pelajari yang lain ketika itu muncul.
sumber
Itu tanda profesionalisme bahwa Anda bersedia menyesuaikan diri dengan apa pun yang digunakan. Tidak ada keuntungan nyata bagi yang satu atau yang lainnya. Sintaks intel umum di dunia Microsoft, AT&T adalah standar di Linux / Unix. Karena tidak ada keuntungan bagi salah satunya, orang cenderung membekas pada apa pun yang mereka lihat pertama kali. Konon, seorang programmer profesional mengangkat hal-hal di atas seperti itu. Gunakan apa pun yang mereka gunakan di tempat kerja, atau di domain tempat Anda bekerja.
sumber
Sintaks Intel mencakup semuanya (dengan asumsi assembler / disassembler adalah yang terbaru dengan junk terbaru yang ditambahkan Intel ke set instruksi mereka). Saya yakin at & t sama.
... dan menjadi lebih rumit dengan instruksi yang lebih kompleks
'kata nuff.
sumber
Bahasa assembly pertama saya adalah MIPS, yang saya perhatikan sangat mirip dengan sintaks ATT. Jadi saya lebih suka sintaks ATT, tetapi itu tidak terlalu penting selama Anda bisa membacanya.
sumber
lea -0x30(%rcx,%rax,8),%eax
danlea eax,[rcx+rax*8-0x30]
jørgensen diposting di atas. Dan tidak seperti AT&T, MIPS masih menggunakan format tujuan-pertama seperti yang lainnya. Selain itu, nomor MIPS tidak perlu diawali dengan $, dan nama register di MIPS pendek, jadi tidak terlalu tidak nyaman untuk memiliki% sepenuhnya seperti AT&T