Zif*_*fre 72
一个人在另一个人身上确实没有优势.我同意英特尔语法更容易阅读.请记住,AFAIK,所有GNU工具都可以选择使用Intel语法.
看起来你可以让GDB使用Intel语法:
set disassembly-flavor intel
GCC可以使用英特尔语法-masm=intel
.
Meh*_*ari 40
GNU汇编程序(GAS)的主要语法是AT&T.英特尔语法是一个相对较新的补充.Linux内核中的x86程序集采用AT&T语法.在Linux世界中,它是常见的语法.在MS世界中,Intel语法更为常见.
就个人而言,我讨厌AT&T语法.有很多免费的汇编程序(NASM,YASM)以及支持Intel语法的GAS,因此在Linux中执行Intel语法不会有任何问题.
除此之外,它只是一种语法差异.两者的结果将是相同的x86机器代码.
Gun*_*iez 30
一个人在另一个人身上确实没有优势.我不同意英特尔语法更容易阅读,因为我个人讨厌英特尔语法.请记住,AFAIK,所有GNU工具都可以选择使用Intel语法.
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]
Run Code Online (Sandbox Code Playgroud)
......随着更复杂的指令,它变得更加复杂
'努夫说.
PS:这个答案的存在主要是因为在其他一些答案中突出(恕我直言)的弱点,这些答案实际上不是答案,而是意见.当然,这个答案实际上只是我的拙见.
PPS:我不讨厌英特尔语法,我只是不在乎.
Jac*_*b B 21
它是"相同的语言",因为它编译为相同的机器代码,具有相同的操作码等.另一方面,如果你正在使用GCC,你可能想要学习AT&T语法,因为它是默认 - 没有改变编译器选项等来获得它.
我也对Intel-syntax x86 ASM(在DOS上也是如此)进行了研究,并且在切换到C/UNIX时发现它更直观.但是一旦你学习了AT&T,它看起来就会那么简单.
我不会那么想的 - 一旦你了解英特尔,就很容易学习AT&T,反之亦然.实际的语言比语法更难掌握.因此,只要专注于一个,然后在它出现时学习另一个.
pho*_*an1 20
这是一种专业的标志,你愿意适应任何正在使用的东西.一个或另一个没有真正的优势.intel语法在Microsoft世界中很常见,AT&T是Linux/Unix中的标准.由于任何一个都没有优势,人们倾向于在他们首先看到的任何东西上留下印记.也就是说,一个专业的程序员提出了类似的东西.使用他们在工作中或您正在使用的域中使用的任何内容.
英特尔语法涵盖了所有内容(假设汇编程序/反汇编程序是最新的英特尔添加到其指令集中的垃圾).我肯定at t是一样的.
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]
......随着更复杂的指令,它变得更加复杂
'努夫说.