我一直想学习装配,但似乎有一个难以解释的与装配相关的信息的丛林。我还没有能够谷歌“学习集会”并开始行动。
首先,有两种语法:Intel和AT& T.有什么不同?为什么还有两个在使用?我何时需要使用一个与另一个?
其次,那里有很多筹码。英特尔与AMD,32位与64位,x86与其他架构相比......甚至x86也是一个完整的系列芯片。那么,我怎么知道我从某个网页学习的程序集是否适用于我的机器?
存在更多变化(操作系统甚至在确定代码运行方式中起作用。
所以,最重要的问题是,有了所有这些变量,我怎么知道我应该学习什么类型?什么是最常见的?当存在所有这些变化时,人们如何“知道装配”?
答案 0 :(得分:12)
首先,有两种语法:Intel和AT& T.有什么区别?
main differences是肤浅的:例如反转的操作数。
为什么还有两个在使用?我何时需要使用一个与另一个?
英特尔使用的语法与几乎所有其他处理器ISA文档使用的语法大不相同。
GNU as
对所有平台使用AT& T语法,并支持x86和x86_64的Intel语法。
其他汇编程序(如NASM,MASM等)仅使用英特尔语法。
那么,我如何知道我从某个网页学习的程序集是否适用于我的机器?
来自Intel和AMD的处理器手册中记录了这一点。 Sandpile也是一个很好的资源。
所以,最重要的问题是,有了所有这些变量,我怎么知道我应该学习什么类型?什么是最常见的?
最广泛支持的是Pentium-pro类,即所谓的'i686'和K8-class(称为'x86_64'或'amd64'或'EM64T')。其中的变化是支持MMX还是SSE或其变体。查找CPUID指令 - 它将为您运行的处理器提供支持信息。
当存在所有这些变化时,人们如何“知道装配”?
我认为没有人“知道”x86。每个需要的人都有一份处理器手册。
答案 1 :(得分:7)
组装的重点在于您通过直接使用CPU基本指令集进行编码。由于不同的CPU具有不同的指令集,因此它们都是不同的。但是,一旦你知道一个“汇编”并获得基本思想,从一个指令集切换到另一个指令集相对简单。
我建议从80386程序集开始 - 几乎所有可以找到的PC都支持它,但是没有太多的扩展来混淆刚开始的人。
答案 2 :(得分:5)
你应该学习什么类型的?这取决于你想用它做什么。您是否有兴趣了解有关PC的更多信息?你对嵌入式编程感兴趣吗?确保你有一些执行代码的方法。您可能想学习x86系列,但这并不是最容易学习的。回想起来,我认为最容易学习的是Radio Shack Color Computer和他们出售的手册。
最常见的取决于你想做什么。在通用计算机中有很多基于x86的芯片,但是更多的芯片用于更专业的角色,例如智能手机和嵌入式系统。
通过学习世界上的每种汇编语言,你不了解汇编。你知道它可以通过充分了解一两个来获得所有重要的想法,之后它主要是一种学习新计算机架构的方式。
答案 3 :(得分:2)
实际上,大多数开发人员最近都不需要了解汇编语言。但是,了解程序集(机器架构,寄存器,内存等)背后的概念非常有用。为此,学习一个CPU,这就是你所需要的。
查看http://www.grc.com/smgassembly.htm - 史蒂夫吉布森是为数不多的现在积极编写应用程序的开发人员之一,他在他的网站上拥有丰富的资源。
答案 4 :(得分:2)
我发现x86程序集不像第一个汇编程序那么容易学习。 msp430非常简单。世界上有更多的ARM处理器而不是80x86,所以它不是一个糟糕的平台,它是一个容易学习的,一个好的寄存器数量,除了pc和堆栈没有特殊的寄存器,它们都执行相同的任务同样。我首先学习了lsi / pdp11(没有,不是那么老),而且它非常简单直接,它确实让学习变得轻松。它是C语言派生自的汇编程序。不知道你将在哪里学习,msp430不是很远,而是可用的。
我写这篇文章后,问题发生了变化。最重要的答案是首先学习编程,但我怀疑你已经知道并且不是特定于汇编程序。第二,通过将其分解为寄存器加载和存储以及alu类型操作来学习执行这些编程步骤。了解中断及其影响,任何两条指令之间都可能发生中断,您必须保留机器状态,寄存器和标志等。有些处理器会为您完成大部分操作,因此您可能需要尝试一些不同的指令了解复杂性。中断和中断服务程序是先进的,只是能够将您的任务分解为小的简单操作,通常基于寄存器将有资格作为汇编编程。
答案 5 :(得分:2)
我记得通过(我认为)Peter Norton阅读关于x86汇编的介绍性书籍。本书为初学者介绍了为MS-DOS创建全屏硬盘编辑器的过程。这是学习的最佳方式,因为您可以获得进入x86架构的低级硬件的完整体验,并且可以将该知识应用于其他CPU。对DOS中断的了解不太有用,但仍然很有趣。
答案 6 :(得分:2)
很久以前,我曾读过杰夫邓滕曼出色的"Assembly Language - Step by Step"。它可能是我见过的唯一一本关于初学者的80x86汇编程序的书,而且它是一本非常好的书。我认为其中的很多东西都有点过时了,但是对于大多数事情来说,在x86上使用汇编程序进行编程本身就很不错。但如果你想要开始并想要一个基金会,我认为他的书就是你想要的。
答案 7 :(得分:2)
答案 8 :(得分:2)
如前所述,找一个你喜欢的汇编程序来支持你的硬件并学习它。有很多选择,并非所有选择都是英特尔或AMD。许多嵌入式系统使用其他芯片,包括古老的680x0系列。
至于了解所有汇编,是否有人知道所有编程语言?有谁知道所有的dot net API?你知道任何编程语言的一个小核心部分,你可以使用更多,但可能没有完全理解,你知道一些大的选择,但必须参考手册,有一个未知的数量,你什么都不知道。
即使是古老的6502也有数十种操作数和寻址方法。您将了解完成工作所需的知识。你做的工作越多,你学到的就越多。
答案 9 :(得分:1)
除非您选择要使用的平台,否则很难分辨哪个程序集“最有用”。
如果你去PC(intel,amd),请先从x86程序集开始。有一个用于不同CPU的通用指令集+一些技术特定指令,如SSE。如果你想开发适用于Windows的MASM,那么对于Unix FASM来说将是一个不错的选择。
答案 10 :(得分:1)
FASM
作为Windows的可执行文件准备好开箱即用;解压缩其存档并从命令行获取它。 Linux版本类似于编译的ELF可执行文件,而BSD / Unix版本作为目标文件,您使用本机C编译器编译并完成 - 已经完成以推出汇编代码。目前,正在开发一种近乎vm汇编程序的FAsm,它也将包括对ARM芯片的原生支持。
支持FAsm的IDE包括带有FAsm插件的WinAsm Studio,标题为Shofick的WAFasm打包在一个存档中,一旦解压缩,就可以立即运行。还有一个由独立开发者和FAsm论坛成员(John Found)和许多其他替代品构建并以FAsm为目标的Fresh IDE。
FAsm支持COFF,32& 64位PE以及适用于Linux和FreeBSD的ELF .exe和.dll /链接库文件格式。它提供宏支持以及遵循其格式的标头。有关FAsm支持的可执行文件格式的完整列表,请查看官方网站,因为有很多。
FAsm现在只有20年左右,而且它的大小仍然只有1兆字节。
FAsm有一个非常庞大的用户论坛,主题涉及它所服务的所有平台,以及从openGL到开发自制PNG图像透明系统和GUI应用程序的主题 - 非常棒的东西。
强烈推荐。
请记住汇编程序,与白痴推测相反,永远不会死,因为每个编译器都必须这样做 - 只需一个友好的FYI - 编译,链接,汇编......对吗?
线程可能有点老化,但主题仍然相关,并在关闭时注意这个注释!