我的目标主要集中在软件应用程序开发,也许是Web应用程序开发,但很可能是桌面应用程序。我正在走上越来越熟悉C / C ++的道路,但是我应该比这更低,进入装配?或者我的长期目标没有好处?
答案 0 :(得分:10)
我很惊讶地看到这个问题有这么多“不”的答案。我认为你应该学习装配。
我不希望你直接使用汇编作为你工作的一部分。但这并不是因为你不应该学习它。
学习大会将教你如何在计算机内部进行操作。它将帮助您了解软件实际在做什么。
这真的是关于职业化。你会成为一名专业的软件工程师吗?或者你会成为一个复制粘贴黑客?当然,后者可能会支付账单,但作为一名专业人士会更令人满意。
听到有人说,“不,不要费心学习装配”,听起来像是“这是建筑桥梁的食谱。你不需要学习物理或工程来建造桥梁。只需按照这些食谱。“不,谢谢。
答案 1 :(得分:3)
天儿真好,
当我选举时,我学会了PDP汇编程序。工程。在70年代后期的学位。我真正使用的汇编程序的最后一种方言有四种不同的内存寻址方式。我用的最后一种方言有17种模式!
现在还不确定学习汇编程序给你带来了什么。那时候它是我选中的CS流的重要组成部分。工程。度。
关于学习C ++,我只是坐下来研究“Accelerated C++"”,它本身就接近C ++而不是“C与其他位”。
关于C,我只是使用最新版本的"C Programming Lanuage"(a.k.a。)K'n'R
希望这有帮助。
欢呼声, 罗布
现在,如果你问过纳米程序......( - :
答案 2 :(得分:2)
“学习集会方言是否值得?”
我专业编程装配。 M68k运行传真机和扫描仪。此外,Windows VxDs(虚拟设备驱动程序)在它们拥有真正的内核之前3 / 3.1天返回窗口。
当您编写汇编代码来执行普通的软件时(复制内存,连接字符串,调用中断处理程序等),这很有趣。有时您会编写由C代码调用的程序集,以便在给定的处理器上尽快执行某些专门的任务。这可能更有趣,因为您正在寻找利用处理器为您提供的每个周期的方法。您关心处理器的L1缓存中的内容。你关心在内存中对齐数据以避免高速缓存行命中(如果我记得这个术语)。您关心双流水线处理器架构,并按正确的顺序使用正确的2或3或4指令,以便在单个时钟周期内发生2或3或4个事情(处理器的XgHz中的那个HZ的一个)。 / p>
当您编写程序集来驱动自定义硬件时,现在您正在做一些事情,比如填充16字节的内存缓冲区,设置DMA操作并将数据发送到控制器上,这样做就像驱动激光打印机鼓一样。鼓正在转动,无法停止,并希望在接下来的5us内接下来的16个字节。当然,这可以用C或C ++完成。但这些例子是无穷无尽的。
我可能会删除你问题的后半部分“学习汇编方言是否值得?”并且说“它值得学习吗?”
如果你喜欢编程,你如何定义“价值”涉及编程之爱的一些组成部分。从这个意义上说,我从来没有在编程中学到一些东西,也没想到它值得。即使我没有太多使用它。
从同样的意义上说,我几乎会说要学习的东西越难,它就越“值得”。
但是所有那些蓬松的废话放在一边,我相信至少得到一些装配背景是值得的。继续并弄清楚如何编写程序集来替换一些简单的stdlib例程,如strcpy,memmove等。然后尝试优化它们,在计时时从C调用它们一百万次。
答案 3 :(得分:1)
我不会开始学习ASM。如果你想学习C / C ++,那么就开始吧。随着代码质量的提高,您可能会发现自己需要ASM。 99%的时间你不会,但偶尔你可能需要它。
此外,在理解C / C ++在幕后所做的事情方面,它确实有助于了解ASM。但同样,在你变得更先进之前,你可能不需要它。
答案 4 :(得分:1)
我做了,我认为当时帮助了我。它不再对我日常生活有所帮助,但我认为这取决于你的工作。
我20年前在Commodore上学习汇编程序,在IBM大型机上再次在大学学习汇编程序。我不能说这对我目前的工作有帮助。
答案 5 :(得分:1)
除非你直接申请,否则它可能不会带来很多好处。如果你想要掌握一般知识,那么C / C ++就是一个很好的起点。
也就是说,集会带来的挑战非常有趣,需要一种完全不同的思维方式才能完成任务。
我花了一点时间通过编程TI-86计算器来学习Z80程序集。 Z80指令集非常小,在汇编中编程计算器的新颖性非常有趣。
ticalc.org在TI assembly programming上有很多好资源。
答案 6 :(得分:1)
我同意马克。我认为这与使用C#,VB.NET或其他.NET语言编写时学习MSIL类似。它有助于了解幕后发生的事情,但您可以一辈子创建有效且永不需要的应用程序。
答案 7 :(得分:1)
没有。除非你想要有趣,否则你真的不需要学习装配。
有些事情你需要知道汇编,比如驱动程序创建,操作系统开发,漏洞利用开发,但除此之外,我个人认为你可以在不知情的情况下幸福地编写代码。
如果你确实需要学习装配,你就会知道 - 我不会为了学习而学习它。
答案 8 :(得分:1)
如果您正在编写非托管C ++,至少知道基本的x86程序集,二进制数字系统等偶尔也是非常宝贵的。我主要做C / C ++开发,我偶尔需要调试生产代码以查找特定的错误编译器生成的机器代码表示找到的唯一方法,然后修复bug就是读取反编译的程序集并确定编译器为什么会这样生成它。
有关装配的更多信息,请参阅问题:What is the best way to learn Assembly? Specifically, for someone who has experience in dynamic languages。
答案 9 :(得分:1)
装配并不是很困难。熟悉C语言后,花一两天时间学习基本程序集。它在调试方面的帮助是巨大的,而且有趣的是能够编写比C等效速度快10倍,15倍或更多的代码。
答案 10 :(得分:0)