首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习用机器代码编程的资源吗?

学习用机器代码编程的资源吗?
EN

Software Engineering用户
提问于 2011-12-20 09:09:54
回答 9查看 64.4K关注 0票数 26

我是一名学生,刚开始编程,我喜欢它,从Java到C++,再到C。我向后移动到最底层,并打算深入到大会。

但是,令我惊讶的是,很多人说它没有C那么快,也没有用。他们建议学习如何编写内核或编写C编译器。我的梦想是学会用二进制(机器代码)编程,或者编写裸金属程序(物理上的微控制器),或者编写bios或引导加载程序或类似的东西。

经过如此多的研究后,我听到的唯一可能的事情是,在这个时代和时代,我能找到的最接近机器语言的是一个十六进制编辑器。还有其他我不知道的事吗?有什么资源可以学习在机器代码中编程吗?最好使用8位微控制器/微处理器。

这个问题和我的相似,但我对实践学习感兴趣,然后再理解理论。

EN

回答 9

Software Engineering用户

回答已采纳

发布于 2011-12-20 10:19:22

人们不使用机器代码编程(除非他们是受虐狂)。他们使用(或开发)工具生成机器代码(编译器或汇编程序,包括交叉开发工具),或者可能是生成机器代码的库(LLVM、libjit、GNU闪电,.)。因此,有关机器代码生成、编译、优化器和微体系结构的资源也是相关的.

通常,一个好的优化编译器会生成比你能做的更好的机器代码。您可能无法编写比一个好的优化器更好的200行汇编程序代码。

如果您想了解机器代码,请先学习程序集。它非常接近机器代码。明智地使用它,只用于不能用C编写的东西(或者使用一些高级语言,如Ocaml、Haskell、Common、Scala)。一种很好的方法是在C函数中使用asm指令(特别是GCC 扩展装配特性)。读取组装代码(由gcc -S -O2 -fverbose-asm生成)也会有帮助。

阅读Linux程序集操作是一件好事。

当前处理器的指令集结构(即芯片理解的指令集)相当复杂。常见的有x86 ( 32位模式下的典型PC机)、X86-64 ( 64位模式下的桌面PC )、手臂 (智能手机、.)、PowerPC等,它们都很复杂(出于历史和经济原因)。也许,首先学习一个假设的指令集,例如,Knuth的MMIX更简单。

票数 27
EN

Software Engineering用户

发布于 2011-12-20 11:32:09

如前所述,学习大会。

汇编语言是一种用于计算机、微处理器、微控制器和其他可编程设备的低级编程语言.它实现了机器代码和其他常量的符号表示,这些常量是对给定CPU架构进行编程所需的。

所以程序集是一个symbolic representation of machine code

你现在可能会问:“好吧,那我该怎么学呢?”我很高兴你问:

  1. 明白这是什么。这是一个非常低的水平,将给你一个非常深入的理解一台计算机.您可能需要从维基百科开始,然后阅读这短文
  2. 学着点!最好的读取方式可能是汇编语言艺术汇编语言一步一步:用Linux编程
  3. 开始编码!
票数 13
EN

Software Engineering用户

发布于 2012-01-11 16:36:49

我强烈建议你重新考虑你的目标,原因如下:

我第一次在BBC微型计算机上学习了6502汇编语言( B型,32K型)。它有一个很棒的基本实现,其中包括一个宏汇编程序。我们在学校有他们,所以我写了各种各样的恶作剧程序,这些程序会做一些事情,比如直接屏幕缓冲操作,让Lemming在每个屏幕上行走,在房间周围(它们是联网的),如果机器没有使用10分钟的话。这让我七年级的朋友们笑了一声。

当我在家里买到一台商品64时,我了解到它有一个6510 CPU,它也运行6502汇编语言,但附带了一些有趣的附加功能。我不得不购买一个汇编程序(在一个墨盒上),并通过BASIC调用程序。随着编写一款畅销书游戏的宏伟愿景,我最终成功地创建了几个演示,在中断上设置了几个位旋转视频显示硬件寄存器,以实现有趣的彩色条形效果,这些效果与时髦的芯片音乐相对应。令人印象深刻,但没那么有用。

然后,我得到了一个橡子阿基米德A310,其中有一个ARM2 CPU,所以我使用了同样令人敬畏的基本实现与内置宏汇编程序,作为英国广播公司的微型(相同的遗产)。我设法组装了几个游戏,一个艺术朋友提供图形,加上一些正弦基础上的绊脚石演示。这两种方法都是很难编程的,坏代码可能会摧毁机器(意外跳闸硬件复位寄存器等),如果我没有保存(软盘!),就会失去所有的东西。

在大学时,我被介绍给C++,因此C.我可以用它来编写Sun/Solaris和其他大型主机计算机的程序。我不知道这些机器运行在什么CPU架构上--我从来不需要使用汇编程序或读取机器代码,因为C++工具为我提供了生产专业应用程序所需的能力。

在Uni之后,我研究了Windows和几种Unix的味道。C和C++在所有这些机器上工作,最终Java也这样做了。

然后,我在Windows和Dreamcast上工作,使用C++和DirectX进行全面的工具链调试。

然后,我开始为智能电视工作(2000年),从事基于ARM的芯片组。虽然我在ARM2方面的经验可能与此相关,但工作是基于C的。我发现,我在阿基米德( Archimedes )上所做的所有硬件测试都可以在C中完成,使用简单的位旋转操作。我的部分角色是将代码库迁移到Windows、Playstation 2、Linux、其他电视和移动芯片组。所有这些平台都有一个C编译器(通常是GCC)和一些级别的API来编写底层机器--嵌入式世界很少是一个内核O/S。除了编写引导加载程序和迷你BIOS之外,我从来不需要知道任何特定平台的完整机器代码,这两个平台在第一个可用的机会(在设置陷阱向量、确保终端和指令模式以及建立堆栈)之后都跳入了C代码。

下一项工作是在Windows上使用C++、C#和JavaScript。没有机器代码。

当前的工作是在各种平台上使用C++、JavaScript、Python、HTML和其他语言。我不知道这些平台运行的是什么机器代码,我也不需要知道--编译器将我们的代码转换成任何需要的代码。如果它崩溃,我会在调试器中或通过运行时诊断(异常、信号等)捕获错误。

为了好玩,我在家里业余时间开发iOS应用程序。它使用Objective和一个跨多个芯片组工作的API。很明显,它们是基于手臂的,但在我的开发中,我从未见过任何机器代码。

尽管学习汇编语言是一项令人着迷的练习,但现在有了更高层次的工具和语言,可以让你的工作效率提高一个数量级(或两个)。

与JavaScript、Java、C#、C++或ObjC相比,令人惊叹的汇编语言/机器代码程序员可以获得的工作机会很少。

我建议你把这当作业余爱好/附带兴趣,而不是主要的目标。

票数 8
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/126095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档