我强烈建议您重新考虑您的目标,这是为什么:
我首先在BBC微型计算机(型号B,32K)上学习了6502汇编语言。它有一个很棒的BASIC实现,其中包括一个宏汇编器。我们在学校里有它们,所以我写了各种各样的调皮程序,这些程序可以进行诸如直接屏幕缓冲操作等操作,以便在机器没有被使用10分钟的情况下,在整个屏幕(它们都联网)上遍历每个屏幕。 。这让我7年级的朋友们咯咯地笑了。
当我在家中获得Commodore 64时,我了解到它具有6510 CPU,它还运行6502汇编语言,但还带有一些有趣的功能。我必须购买一个汇编器(放在墨盒上)并通过BASIC调用程序。凭借编写畅销游戏的雄心壮志,我最终设法创建了几个演示,这些演示在中断时对视频显示硬件进行了位旋转,以制作有趣的彩条效果,并生动地表现出时髦的芯片音乐。令人印象深刻,但没那么有用。
然后,我得到了带有ARM2 CPU的Acorn Archimedes A310,因此我使用了与内置宏汇编器相同的,很棒的BASIC实现,与BBC Micro(相同)。我设法整理了一些游戏,这些游戏是由有风度的朋友提供的图形,以及一些基于正弦曲线的幻觉演示。两者都是很难编程的,错误的代码可能会使机器瘫痪(意外地使硬件复位寄存器跳闸,等等),如果我没有保存(到软盘!),则会丢失所有内容。
在大学,我被介绍给C ++,因此也被介绍给C。我能够用它来编程Sun / Solaris和其他一些大型主机。我不知道这些机器运行在什么CPU体系结构上-我从不需要使用汇编程序或读取机器代码,因为C ++工具赋予了我生产专业应用程序所需的能力。
加入Uni之后,我从事Windows和多种Unix版本的研究。C和C ++可以在所有这些机器上工作,而Java最终也可以。
然后,我使用带有DirectX的C ++和全面的调试工具链,在Windows和Dreamcast上工作。
然后,我从事了用于智能电视的基于ARM的芯片组的工作(2000年)。尽管我在ARM2方面的经验可能与这里有关,但这项工作是基于C的。我发现,我在阿基米德上完成的所有硬件工作都可以使用简单的位混合操作在C中完成。我的部分职责是将代码库迁移到Windows,Playstation 2,Linux,其他电视和移动芯片组。所有这些平台都可以使用C编译器(通常为GCC)和某种级别的API来写入底层计算机-嵌入式世界很少是内核O / S。除了编写引导加载程序和mini-BIOS之外,我再也不需要知道任何特定平台的完整机器代码,这两者在第一个可用的机会(在设置陷阱矢量,
下一项工作是在Windows上使用C ++,C#和JavaScript。没有机器码。
当前的工作是在各种平台上使用C ++,JavaScript,Python,LUA,HTML和其他语言。我不知道这些平台在运行什么机器代码,也不知道-编译器将我们的代码转换为所需的代码。如果崩溃,我会在调试器中或通过运行时诊断(异常,信号等)捕获错误。
为了娱乐,我在家里很少有空的时间上开发iOS应用程序。它使用Objective-C和跨多个芯片组工作的API。显然它们是基于ARM的,但是在开发中我从未见过任何机器代码。
虽然这是学习汇编语言的一项引人入胜的练习,但是现在有许多高级工具和语言可以使您的工作效率提高一个(或两个)数量级。
与JavaScript,Java,C#,C ++或ObjC之类的东西相比,出色的汇编语言/机器代码程序员可利用的工作机会微乎其微。
我建议您将其作为爱好/附带兴趣而不是主要目标。