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

别人手牵手-我牵我的狗


汇编没用?胡说八道!

汇编难学?胡说八道!

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

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

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

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

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

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


火山口


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

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

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


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

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


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


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

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


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

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


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


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

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


情感飞花


我觉得你们看完这本书 对计算机的基本工作原理就会有很深刻的理解

高中是我的计算机老师给我一本清华版的8086说实话 一直到大二学了单片机后才看懂 然后考了计算机三级汇编语言

等看完才会有豁然开朗的感觉

加油


BreakPoinT


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


用户1742959482003


管你是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有何区别。



味冷


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


谷雨_1951


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

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

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

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

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


三袋大菠萝


非常有用!

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

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


嘟嘟的大树


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


忙完茫然忘言


汇编是理解一切计算机高级语言的基础,操作系统的最底层就是汇编语言,是机器语言和高级语言的重要桥梁。这个不学扎实了,你怎么学习其他硬件和软件?


分享到:


相關文章: