首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >掌握汇编语言编程技巧

掌握汇编语言编程技巧
EN

Stack Overflow用户
提问于 2010-07-07 22:27:10
回答 3查看 4.9K关注 0票数 9

我是一个DSP,嵌入式软件程序员,希望提高我的汇编语言编程技能。在我7年的职业生涯中,我一直在用C,Matlab编程,有点汇编语言编码。(ARM组件,DSP处理器组件)。

现在,我想提高我的汇编语言编码技能(它可以是任何汇编语言,不重要)的一个大量程,并将其提升到“专家级”。我知道用它进行更多的编程将是实现它的方法,但我在这里要问的是:

  • 人们在用汇编语言(任何语言)进行编码方面的经验,这是他们多年来用汇编语言进行编码的经验。
  • 学习新汇编语言时应牢记的指导方针
  • 用汇编语言高效、正确地编写代码的具体技巧和技巧
  • 如何有效地将给定的C代码转换为最优的汇编代码
  • 如何清楚地理解给定的程序集代码
  • 如何跟踪寄存器(其中包含操作数)、堆栈指针、程序计数器、如何更好地理解底层体系结构以及它为程序员提供的资源等等。

基本上,我想从那些做了详尽而密集的汇编语言编程的人那里得到一些“真实生活”的提示。

谢谢。

-AD

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-07 23:35:06

一个很好的起点应该是杰夫·邓特曼( Jeff )的书http://www.duntemann.com/assembly.htm。这本书是关于Linux下的x86编程的。我记得,这本书的前一个版本涵盖了Windows下的编程。这是一本初学者的书,因为它从开头开始:比特、字节、二进制算术等等。如果你愿意的话,你可以跳过这部分,但至少略读一下可能是个好主意。

我认为学习ASM编码最好的方法是: 1)学习硬件的基础知识,2)学习他人的代码。我上面提到的这本书是值得的。您也可能对汇编语言编程艺术感兴趣。

在我的时间里,我做了相当多的汇编语言编程,尽管在过去的15年里我做的并不多。正如一位评论者所指出的那样,当我考虑到与高级语言相比,开发和维护时间的增加时,很难证明这种微小的大小和性能提高是合理的。

尽管如此,我不会让你对ASM更有效率的追求泄气。更加熟悉处理器在这个级别上的工作方式,也只会提高您的HLL编程技能。

票数 6
EN

Stack Overflow用户

发布于 2014-11-06 08:06:23

这是一个相当广泛的问题,但我可能有一些小道消息给你。我编写了(按外观顺序排列) BAL (IBM360汇编)、8080A/8085、8086/8088/80186、68000 (但实际上不多)和80960汇编语言,再加上一些Sparc语言(虽然是为大学的一个班级编写的,所以我不记得具体内容了)。我的强项一直是嵌入式系统,尽管在我晚年,我实际上是在做网站,并与JavaScript的古怪之处搏斗。我的确很享受我多年的汇编语言,只是现在没有工作给我们这些老人……

我有几个小窍门给你。首先,您必须学习芯片寄存器;每个寄存器的用途是什么,是一般用途的特殊用途,浮点数学,等等。第二,标志;测试哪个标志触发,并在此时找到设置和清除这些标志的指令。它们通常很简单,就像CLC (“清除携带”- 8086/88/186)。找出芯片是大的还是小的,从左到右的顺序是从高到低,反之亦然。

位机动命令也很重要,例如OR、XOR、通过进位标志移动等。

然后是来自内存的书写,您的芯片汇编语言是如何实现这一点的?你能直接写到记忆里吗?非常依赖于您的硬件设置。将即时值写入寄存器的命令?因为基本上你在做数据的移动:在寄存器和内存之间。是内存寻址扁平(希望)或分段(aiiiiigh!)。

如果您有时间问题,因为您需要编写代码以避免浪费时间,那么您将需要设置这样的测试框架。记录开始时间、日志结束时间和中间代码。我学习汇编语言的全部原因是因为如果你想要快一点的话,那是因为你在汇编上写的。

首先,编写简短的测试版本,然后再开始编写大型文章。弄清楚你将如何决定结果是否完成(并不是所有的东西都有一个发光二极管来点亮,尽管它们能让生活变得更容易)。我使用了分析器;嵌入式系统并不总是可视的。一开始迈出一小步。

如果有编译器,请查看为特定芯片生成的程序集代码。尝试一个小的C函数来添加2个数字,然后去查看生成的代码。这样做你会学到很多东西。不要让汇编程序指令压倒你

我在胡说八道,我想你明白了。从小开始,测试,学习芯片,确保工程师提供给你写的位置,写什么。然后继续下去..。

不管怎样,祝你好运。我学到是因为我们必须这样做,而且我非常喜欢它。我变得非常擅长优化(我喜欢Michael的汇编语言Zen ),但是Intel芯片的编译器得到了非常高的优化,所以一般不需要汇编语言程序员。享受吧!

票数 1
EN

Stack Overflow用户

发布于 2010-07-10 22:22:23

最好的方法是编译C文档,查看输出并搜索您不知道的说明的文档。经验会随着时间的推移..。

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

https://stackoverflow.com/questions/3199388

复制
相关文章

相似问题

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