現代彙編教材還是基於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是最合適的。


嘟嘟的大樹


師傅領進門,修行靠各人!如果連計算機原理、彙編原理、算法等等基礎都沒學懂,說啥人工智能?送花圈給題主吧


忙完茫然忘言


彙編是理解一切計算機高級語言的基礎,操作系統的最底層就是彙編語言,是機器語言和高級語言的重要橋樑。這個不學紮實了,你怎麼學習其他硬件和軟件?


分享到:


相關文章: