哪种语法和汇编架构最有用?

sta*_*zel 23 x86 assembly

我一直想学习装配,但似乎有一个与装配有关的信息的丛林很难解释.我还没有能够谷歌"学习集会"并开始.

首先,有两种语法:Intel和AT&T.有什么不同?为什么还有两个在使用?我何时需要使用一个与另一个?

其次,那里有很多芯片.英特尔AMD VS,32位与64位x86 VS其他架构......甚至86确实是一个全系列的芯片.那么,我怎么知道我从某个网页学习的程序集是否适用于我的机器?

存在更多变化(操作系统甚至在确定代码如何运行中起作用.

所以,最大的问题是,有了所有这些变量,我怎么知道我应该学习什么类型?什么是最常见的?当存在所有这些变化时,人们如何"知道装配"?

gre*_*ade 12

首先,有两种语法:Intel和AT&T.有什么不同?

主要区别是表面的:扭转操作数,例如.

为什么还有两个在使用?我何时需要使用一个与另一个?

英特尔使用的语法与几乎所有其他处理器ISA文档使用的语法大不相同.

GNU as对所有平台使用AT&T语法,并支持x86和x86_64的Intel语法.

其他汇编程序(如NASM,MASM等)仅使用Intel语法.

那么,我怎么知道我从某个网页学习的程序集是否适用于我的机器?

它记录在IntelAMD的处理器手册中.Sandpile也是一个很好的资源.

所以,最大的问题是,有了所有这些变量,我怎么知道我应该学习什么类型?什么是最常见的?

最广泛支持的是Pentium-pro类,即所谓的"i686"和K8级(称为"x86_64"或"amd64"或"EM64T").其中的变化是支持MMX还是SSE或其变体.查找CPUID指令 - 它将为您运行的处理器提供支持信息.

当存在所有这些变化时,人们如何"知道装配"?

我认为没有人"知道"x86.每个需要的人都有处理器手册的副本.

  • ARM的气体语法在某些方面类似于x86 Intel语法,目标是第一个,寄存器名称上没有'%`前缀.我认为AT&T与Intel语法最重要的一点是,一旦你理解了*指令*的作用,就不难用任何一种语法写下它们,或者读取任何一种语法.一旦你知道了这两点,只需要半分钟的心理"上下文切换",从思考到英特尔.你需要学习的是x86 ISA; 学习语法只是其中的一小部分,在您了解语法后,学习其他语法很容易. (2认同)

Tal*_*man 7

组装的重点在于您直接使用CPU基本指令集进行编码.由于不同的CPU具有不同的指令集,因此它们都是不同的.但是,一旦你知道一个"汇编"并获得基本思想,从一个指令集切换到另一个指令集相对简单.

我建议从80386汇编开始 - 几乎所有可以找到的PC都支持它,但没有太多的扩展来混淆刚开始的人.


Dav*_*ley 5

你应该学习什么类型的?这取决于你想用它做什么.您是否有兴趣了解有关PC的更多信息?你对嵌入式编程感兴趣吗?确保你有一些执行代码的方法.您可能想学习x86系列,但这并不是最容易学习的.回想起来,我认为最容易学习的是Radio Shack Color Computer和他们出售的手册.

最常见的取决于你想做什么.在通用计算机中有很多基于x86的芯片,但更多的芯片在更专业的角色,如智能手机和嵌入式系统.

通过学习世界上的每种汇编语言,你不了解汇编.你知道这一点,通过充分了解一两个来获得所有重要的想法,之后它主要是一种学习新计算机架构的方式.