4

我的目标集中在软件应用程序开发,也许是 Web 应用程序开发,但最有可能是桌面应用程序。我正在走上一条更熟悉 C/C++ 的道路,但我应该比这低得多,进入汇编吗?或者我对我的长期目标没有好处?

4

11 回答 11

12

看到这个问题有这么多“不”的答案,我真的很惊讶。我认为你应该学习汇编。

我不希望你会直接使用汇编作为你工作的一部分。但这并不意味着你不应该学习它。

学习汇编将教您计算机内部发生的事情。它将帮助您了解软件实际在做什么。

这真的是关于专业性。你打算成为一名专业的软件工程师吗?或者你会成为一个复制粘贴黑客?当然,后者可能会支付账单,但成为一名专业人士会更令人满意。

听到有人说,“不,不要费心学习组装”,在我耳边听起来就像“这是建造桥梁的食谱。你不需要学习物理或工程学来建造一座桥梁。只需按照这些食谱。 " 不,谢谢。

于 2008-10-06T01:36:45.463 回答
3

天,

我在做 Elect 时学习了 PDP 汇编程序。英。70年代后期的学位。我真正使用的最后一种汇编语言有四种不同的内存寻址模式。我看过的最后一个方言有 17 种模式!

不知道现在学习汇编程序能给你带来什么。那时它是我选择的 CS 流的重要组成部分。英。程度。

至于学习 C++,我只是坐下来学习“ Accelerated C++”,它本身就接近 C++,而不是“C with other bits”。

至于 C,我只会学习最新版本的“C Programming Lanuage”(又名)K'n'R

希望这可以帮助。

干杯,罗伯

现在,如果您询问纳米编程...(-:

于 2008-08-26T13:21:09.287 回答
2

“学一门集会方言值得吗?”

我已经专业地编写了汇编程序。M68k 运行传真机和扫描仪。此外,Windows VxD(虚拟设备驱动程序)早在 Windows 3/3.1 天后就有真正的内核。

当您编写汇编代码来执行普通的软件任务(复制内存、连接字符串、调用中断处理程序等)时,这很有趣。有时,您编写的汇编代码由 C 代码调用,以在给定的处理器上尽可能快地执行某些专门的任务。这可能更有趣,因为您正在寻找利用处理器为您提供的每个周期的方法。您关心处理器的 L1 缓存中的内容。您关心对齐内存中的数据以避免缓存线命中(如果我记得这个术语)。您关心双流水线处理器架构并以正确的顺序使用正确的 2 或 3 或 4 条指令,以便在单个时钟滴答声中发生 2 或 3 或 4 件事情(处理器的 XGHz 中的那些 HZ 之一)。

当您编写程序集以驱动定制硬件时,现在您正在执行诸如填充 16 字节内存缓冲区、设置 DMA 操作并将该数据发送到正在执行诸如驱动激光打印机鼓之类的操作的控制器之类的事情。并且磁鼓正在转动并且无法停止,并且希望在接下来的 5us 内获得下一个 16 个字节。当然,这可以用 C 或 C++ 完成。但例子不胜枚举。

我可能会删掉你问题的后半部分“学习一种装配方言是否值得?” 并使其成为“值得学习吗?”

如果你热爱编程,那么你如何定义“价值”就涉及到对编程的热爱。从这个意义上说,我从来没有在编程中学到过东西,也不认为这是值得的。即使我没有使用太多后记。

在同样的意义上,我几乎会说,越难学的东西,它就越“有价值”。

但抛开那些毛茸茸的废话不谈,我相信至少获得一些组装背景是值得的。继续研究如何编写程序集来替换一些简单的 stdlib 例程,如 strcpy、memmove 等。然后尝试优化它们,在计时时从 C 调用它们一百万次。

于 2008-10-06T01:04:21.707 回答
1

我不会开始学习 ASM。如果你想学习 C/C++,那就从那开始吧。随着代码质量的成熟,您可能会发现自己需要 ASM。99% 的情况下您不会,但有时您可能需要它。

此外,了解 ASM 有助于了解 C/C++ 在幕后所做的工作。但同样,在你变得更高级之前,你可能不需要它。

于 2008-08-26T12:57:49.467 回答
1

我做到了,我认为这在当时对我有帮助。它不再对我每天都有帮助,但我认为这取决于你的工作。

20 年前,我在 Commodore 上学习了汇编程序,然后又在大学的 IBM 大型机上学习了汇编程序。我不能说它对我目前的工作有帮助。

于 2008-08-26T12:59:45.830 回答
1

除非您有直接的应用程序,否则它可能不会有很多好处。如果您想了解一般知识,C/C++ 是一个很好的起点。

也就是说,组装带来的挑战非常有趣,它需要完全不同的心态来完成工作。

我花了一点时间通过编写TI-86计算器来学习 Z80 组装。Z80 指令集非常小,用汇编语言编写计算器的新颖性非常有趣。

ticalc.org有很多关于TI 汇编编程的好资源。

于 2008-08-26T13:02:39.643 回答
1

我同意马克。我认为这类似于用 C#、VB.NET 或其他 .NET 语言编写时学习 MSIL。它有助于了解幕后发生的事情,但您可以一生都在创建可以工作但永远不需要它的应用程序。

于 2008-08-26T13:05:26.440 回答
1

不。除非你想好玩,否则你真的不需要学习汇编。

有些事情你需要了解汇编,比如驱动程序创建、操作系统开发、漏洞利用开发,但除此之外,我个人相信你可以很高兴地在不知道的情况下永远编码。

如果您确实需要学习汇编,您会知道的-我不会为了学习而学习它..

于 2008-08-26T13:08:46.790 回答
1

如果您正在编写非托管 C++,那么至少了解基本的 x86 汇编、二进制数字系统等有时是非常宝贵的。我主要从事 C/C++ 开发,偶尔需要调试生产代码以查找特定于机器的错误- 编译器生成的代码表示,找到并修复错误的唯一方法是读取反编译的程序集并确定编译器生成它的原因。

有关汇编的更多信息,请参阅问题:学习汇编的最佳方法是什么?具体来说,对于有动态语言经验的人

于 2008-08-26T13:14:08.930 回答
1

组装不是很困难。一旦你熟悉了 C,花一两天时间学习基本的汇编。它在调试方面的帮助是巨大的,另外,它能够编写在速度方面比 C 等效的代码快 10、15 或更多倍的乐趣。

于 2008-10-06T01:24:21.510 回答
0

我不建议学习“现代汇编语言”。

然而,对MOS 6510汇编器有一点了解并浏览反汇编的C64内核,也就是它的操作系统和基本解释器,帮助我了解计算机内部发生的事情 - 诸如中断和内存页面之类的东西。

这可能会帮助您提示如何用其他语言编写优化的代码。但是,其中很多功能已经由现代编译器完成,因此我只建议您对那个黑匣子内部发生的事情感兴趣。

于 2008-08-26T13:27:14.547 回答