Assembly 了解汇编的哪种语法和体系结构最有用?

Assembly 了解汇编的哪种语法和体系结构最有用?,assembly,x86,Assembly,X86,我一直想学习汇编,但似乎有一大堆与汇编相关的信息难以解释。我不仅仅能够在谷歌上搜索“学习组装”并开始工作 首先,有两种语法:Intel和AT&T。有什么区别?为什么还有两个在使用?我什么时候需要使用其中一个 其次,外面有很多芯片。英特尔vs AMD,32位vs 64位,x86 vs其他体系结构。。。甚至x86也是一个真正的芯片家族。那么,我如何知道我从某个网页学习的程序集是否适用于我的机器呢 还有更多的变体(操作系统甚至在决定代码如何运行方面发挥了作用) 所以,最大的问题是,有了所有这些变量,我

我一直想学习汇编,但似乎有一大堆与汇编相关的信息难以解释。我不仅仅能够在谷歌上搜索“学习组装”并开始工作

首先,有两种语法:Intel和AT&T。有什么区别?为什么还有两个在使用?我什么时候需要使用其中一个

其次,外面有很多芯片。英特尔vs AMD,32位vs 64位,x86 vs其他体系结构。。。甚至x86也是一个真正的芯片家族。那么,我如何知道我从某个网页学习的程序集是否适用于我的机器呢

还有更多的变体(操作系统甚至在决定代码如何运行方面发挥了作用)


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

汇编的全部要点是您直接使用CPU基本指令集进行编码。由于不同的CPU有不同的指令集,它们都是不同的。但是,一旦您知道一个“汇编”从基本思路来看,从一个指令集切换到另一个指令集是相对简单的


我建议从80386汇编开始——几乎所有你能找到的PC都支持它,但没有太多的扩展来迷惑刚开始的人。

除非你选择你想使用的平台,否则很难判断哪个汇编“最有用”


如果你选择PC(英特尔、amd)从x86汇编开始。有一个针对不同CPU的通用指令集+一些特定于技术的指令,如SSE。如果您想为Windows开发MASM,那么Unix FASM将是一个不错的选择。

实际上,现在大多数开发人员不需要了解汇编语言。但是,了解>组装(机器架构、寄存器、内存等)背后的概念。为此,只需学习一个CPU即可

查看-SteveGibson是目前为数不多的积极在汇编中编写应用程序的开发人员之一,他在自己的网站上拥有丰富的资源

首先,有两种语法:Intel和AT&T。有什么区别

它们是表面的:例如,反向操作数

为什么还有两个在使用?我什么时候需要使用其中一个

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

GNU
as
对所有平台使用AT&T语法,并支持针对x86和x86_64的英特尔语法

其他汇编程序(如NASM、MASM等)专门使用英特尔语法

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

它记录在和的处理器手册中。也是一个很好的资源

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

最受广泛支持的是奔腾pro类,即所谓的“i686”和K8类(称为“x86_64”或“amd64”或“EM64T”)。它们的变体包括是否支持MMX或SSE或其变体。查找CPUID指令-它将为您运行的处理器提供支持信息

当存在所有这些变化时,人们如何“了解装配”呢


我认为没有人“知道”x86。每个需要处理器手册的人都有一份。

我发现x86汇编并不像第一个汇编程序那么容易学习。msp430真的很容易。世界上ARM处理器比80x86多,所以它是一个不错的平台,而且很容易学习,除了pc和stack n之外,它还有很多寄存器o特殊寄存器——它们都平等地执行相同的任务。我首先学习了lsi/pdp11(不,不太旧)这是如此简单和直接,它确实使学习任何其他容易。它是汇编语言,C语言的起源。不知道你会在哪里学习,msp430是不远的距离,是可用的


在我写了这篇文章之后,问题就变了。重要的答案是首先学习编程,但我想你已经知道了,这并不特定于汇编程序。其次,通过将编程步骤分解为寄存器加载、存储和alu类型操作来学习执行这些编程步骤。了解中断及其影响,中断可以发生在任意两条指令之间,您必须保留机器的状态、寄存器和标志等。一些处理器为您执行大部分操作,因此您可能需要尝试几种不同的方法来了解复杂性。中断和中断服务例程是高级的,只是能够将任务分解为简单的小操作通常基于寄存器的编程可以称为汇编编程。

我记得(我想)读过一本关于x86汇编的入门书Peter Norton。这本书引导初学者完成为MS-DOS创建全屏硬盘编辑器的过程。这是最好的学习方法,因为您可以充分体验x86体系结构中的底层硬件,并可以将这些知识应用于其他CPU。DOS中断的知识不太有用,但是仍然很有趣。

我很久以前读过Jeff Duntenmann的《优秀》一书。这可能是我见过的唯一一本关于80x86汇编程序初学者的书,而且是一本非常好的书。我想其中的很多东西都有些过时了,但是在x86上用汇编程序本身编程对于现在的大多数事情来说已经过时了。但是如果你是寻找开始,你需要一个基金会,我认为他的书是你想去的地方。