1

汇编没用?胡说八道!

汇编难学?胡说八道!

任何一种高端应用场景,都需要汇编带来的高效率和高可靠性!何为高端?军事用途,工业用途,医疗领域!这些领域对运行效率和可靠性的需求都是无止境的高。你用c++可以调用一个第三方函数库很方便的写出一个PID,但它是怎么实现的?效率如何?有问题怎么办?如何调试提高效率?你都不知道!如果你能用汇编写一个PID,你会发现一切都在你的掌控之中!运行速度可以达到极致!所有数据的变化都是按你的设计运作,这就叫自主可控!

很多人说中国没有自己的工业软件?为什么?因为高级语言都没有提供现成的库,所以大多数人都不知道怎么写。。。国产PLC品牌有很多,但能有自己的编译平台的品牌却是凤毛麟角。为啥?因为用C语言写不出PLC级别的编译器。梯形图语言本身就是汇编语言的增量版,比C更贴近底层,用C当然无法满足要求了。再比如很多人吐槽国产的数控机床精度不如进口的高!这个精度的瓶颈,除了国内冶金行业技术的差距之外,最大的原因就是编程语言的限制!因为效率和运行速度的差距,高级语言根本无法胜任这类应用!更别说什么三轴联动五轴联动之类的技术了。

综上,汇编语言的意义绝不仅仅只是计算机基础基础,帮助理解高级语言那么简单!汇编语言是在高端应用领域是无法或缺的必须工具!

再说汇编语言难不难学?当然不难学!任何芯片的内部资源都是极端有限的,所以一款CPU所能提供的汇编指令也是极其有限的,就那么多条,不会像高级语言那样,动不动冒出一堆第三方库让你跟进学习。而且汇编语言的指令功能非常的简单易懂,通常就是一个很单一的功能,例如把源操作数怎样处理一下,然后写入目标操作数地址里,非常简单直接!和高级语言(哪怕是C)相比,学习难度也是直线下降的。

但必须要说,汇编很难用!非常难用!要想实现一个具体的任务,你必须学会把任务分解成汇编指令能够完成的各种小目标,这就意味着用汇编写程序对算法会非常依赖,这也是程序员技术含量高,极其烧脑,也非常值钱的根本原因!

总结一下,汇编语言就像基础汉字,高级语言就像名人名言大全。你想得诺贝尔文学奖,全都靠别人的名言凑数显然不可行的,甚至你想讲个自己原创的故事都不可能,因为你根本不识字![酷拽][酷拽][酷拽]

最佳贡献者
2

这个问题一看就是没学过计算机的人提的。学汇编,不在什么CPU,现在世界上新CPU层出不穷,你学的过来吗?重要的是思想,让你知道计算机在底层是怎么和逻辑电路联系起来的。你知道相加,相减,相乘实际上是几个寄存器之间怎样的操作过程吗?学了汇编你就完全明白了。至于指令集的运算命令名字,根本不重要。学完了8086汇编,想搞ARM,买本书,查一下指令集,再装个编程环境,就可以开干啦。毫无难度!

3

管你是i7还是i9,hp还是dell,把你的电脑设备管理器打开,看设备占据的资源。

显卡占据的最低端地址是不是a0000h—bffffh?这个地址范围有什么功能,和8086的20位地址线什么关系呢?

找到可编程中断控制器,io范围是不是20h-21h,a0h—a1h呢?这数字和ibm pc-xt机的15个中断有什么关系呢?

你的电脑上有isa卡槽,pci卡槽吗?应该没有了吧?可是系统设备里一排排isa设备,pci设备都放在哪里,如何操作呢?

写个bios程序,把主板初始化一下如何?看看你的64位处理器,pcie显卡,sata硬盘,没有进入操作系统之前都是怎么玩的,和8086有何区别。


4

这教材太老了,针对8位或16位CPU指令集的,不过对于集成在各类设备上的单板机,还是有用的,因为这些设备用老U就够了,相应软件,要用这个汇编语言编程。32位的汇编语言,30年前随386出现就有了,可以用他来实现CPU的16/32位工作模式转换,挺好玩的,用起32位大内存来非常爽。64位汇编也应该是有的,不过我没用过,后来的工作都改用C++了。

5

现代汇编教材还是基于8086,对理解当今CPU(如i9)有帮助吗,还是教程太滞后?

这个问题我当初也遇到过,那时候早,互联网上还没有那么多书,我去图书馆借书,发现最新的只有80386的汇编指令集,可是当时奔腾已经出来很久了,那么我到哪里去找资料呢?

看了楼下的回答,我想起一事,说出来给大家讨论。


当年学编程的时候,很喜欢汇编和C,有一次认识了一位牛人,就拜他为师,经常去找他玩。

这位牛人是北大计算机系研究生,又在沈阳计算机研究所工作了几年,非常厉害。


看到我学汇编,他回忆起北大的汇编老师,说这位老师水平很高,思路更是与众不同,怎么不同呢?


大家可能都了解一点汇编,知道汇编是大概什么样的事物,行内人士说汇编就是汇编,不是什么宏汇编之类。

牛人说他这位老师,人家找他问会计电算化软件的事,他就马上在黑板上写起指令,一上午写满了一黑板,两三天就写完了!


牛人无限仰慕,深知自己到现在也没达到人家当时的境界,我更是仰起了头,仔细揣摩他是怎么做到的。。。

汇编这种语言,说了解确实也不算太难,想用来做事可是真难,我关注google的程序员大赛,基本上第一名的代码我都有很多看不懂,指令懂,为什么它能达到作者的意图我不懂,为什么这个地址里会有作者需要的数据呢?哪条暗线给它放进来的呢?为什么不需要明确的初始化呢?问题很多


据说金山的求伯君第一个软件就是用debug写出来的,能用debug写出商业软件,这脑容量和前文提到的这位老师也差不多了,那就是千万条支线为一个目标服务,不但不乱,还不能出错,因为根本没法纠错!


所以说,能力最强的人根本不需要什么流程图,分支模块图,全在脑子里!汇编最难的也就在这了吧我想。

至于题主的问题,以我理解,每代CPU都是基于8086的主体指令集并有所扩充,这些扩充的会需要编程者学习,但是当然也可能会有不兼容前代的问题,所以除非需要写非常高效,非常针对的软件,不然基于主体指令集是最好的,因为8086这种通用CPU本来就不推荐针对具体CPU写软件,几乎所有的事情都可以用主体指令集来完成,主体指令集的变动一定是天下皆知并且得到了主流社区和编译器的支持的。

6

非常有用!

现在编程用汇编语言的多吗?你见谁开发软件的时候用?但是我们为什么还要学习汇编语音?答案肯定不会是学习汇编语言怎么用,而是要帮助你理解CPU内部的组织架构。既然是帮助理解组织架构,那肯定是越简单越好啊!要说简单,还能有比最早期的CPU简单的吗?

现代CPU里面那么多复杂的结构,什么cache、分支预测、内存管理,并且当前的控制器已经不用纯硬件来做了,而是越来越像FPGA那种可编程电路加IP核的方式了,加之各个厂家对其内部组织结构又高度保密,要想搞清楚结构,真的是相当不容易,甚至是不可能的。但是万变不离其宗,总体来说,x86的CPU还是基于冯诺依曼体系结构组织的,运算器、控制器、内存的相互关系并没有变化,掌握这些东西,计算机的基本架构就大致了解了,如果不是从事CPU开发工作的,就已经够用了。所以,教学而言,用8086是最合适的。

7

教材还是有一定借鉴作用的。

首先8086指令集相对简单,没那么多复杂的指令集。都是最基本的16位指令。

其次,汇编语法是相近的,无非换寄存器,更换指令名称。

再次,大学老师也没完全掌握最新CPU指令集。从理论研究来看,前两条已经够用了。而实践是理论研究的短板。第一,教材不好写。第二,没有教授或老师愿意花费这个精力。

最后,高性能程序几乎是国外搞定了,中国人会调用,会编译就可以了,没必要花费太多时间在这上面。

8

学校里主要学的是方法,汇编语言虽然不一样,但写汇编的方法万变不离其中,比如:

一、中断向量表的管理

二、如何操作ram、io、DMA等

三、如何管理内存,段式、页式及段页式

四、软中断调用

五、如何设计一个程序框架

9

朋友们好,我是电子及工控技术,我来回答这个问题。现在的汇编教材确实是基于8086微处理器来讲解的,现在根据以我学习这门课程的经历来谈谈我的看法。

课程内容虽然陈旧但是计算机发展到至今仍然没有脱离以前的架构体系

虽然我不是计算机专业的,当时我们学的是微型计算机原理与应用这个课程,在这个课程里所讲的就是8086微处理器,所用的指令是汇编语言。这已经是十几年前的事情了,但是正是由于刚开始学习了汇编语言,在后面的单片机专业基础课学习时,再用到汇编语言和讲解单片机结构的时候感觉到轻松了许多,我想正是由于前面有了关于计算机结构的知识和汇编编程的基础才使得学习单片机如同轻车熟路,在学习单片机就按照微机原理的思路和学习方法进行就可以了。



我想学习其它更高端的微处理器技术应该也是同样的道理,毕竟现在高端的微处理器仍然没有脱离8086的框架,只不过在它的基础上性能增加了许多而已,比如它的运算速度、存储容量、功耗等方面得到了很大的改善。毕竟汇编教材基于8086这样的处理器,主要使为了使工科学生学会计算机基本硬件知识,掌握计算机汇编语言的程序设计的方法,因此它是一门入门的课程,我们只要知道简单的计算机运行的原理,只要从最早期原理性的知识学起就可以了,没有必要追踪最前沿的技术知识,况且,教材要想追上最前沿的技术是十分困难的。



我认为学习就要从基础的地方开始,不管多么先进计算机,它的运算能力多么强悍,现在CPU的设计原理架构都没有脱离x86这个架构,我们只要把基础打好了,明白计算机底层的一些来龙去脉,不管它是几86。这就像建高速公路,无非是把路拓宽些,车道建多些而已。

教材的更新与最新技术来说永远是滞后的

另一个问题我想说的是,教材的更新永远是滞后于现代最新技术的,就好比最新的科技都是先用在军事上,然后再用在民用上的。新技术一样,环顾我们在学校里所学的技术与社会上最新的技术都是有差距的, 以我比较熟悉的电子和电气方面的技术来说,学校所学的技术要比社会上的先进技术落后10年到20年的时间。比如以电子焊接技术来说,学校的设备还是上个世纪90年末代的技术。



从以上来看,教材的滞后并不影响我们对先进CPU的理解,我总认为基础知识对我们做任何事情都是有帮助的,不仅仅体现在计算机技术上。

以上只是本人的观点,如有不同欢迎讨论。欢迎关注电子及工控技术

10

师傅领进门,修行靠各人!如果连计算机原理、汇编原理、算法等等基础都没学懂,说啥人工智能?送花圈给题主吧

你的回答

单击“发布您的答案”,即表示您同意我们的服务条款