![]() |
1
7
我认为学习低级语言(如汇编语言、指针和内存管理)的主要实践优势在于,当您编写或审阅高级代码时,您能够更好地本能地或下意识地发现性能问题或其他缺陷。 一个普通的开发人员可能会编写一个简单的循环,并认为,“这段代码迭代一组整数,并将每个整数写入控制台。” 专家开发人员可能会编写相同的循环并认为,“这段代码迭代一组整数,并且必须将每个元素框起来以调用ToString方法,ToString必须将字符串的格式设置为以10为基的格式,这有点不寻常,然后框起来的整数和格式化的字符串都将很快符合垃圾收集的条件,因为没有引用NCES将保留,第一次运行此方法时,需要对其进行JIT'ED…“等操作。 10次中有9次可能无关紧要。但是,每10个开发者中就有1个会注意到代码中的一个问题,这是普通开发者永远不会想到的。 |
![]() |
2
5
你需要学习阅读汇编,这样你就可以知道当一个复杂的语句爆炸时出了什么问题。CPU调试窗口不应该是一个神秘的地方。 |
![]() |
3
4
指针/内存管理比汇编语言更通用。你需要理解C和C++,如果你必须用C来维护代码,你可能需要它们。 对于汇编语言,有时读取C编译器生成的汇编程序代码,以查明它是否生成正确和有效的代码是有用的。 |
![]() |
4
3
我认为学习新语言很好。它打开了我的心扉。有些语言比其他语言更开放思想。我想说装配工就是其中之一。它强制您考虑诸如调用堆栈和指令指针之类的东西。它会让你更加欣赏更高级的语言。另一种有趣的学习语言是附言。 |
![]() |
5
3
我不认为你 需要 为了任何事情学习装配 实用。 但是,它将确保您了解作为开发人员所做工作的真正根源。从本质上讲,汇编编程是学习芯片逻辑和体系结构的一门学科。我已经有二十多年没有编程汇编了,但是它仍然告诉我在编程C时所做的选择。 |
![]() |
6
2
这是一个总是会被问到的问题:“为什么我应该知道任何事情。”等等。好吧,也许你可以得到一份除了构建下一个通用CRUD应用程序或类似的工作。如果您想进行任何类型的系统开发,掌握汇编的工作知识是非常有帮助的,即使不是至关重要的。至于你“错过”了什么,也许你错过了真正了解计算机是如何工作的。有些人认为这是可取的。有些人不这样,有些人制造处理器。有些人挖沟。这完全是个人喜好的问题:) |
![]() |
7
1
学习什么是装配。 真正学习如何阅读(和理解)它的小片段:如何在你的头脑中行走/跨过它。 也许也可以,用一个调试器来逐步完成其中的一些操作(包括看到内存和寄存器被更改)。 理想情况下,找到一些带注释的部件。 但是,不要费心去学习如何编写汇编:相反,学习写C或C++可能是“低”的,这是最实用的。 |
![]() |
8
1
指针和内存管理实际上与程序集是不同的问题。如果你想做C/C++,那么你需要学习指针和内存管理,因为它们是语言的一部分。但是,即使你计划在一生中只使用Java(Java),你也应该学习一些内存管理,以避免写GC时内存泄漏,指针只是原子类型和对象引用之间的区别。你需要这些概念,否则你会写不起作用的程序! 学习装配的实际原因:调试和优化。即使你不编写任何程序集,但在某一天,你可能需要优化C/C++代码来实现性能。在这种情况下,你需要能够 阅读 为您的内部循环装配,即使您不需要编写它的另一行。 最后,我认为你对“了解你计算机的底层工作”和“能使学习汇编工作值得的实用建议”的区分是错误的。无知无益。学习计算机的工作原理 是 一个值得努力的实用建议! 我有一个预言:不久的某一天,你的程序将运行得太慢而无法实际运行,并且会因内存不足而间歇性崩溃。在那一天,完全尖叫的焦虑不知道到底发生了什么,或从哪里开始寻找,以解决它将偿还你的业力债务,连同利息… |
![]() |
9
0
如今,许多汇编语言实际上都是相当高的级别。 如果你学习“C”,它就足够接近于组装,从而获得大部分的学习收益,这是事实。 编辑:再想一想,在克努斯的书中,他描述了一种理想化的汇编语言。你学着读那些书不会大错特错的。 |
![]() |
10
0
我能想到的另一个实际原因是反向工程应用程序代码,仅为教育目的而修改它,因为破解程序广泛使用这种代码来绕过共享软件应用程序保护,如时间限制或序列号。 像win32dasm这样的应用程序可以将可执行文件转换成汇编代码,以后可以用hiew这样的十六进制编辑器修改汇编代码。你可以学到很多关于程序流程的知识。 |
![]() |
11
0
嗯,在实践层面上,当我第一次学习80年代早期的代码时,我在6502汇编程序上上了一节课,我还做了一些8088汇编程序。从那以后,它一直是偶尔使用的,但我不能说它是永远的。 真的? 在25年的时间里,我不止一次或两次走出困境。在一个相当基本的层次上摸索C更有用。YMMV作为背景当然有帮助,但作为直接的实际利益?真是边缘化。 然而,有一件事被证明是有用的,那就是在更低的层次上。我上了一堂关于芯片设计的课(与非门等等),作为课程的一部分,我在一些深度上学习了形式布尔逻辑。从那以后,这就非常有用了——令人惊讶的是,有那么多的编码人员并不真正知道他们在处理and s、ors和nots时在做什么——) |
![]() |
12
0
我认为学习计算机体系结构,结合装配,会让你的思想开阔一点。 这将有助于解释许多性能问题,例如解析器速度慢,因为有很多分支,管道很容易被刷新,分支预测器无法补偿所有问题。 此外,不同的架构也有其独特之处。有人谈到了一个汇编技巧来交换2个寄存器,涉及XOR。它可以工作,并且对于顺序执行核心(最近的例子是Intel Atom和Netbooks中的VIA C7)运行得很好,但对于顺序不正确的核心则不是很好。 了解这一点可能有助于通过在程序集中检查编译不良的代码,并且可能能够用更高级的语言编写代码,以避免编译器优化器的缺陷。我不是想拆散他们,但他们只是不能完美地调音。 |
![]() |
13
0
学习装配的最大实际优势是性能。您可以在需要时优化到近乎完美。 |
![]() |
14
0
我有一些实际的例子来说明为什么你需要知道什么是在遮光罩下。在此上下文中,您可能会发现一些有用的链接是- |
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 3 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 3 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 3 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 3 年前 |