blog 文章

2015/05/11

[轉錄] 學組合語言有用嗎?

ref: http://wanker742126.myweb.hinet.net/asm/how_use_asm.html

◇ 學組合語言有用嗎?


------------------------------------------------------------------------- NCTU-CIS BBS `programming' 版 精華區 ■■■ 學組合語言有用嗎? ■■■ -------------------------------------------- 整理:william@cis_nctu ----- ------------------------------------------------------------------------- 發信人: gis83568@cis.nctu (8323568), 信區: programming 標 題: 初學者學什麼語言好? 發信站: 交大資科計算機中心 (Thu Dec 29 17:47:17 1994) 轉信站: cis_nctu!news.cis.nctu!gis83568 如果以前有人問我這個問題, 我回答 Pascal. 如果你現在問我, 我會回答組合語言. 覺得很奇怪嗎? 請思考一下, 再看我的想法. 常常有很多初學者問的問題是因為不暸解電腦的架構. 電腦不是萬能的嗎? 為什麼電腦不能這樣做呢? 事實上當我們暸解電腦的架構後, 這些問題大都可以解決. 從歷史的演進來看, 電腦由真空管到電晶體, 由電晶體到積體電路, 由積體電路到超大型積體電路, 不管硬體的技術如何變, 電腦所依循的架構仍然是 John von Neumann 提出的 stored instruction 架構. 在此架構下, 程式是由存在記憶體中的指令所組成. 如果暸解程式在記憶體中如何被執行, 作業系統替我們做什麼事, 那麼程式設計學起來就比較容易了. 要暸解電腦的架構, 當然要學組合語言. 其實組合語言也沒有那麼難學, 組合語言也可以分級的, 一個適合初學者的組合語言應該以介紹機器的架構為主要著眼點, 從機器的架構開始, 接著介紹資料存在電腦中的形式, 再簡單介紹機器指令, 最後簡單的介紹作業系統與編譯器終結. 在這個時期, 不要求初學者寫什麼應用程式, 畢竟對初學者而言, 高階語言是比較容易寫的, 但是在學高階語言之前, 應該對電腦的架構有所認知, 而這也是我認為初學者應先學組合語言的理由. 學完了組合語言, 對電腦架構有初步的認識後, 接著就是學習一種高階語言, 要學 Pascal 或 C 或二者都學, 我還沒有一個答案. 最後一個階段是整合的工作, 將組合語言, 高階語言及作業系統整合起來, 如此算是一個完整的語言學習過程. 以上所提的是針對資訊科系學生或想精研程式語言的人, 如果只是玩票性質, 那麼學 BASIC 即可, 我這樣說並沒有貶抑 BASIC 的意思, 畢竟 BASIC 當初就是為初學者而設計, 所以 BASIC 被設計成直譯器, 語法也比較簡單, 相對的程式較無結構, 也不適合大程式. 雖然時至今日, BASIC 早已不是當年的 BASIC, 不過跟 Pascal 及 C 比起來, BASIC 的能力還是較弱, 另外附帶一提的是在工作上沒有見過 BASIC 的直譯器或編譯器. ------------------------ 交大資科 羅家祥 gis83568@cis.nctu.edu.tw ============================================================================== 發信人: u8123033@cc.nctu (Paladin Mu), 信區: programming 發信站: 交大資科計算機中心 (Thu Dec 29 18:42:00 1994) 8323568 (gis83568@cis.nctu.edu.tw) wrote: > 如果暸解程式在記憶體中如何被執行, > 作業系統替我們做什麼事, > 那麼程式設計學起來就比較容易了. > 要暸解電腦的架構, 當然要學組合語言. > 畢竟對初學者而言, 高階語言是比較容易寫的, > 但是在學高階語言之前, 應該對電腦的架構有所認知, > 而這也是我認為初學者應先學組合語言的理由. 抱歉, 學長, 但是我認為這實在是一個會被誤導的觀念. Computer Science 學的是抽象化. Programming Language的討論從來就不是直接架構在電腦 硬體上的. 電腦沒有struct, 沒有array, 沒有cartsian product, 沒有data type, 沒有stack, 沒有tree. 這些不是電腦的架構, 是人類設計 的抽象架構. 資訊科學研究的是人類的抽象架構. > 常常有很多初學者問的問題是因為不暸解電腦的架構. > 電腦不是萬能的嗎? 為什麼電腦不能這樣做呢? > John von Neumann 提出的 stored instruction 架構. > 在此架構下, 程式是由存在記憶體中的指令所組成. > 如果暸解程式在記憶體中如何被執行, Von Neumann架構並不是唯一的架構. Backus有functional programming 架構, Prolog有prolog的架構. 但我想您說的 "是因為不暸解電腦的架構", 其實 "電腦的架構" 是另外一個 意思. 但無論如何, 應該不需要以那麼細節的組合語言為解決方案. > 以上所提的是針對資訊科系學生或想精研程式語言的人, "程式語言" 所指的應該是程式設計的方法吧? 如果是這樣的話, 許多抽象觀念可能比您所說的知識還要重要. 初學者只是學習如何表達 自己的意思? 接著學習如何讓程式漂亮, 精簡? 可讀? 可重用? 可攜性? 如何讓程式移植不等於重寫? 如何確保程式的正確性, 確定他不會在跑 第1001次的時候出現意想不到的bug? OO是解決這些問題的一個方法. 而這顯然是人造的觀念. 另一個例子是在我的一個compiler project中, 需要以recursive的方式做 lambda lifting, 找出strongly connected component, 做toplogical sort (想不到compiler中也用到這麼多圖論的東西). 這當然更和電腦架構無關了. > 如果只是玩票性質, 那麼學 BASIC 即可, 學弟認為, 如果只是玩票性質, 學組合語言可以提供另一種玩 電腦的玩法, 但是對學資訊的人來說, 卡死在電腦架構上是錯 誤的認知. :)
plato. rene descartes.william somerset maugham. albert einstein.alan turing pablo picasso.homer.nicolaus copernicus PALADIN MU georg cantor. lau tzu . kurt goedel .johnann u8123033@cc.nctu.edu.tw seb astian bach. alonzo church.claude monet DEP. OF CIS, NCTU. TAIWAN donald knuth.charles babbage.john backus.von neumann.william shakespeare.aristotle ============================================================================== 發信人: william@cis_nctu (OO/Win/Asm Master), 信區: programming 發信站: 交大資科_BBS (Dec 29 23:00:45 1994) 其實兩位的看法, 相當於兩種極端:羅學長是 bottom-up, 而穆學弟是 top-down。 何種方式較適合? 有標準答案嗎? 有人看世界是夸克膠子質子中子等等的組合, 有人以上層系統組織之目標論點往下 分析萬千世界;有人以個別理性化作用體角度來建構經濟學, 有人以整體市場貿易 公共政策來建構經濟學理;也不能說誰對誰錯, 角度不同罷了。 至於我, 我一向喜歡平行處理... :-) 就像做數學題目, 總是要把已知未知項挑出來, 把欲求欲證項挑出來, 再兩面夾擠, 則答案易生焉。 寫作也是, 以前我受的訓練是:一開始先擬大綱, 再逐條鋪陳, 但時時觀照事先擬 的綱目, 避免天馬行空;或是藉此再回頭雕琢綱領, 使其更切演進中的思路。這種 反覆的正向逆向回饋過程, 常常出現。 我有個心得:平行處理容易觸類旁通, 偶有會意, 便欣然忘食... 軟體生產方式都已由老式的瀑布模式轉變為噴泉模式了, 我們的學習路程又何必侷 於一條鞭呢? ★ gis83568@cis.nctu.edu.tw said: > 要暸解電腦的架構, 當然要學組合語言. 那為何不說要先學電子學﹑數位系統, 再來學組合語言呢? 學習是很有彈性的... > 其實組合語言也沒有那麼難學, 組合語言也可以分級的, > 一個適合初學者的組合語言應該以介紹機器的架構為主要著眼點, > 從機器的架構開始, 接著介紹資料存在電腦中的形式, > 再簡單介紹機器指令, 最後簡單的介紹作業系統與編譯器終結. Yes, 有道理。 > 但是在學高階語言之前, 應該對電腦的架構有所認知, > 而這也是我認為初學者應先學組合語言的理由. 其實學高階語言前, 只要有計概的東東當背景, 並不需要碰到組語, 就能順利學習。 像指標, 也沒必要以組語來解釋, 直接拿 stored-program computer﹑memory 之 概念介紹就行了。 當然啦! 更複雜的低階概念, 就得佐以組語的知識了。 > 另外附帶一提的是在工作上沒有見過 BASIC 的直譯器或編譯器. 咦, 很常見呀! ★ u8123033@cc.nctu.edu.tw said: > 抱歉, 學長, 但是我認為這實在是一個會被誤導的觀念. Computer Science > 學的是抽象化. Programming Language的討論從來就不是直接架構在電腦 > 硬體上的. ㄟ... 你這是比較 theoretic﹑top-down 的看法。但是不要忽略了另有 realistic﹑bottom-up 的觀點。 > 電腦沒有struct, 沒有array, 沒有cartsian product, 沒有data type, > 沒有stack, 沒有tree. 這些不是電腦的架構, 是人類設計 > 的抽象架構. 資訊科學研究的是人類的抽象架構. 但是我們總不能要求每個初學者都從 Turing machine﹑automata 開始吧! > 但我想您說的 "是因為不暸解電腦的架構", 其實 "電腦的架構" 是另外一個 > 意思. 但無論如何, 應該不需要以那麼細節的組合語言為解決方案. 如果對一個電機出身的人, 可能由此入門會較順利, 因為這可以輕易和他過去 的知識背景銜接起來。 >> 如果只是玩票性質, 那麼學 BASIC 即可, > 學弟認為, 如果只是玩票性質, 學組合語言可以提供另一種玩 > 電腦的玩法, 但是對學資訊的人來說, 卡死在電腦架構上是錯 > 誤的認知. :) 言重了... :-) 羅學長的意思不是要把你“卡”在電腦的架構, 而是以其為階梯﹑途徑。 過河須渡船, 上岸了, 船可丟, 也可不丟; 得魚而忘荃, 還是不忘, 端看自己的選擇與方向。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 得魚而忘筌, 得意而忘言。 莊子‧外物 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ============================================================================== 發信人: gis83568@cis.nctu (8323568), 信區: programming 發信站: 交大資科計算機中心 (Fri Dec 30 20:47:52 1994) Paladin Mu (u8123033@cc.nctu.edu.tw) wrote: >> 要暸解電腦的架構, 當然要學組合語言. > 抱歉, 學長, 但是我認為這實在是一個會被誤導的觀念. Computer Science > 學的是抽象化. Programming Language的討論從來就不是直接架構在電腦 > 硬體上的. 我的看法是 data structure 是抽象化 但是 programming languange 不是抽象化 我們在談 data structure 的時候, 是不考慮它存在電腦中的形式 但是到了 programming languange, 我們卻必須知道它存在電腦中的形式 不然為何整數的範圍為 -32768 到 32767 0.1 加十次不等於 1? > 電腦沒有struct, 沒有array, 沒有cartsian product, 沒有data type, > 沒有stack, 沒有tree. 這些不是電腦的架構, 是人類設計 > 的抽象架構. 資訊科學研究的是人類的抽象架構. 你可能不暸解我所指的電腦架構, 我指的電腦架構是電腦如何輸出入, 指令如何被執行. > "程式語言" 所指的應該是程式設計的方法吧? 如果是這樣的話, > 許多抽象觀念可能比您所說的知識還要重要. 初學者只是學習如何表達 程式語言只是工具, 抽象觀念當然很重要, 但不屬於程式語言 ------------------------ 交大資科 羅家祥 gis83568@cis.nctu.edu.tw ============================================================================== 發信人: william@cis_nctu (OO/Win/Asm Master), 信區: programming 發信站: 交大資科_BBS (Dec 30 22:28:37 1994) ==>[Author]: gis83568@cis.nctu (8323568) on board 'programming' >> 抱歉, 學長, 但是我認為這實在是一個會被誤導的觀念. Computer Science >> 學的是抽象化. Programming Language的討論從來就不是直接架構在電腦 >> 硬體上的. > 我的看法是 data structure 是抽象化 > 但是 programming languange 不是抽象化 > 我們在談 data structure 的時候, 是不考慮它存在電腦中的形式 > 但是到了 programming languange, 我們卻必須知道它存在電腦中的形式 > 不然為何整數的範圍為 -32768 到 32767 > 0.1 加十次不等於 1? 這是“特定程式語言”在“特定編譯器”之下, 在“特定硬體”上的限制, 而不是 “純語言”本身的問題。“純程式語言”是可以獨立於硬體的。 McCarthy 在 MIT 時, 在 von Neumann 硬體架構下, 還是做得出 Lisp;雖然 Lisp 和 von Neumann 架構相異。而且學 Lisp 的人並不需要學會 von Neumann 架構。 >> "程式語言" 所指的應該是程式設計的方法吧? 如果是這樣的話, >> 許多抽象觀念可能比您所說的知識還要重要. 初學者只是學習如何表達 > 程式語言只是工具, 抽象觀念當然很重要, 但不屬於程式語言 學長有沒有看過穆信成在系刊 [資訊人園地] 上發表的文章? 他的論點多半在裡頭, 那裡講的比較完整。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 得魚而忘筌, 得意而忘言。 莊子‧外物 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ============================================================================== 發信人: william (OO/Win/Asm Master), 信區: 'programming' 發信站: 交大資科_BBS (Dec 31 00:04:50 1994) ==>[Author]: pcca.bbs@bbs.nchu (小君) on board 'programming' >> 程式語言只是工具, 抽象觀念當然很重要, 但不屬於程式語言 > "程式語言" 所指的應該是算是一種語言, 一種和電腦溝通的 "語言". > 它不能算是一種方法. “程式語言”固然是“和電腦溝通的語言”, 但是「如何溝通」就是發明語言的人 所掌握的, 他決定了我們所“期望”電腦能理解人類思維的“角度”。 這“思維的角度”就是“方法”。不僅僅是形下的“工具”而已。 暫時跳開程式語言, 回到人類自然語言來講, 心理學家、語言學家、人類學家都已 找出相當證據證明:自然語言會影響該語言使用者的思維方式。 回到程式語言, 假如你一輩子都在用 FORTRAN, 而且是最古老的 FORTRAN, 而不去 碰其他語言, 則你可能一輩子都不知道可用遞迴來解八后、河內塔問題, 你可能一 輩子都不知道竟然可以單單用知識庫、推論規則就能寫出程式來, 而不用到結構化 三要素。 程式語言輔助我們思考, 也限制了我們思考。進入框框之餘, 還得懂得跳出來。 > 因為不管你用那一種 "程式語言" 來寫程式, 它們的方法都是一樣的. > 好像我最開始自學 Basic (不是 QBasic), 然後轉去 Pascal, 現在把 C > 的書翻一翻就可以用 C 寫程式了. 中間過程我還研究過組合語言, QBasic 和 > Visual Basic. 那是因為你的學習路程只碰到 procedural 這種語言族系而已。 試試看 Lisp、Prolog、FORTH 等等, 你會發現「它們的方法很不一樣」。 > 致於, 您說的方法. 應該算是所謂的一些技巧, 如迴圈, 比較等. > 不然也可以說是程式設計的架構, structure programming 和 object-oriented > programming. 比這些更形上些。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 得魚而忘筌, 得意而忘言。 莊子‧外物 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ============================================================================== 發信人: u8123033@cc.nctu (Paladin Mu), 信區: programming 發信站: 交大資科計算機中心 (Sat Dec 31 02:04:32 1994) OO/Win/Asm Master (william.bbs@bbs.cis.nctu.edu.tw) wrote: > “程式語言”固然是“和電腦溝通的語言”, 但是「如何溝通」就是發明語言的人 > 所掌握的, 他決定了我們所“期望”電腦能理解人類思維的“角度”。 > 這“思維的角度”就是“方法”。不僅僅是形下的“工具”而已。 : > 程式語言輔助我們思考, 也限制了我們思考。進入框框之餘, 還得懂得跳出來。 哇, 說得好. :) 想用我的話補充一下. 一個語言在制訂一套和電腦溝通的方法的同時, 事實上也重新 "定義" 了這一部電腦. Smalltalk 定義 "電腦" 就是一堆物件, LISP 定義電腦就是一些符號和 memory cell, FORTH 定義電腦是堆疊和 word. Prolog 乾脆定義電腦本身就懂推理, 電腦是由兩個部份構成的:規則資料庫, 和推理引擎 (以及一個 interface). 在 Pascal 的定義中, 電腦是一部裡面有一些地方可以放整數, 一些地方可以 放實數, 提供一些機構讓 programmer 定義自己的資料型態... 的機器. Pascal 的指標是不可以加減的, enum type 是不可以列印的, 因為在 Pascal 的電腦模型中, 這樣的動作沒有意義. 而 C 語言進一步的規定電腦是一個記 憶體分四類 (stack, heap, global, code) 的機器, 其中某些記憶體有連續 的位置關係, 所以它認為指標可以加減; C 的定義中 char, enum, int 都是 數值, 所以字元可以當數字來印. 這兩者的差異是定義的問題, 而不是電腦先 天結構的問題. 而這兩者的定義都和實際的電腦架構有一些距離. 語言的規定反映出了語言設計者希望我們用什麼方式來思考. Smalltalk programmer 看問題都是物件, APL programmer 思考起來都是 vector﹑list, 因為這些是語言提供的模型. C 或 Pascal 的模型告訴我們 "把程式一行 一行寫, 電腦就一行一行 run". 有些模型中, 幾行可以一起 run; 有些模型 中雖然一次只處理一個, 但根本沒有辦法知道哪一個先 run, 哪一個後 run, 甚至 run 不 run 得到都沒辦法確定 (相反的 programmer 能確定的是資料的 產生和傳遞). Programmer 是建築在語言提供的架構上面思考的, 只是大家 習於如此做而不自知. 我覺得 programming 本來就是一件抽象的事, 也許這個觀點算是偏激派囉. :) > 程式語言輔助我們思考, 也限制了我們思考。進入框框之餘, 還得懂得跳出來。 這點很重要. 這些 paradigms 在提供我們一個好架構的同時, 也成為了擺脫 不掉的包袱. 雖然研究 FP 兩年多了, 仍覺難以擺脫以前的模式, 深受其苦.
plato. rene descartes.william somerset maugham. albert einstein.alan turing pablo picasso.homer.nicolaus copernicus PALADIN MU georg cantor. lau tzu . kurt goedel .johnann u8123033@cc.nctu.edu.tw seb astian bach. alonzo church.claude monet DEP. OF CIS, NCTU. TAIWAN donald knuth.charles babbage.john backus.von neumann.william shakespeare.aristotle ============================================================================== 發信人: u8123033@cc.nctu (Paladin Mu), 信區: programming 發信站: 交大資科計算機中心 (Sat Jan 7 02:17:08 1995) > 可否以一簡單的例子比較 procedural (我好像沒見過這個字, 可能忘了!) 'Procedure', 程序. 至少您在 Pascal 中就會看到 procedure 宣告吧. :) > 這種語言族系和您指的 Lisp, Prolog, FORTH? 何以方法不一樣? 舉一個常見的例子好了: 算 n 階層. 用 procedure 式的 (或者叫做 imperative, 指令式的, sequencial, 順序的) 語言, 通常寫成 fact=1; for i=1 to n fact=fact*i //迴圈執行完後, fact 中就存放了 n! 了 這時我們告訴電腦的是: 首先你在變數 fact 中放 1, 然後把 i 中放入 1, 然後在 fact 中放入 fact*i, 然後把 i+1, 然後.... 總之, 告訴電腦的是 一連串的 "指令" (所以叫 imperative), 告訴電腦 'HOW TO' 算階層. 電腦只要傻傻的照做, 做到後來 fact 這個變數裡面就會正好有 n! 這個值. * * * 另外一種方法是告訴電腦 'WHAT IS' 階層. 把階層的定義告訴電腦, 並不告訴 電腦怎麼算 (how to), 讓電腦自己去想辦法算出來. 這種程式設計方法叫做 "宣告" 式 (declarative) 的. Prolog 屬於 declarative 的語言, LISP 也 可以寫成 declarative 的. 怎麼告訴電腦 what is 階層呢? 階層的定義是 0! = 1 0 階層是 1 n! = n * (n-1)! n 階層就是 n 乘上 n-1 階層 Prolog 的精神是邏輯推演. 如果用 Prolog 來寫的話, 你告訴電腦的不再是 一連串 "先這樣, 再那樣", 而是, 事實 : 1 是 0 的階層 規則 : x 是 n 的階層, 除非 x 等於 n 乘以 n-1 的階層 把這樣的敘述給了電腦後, 你就可以問電腦 "5 的階層是多少?", 然後 電腦就會從 0!=1 開始推論到 5!=120 , 然後告訴你答案. 我不會寫 Prolog... 所以拜託其他高手囉. * * * Prolog 架構在邏輯上, LISP 架構在遞迴函數上. 用 LISP 算階層, 首先 回想一下階層的定義: 0! = 1 0 階層是 1 n! = n * (n-1)! n 階層就是 n 乘上 n-1 階層 所以程式就可以寫成 (defun fact(n) (cond ((= n 0) 1 ) 如果 n=0, 0 階層就是 1 (T (* n (fact (- n 1)) )) 否則 (T), n 階層就是 n 乘上 n-1 階層 )) LISP 的語法比較奇怪啦, 不過你可以看到以上的兩行程式是和兩行定義 一一對應的. 如果用 Haskell 或 Miranda 來寫, 你真的可以寫成 fact 0 = 1 fact n = n * (fact (n-1)) 不要懷疑, 這是可以 run 的程式. :) 在這種寫法中, 我們只是寫出 fact 的定義, 並沒有告訴電腦那個動作要先做, 那個部份要後做. 電腦自己會照適當的順序去求值. 實際上在 Haskell/Miranda 中, 電腦真正演算的順序可能根本無法預測. 關於 FORTH, 也得請教其他高手了.
plato. rene descartes.william somerset maugham. albert einstein.alan turing pablo picasso.homer.nicolaus copernicus PALADIN MU georg cantor. lau tzu . kurt goedel .johnann u8123033@cc.nctu.edu.tw seb astian bach. alonzo church.claude monet DEP. OF CIS, NCTU. TAIWAN donald knuth.charles babbage.john backus.von neumann.william shakespeare.aristotle ============================================================================== 發信人: yhliu.bbs@vlsi1.iie.ncku (劉應興), 信區: programming 發信站: 成大資訊所_BBS (Sat Dec 31 02:17:31 1994) 對不起! 看了幾位專家精彩的討論, 我這個外行人也想表示一下我 的淺見。 如果「初學者」指的是以後將專職於各種程式設計工作、或設計系 統程式之類的專家工作, 那麼先學高階語言後學組合語言, 正如同 教學上先做簡單的例子或說明簡單的方法, 然後再做較複雜困難的 問題。先學組合語言後學各種高階語言, 如同先學習一般、複雜的 東西, 然後簡化到較簡單的情況。先學軟體設計理論、演算法等, 再學具體的程式語言, 有點像數學中先講抽象的理論, 再把它用到 具體的例子中。 雖然上述比擬並不是很適當, 但無可諱言的, 組合語言的學習是比 高階語言困難; 功能簡單的語言更容易入門。我相信學過組合語言 後對學其他語言會有所幫助, 但這也不見得就一定要從它著手吧﹖ 學習高階語言是需要瞭解一些電腦運作的方式, 但這並不表示一定 要學組合語言。學了高階語言後有時候可能妨害組合語言的學習, 例如學的是功能較少, 沒有「指標」的FORTRAN、BASIC等, 可能對 組合語言中「變數」只是「位址」會有些迷惑, 不過我想這種妨礙 應該不嚴重; 而且我認為高階語言的一些經驗仍然是有助於學習組 合語言的 (除了LISP, PROLOG 以外)。 我的想法是: 一般 (不只電腦方面) 的學習方式可能大多是螺旋式 的學習吧﹖先學比較簡單、接近自然語言的一兩種高階語言, 在此 同時學習一些電腦運作的基本知識, 以及基本的演算法、資料結構、 軟體設計概念等。然後在語言方面可學習 C 語言、組合語言, 在軟 體設計方面可學習演算法、資料結構、系統設計等。再來是作業系 統、系統程式等。 如果「初學者」只是想用電腦, 通常他並不需要去學組合語言的! 應該考慮的是: 他可能寫程式做哪方面的事﹖由此選擇一個適當的 高階語言去學就好了。當然如果他有興趣, 可以再去學其他語言, 甚至組合語言, 這只是為了平常所用的語言在某一工作上難以做到 時當做備用而已。 一些淺見, 請勿見責! ============================================================================== 發信人: syc@cc.ntu (Shiau Yong-Ching), 信區: programming 發信站: 台灣大學 (Mon Jan 9 17:41:13 1995) 8323568 (gis83568@cis.nctu.edu.tw) wrote: > 要暸解電腦的架構, 當然要學組合語言. > 學完了組合語言, 對電腦架構有初步的認識後, > 接著就是學習一種高階語言, 要學 Pascal 或 C 或二者都學, > 我還沒有一個答案. 其實我覺得這是 C (or Pascal) 語言教科書的問題. 最簡單的組合語言就是 pseudo asm. 我的看法是在 C 的書籍第一個章節先來個計概, 順便定義好一個 玩具 CPU, 這樣對於學 C 而言, 事半功倍. C 學完之後, 一下子就可以學好 8086 的組合語言 (高級的喔) 了... 仔細看看 K&R 的 bible, 我覺得他們寫這本書的時候, 就是假設讀者有這個 "第 0 章" 的基本背景.
Shiau Yong-Ching (蕭永慶) Phone: 7358499 - 717 E-mail: syc@cc.ntu.edu.tw Department of Electrical Engineering, Taiwan University ============================================================================= ============================================================================= 發信人: clock.bbs@csie.nctu (咖啡超人), 信區: programming 標 題: 學組合語言有什麼用處嗎 ? 發信站: 交大資工鳳凰城資訊站 (Fri Jun 16 16:27:15 1995) 轉信站: cis_nctu!news.cis.nctu!news.csie.nctu!phoenix ==> 在 brams.bbs@eden.ee.nctu.edu.tw (Brams) 的文章中提到: > 現今各種語言百花爭鳴, OWL, MFC, VB ..... 等等 > 討論組語, 寫組語的人是不是越來越少了 ?? > 我現在正苦心專研組語.. > 但, 感覺上, 除了破解密碼外, 會用到組語來寫程式的機會真是少之又少.. > 究竟, 學組語到底有什麼實際上的好處?? > 我正處於矛盾期, 大家想想理由來說服我吧.. 啊, 現在到處都可以買到電視, 難道電視就不是一門 重要的學問了嗎? 至於組語有沒有重要到必須花一學期來學, 嗯, 我的 感覺是除非你一輩子都不打算碰到硬體的東西, 那麼 學學它是蠻重要的.. 不過, 你把 OWL,MFC,VB,FoxPro.. 這些語言適用的 程式拿來用組語寫, 當然是事倍功半.. 反過來說, 組語適用的地方, 用高階語言來硬幹, 也是事倍功半 囉.. 至於組語用到的地方多不多.. 嗯, 在 DOS 下很多, Unix 下較少 (除非你說的是 Linux), Windows 下 就很難說... 肯定比 Unix 多就是.. 當然, 換個方式說, 假如你讀大學四年只學到高階語 言, 那你跟那些文科畢業出來受過程式訓練的有什麼 差別? (對公司而言)
----====**** Good-bye & Hello ****====----
* Origin: ● 交通大學資訊工程系 BBS ● From: Beta.Dorm11.NCTU.edu.tw ============================================================================= 發信人: EightCloud.bbs@firebird (嵐雲), 信區: programming 發信站: 中正資工四百年來第一站 (Sun Jun 18 01:57:28 1995) 先說我學過的經驗好了, 我是從 6502(Apple II) 開始學的, 然後學 8088, 80286 的保護模式, 然後就把主力放在 C/C++ 上, 不再花心力學 assembly. 我學過 TSR, trace 過 bios 中斷, 也改過一些, 寫些硬碟低階的保護程 式, 也利用 rs422 嘗試寫過教學網路,和同學一起破過幾個電玩保護, 講上面這些, 是想說, 我應該是了解 組合語言 的精華, 是親身的體驗, 不是放空砲 :) > 到底組語學後的使用率高不高??? 就以後而言, 使用率並不高. 對 dos 而言, 它提供的系統功能並不完整, 而且, 它並沒有保護, 也就是系統程式和我們寫的 AP是同等地位的, 所以, 我們 經常會利用組合語言去寫一些應該屬於OS要做掉的事, 例如 TSR, 修改中斷,等都是. 然而, 在以後, 32 bit OS 下, 都是屬於保護模式, 這些技巧都用不上, 且一些特權指令, 是屬於 OS kernel 層次才能執行. > 以及組語的觀念是不是重要的?? 觀念還是很重要, 你有組合語言的觀念, 在寫程式時, 尤其是像 C 這 種較低階的程式, 腦中自然能浮出組合語言到底 是會如何運 做的, 以及你到底能電腦寫出什麼樣的程式, 如何做才是最佳 化時. > 如果我要寫 TSR ,那是否要用到組語的觀念(好像要吧) TSR 是 dos 功能不足的產物, 在以後的 OS 裏, 不會有這種東西. > 最後就是要不要學呢?? 要學組合語言的基本功能, 不要花太多心力在 dos 下的一些技巧, 如 TSR 等. > 看了前面多篇的 post, 好像大部分先進都支持要學 > 這樣會鼓舞我繼續研讀 (目前正在學) C 是很重要的, 現在, 在一些 OS 上, 連 driver 的大部份 code 都是用 C 寫的, 不僅 為了跨平台, 也是容易維護. ============================================================================= 發信人: Alpha.bbs@csie.nctu (風流斷劍小小呆), 信區: programming 發信站: 交大資工鳳凰城資訊站 (Sun Jun 18 15:29:05 1995) ==> 在 HYD.bbs@bbs.ee.nthu.edu.tw. (追風男孩) 的文章中提到: > 雖然組合語言真的挺管用的. 不過現在程式設計的新主流好像是 oop, 新一代的 > 語言都有 oop 的觀念, 而且未來的電腦語言想必是朝向高階、親和的方向前進, > 如此看來, 除非有興趣或是專業人士, 不然學組合不是很有必要. 其實學組語和學架構可說是一體的兩面, 當然在作業系統的掌控下 你在強悍複雜的電腦系統中做運算及配合其他程式用組語大概沒啥 好處, 但是等到你想做個小控制器來轉轉馬達, 或做個通訊傳輸界 面有的沒的時, 那些上面的控制器可都沒這個 powerful 的作業系 統幫你傳遞物件, 可都得靠真槍實彈的組語才能發揮最大效能哩! 當然搞商用計算程式已經沒有玩組語的必要了, 但搞理工的最好還是 學學, 不然自製實驗設備怎麼和你 powerful 的 os 結合哩?
* Origin: ● 交通大學資訊工程系 BBS ● From: 140.113.11.72 ============================================================================= 發信人: ax.bbs@bbs.ee.nthu. (athena), 信區: programming 發信站: ☆清華電機☆ (Mon Jun 19 03:50:08 1995) > 但,感覺上, 除了破解密碼外, 會用到組語來寫程式的機會真是少之又少.. > 究竟, 學組語到底有什麼實際上的好處?? 「哦?你的組合語言學的到家了嗎?」 N 年前我也問過我鞋長這個問題,我只得到了這個答案。 我後來發現,我的組合語言真的學的不到家。 組合語言幹什麼用?老實說,很多時候你覺得它一點用都沒有。 但是學習組語的過程提供了兩個非常重要的訓練,是其他高階語言所難 望其項背的: 一是對軟硬體界面的認知 二是對程式碼做 human optimization 的方法 組合語言,只要學到知道軟硬體界面如何製作,怎麼寫出來最精簡有效的 程式碼,夠了。其他的技巧只是你願不願意去學,想不想當 hacker 而已, 並沒有什麼多大的意義。 當然,這只是個人小小的看法。
一住行窩幾十年 蓬頭散髮走如顛 海棠亭下重陽子 蓮葉舟中太乙仙 無物得脫虛殼外 有人能悟未生前 出門一笑無拘礙 雲在西湖月在天 ============================================================================= 發信人: nlchang.bbs@me.nypi (計中SysOp), 信區: programming 發信站: 雲專機製款款柔情 (Mon Jun 19 16:24:53 1995) 我用組合語言有近十年了. 我十分支持學習組合語言. 有人說組合語言不實用, 我不 贊成. 有可能是用錯地方. 組合語言不是用來寫大程式, 或用來寫系統程式. 雖然它 也可以這麼做. 組合語言是 firmware 的官方語言. 只要和硬體扯上關係的程式, 組 合語言都是最好的選擇. 所以硬體工程師都必需要精通組合語言. 組合語言另一個好處是可以用來除錯. 有時在使用別人的 function 時, 往往不是十 分了解呼叫的方法. 因此常常用錯而不自知. 若會組合語言, 可以立刻切入 assembly mode 來單步 trace. 很容易就可以找出問題的所在. 如 stack overflow, type mismatch, illegal pointer... 組合語言不是只能用來破解別人的程式. 好好用它, 它是一把寶刀. 不會用, 那只能拿來嚇人. 國立雲林工專 電算中心 SysOp TEL: (05) 632-9643 EXT.245
* Origin: ● 雲專機製款款柔情資訊站 ● From: 140.130.1.32 ============================================================================= ============================================================================= 發信人: william@cis_nctu (何陋居主), 信區: programming 標 題: 還要學組語嗎? 發信站: 交大資科_BBS (Feb 17 00:43:30 1996) 轉信站: cis_nctu ==>[作者]: exc.bbs@bbs.ntu(韓楓) 在 programming 討論區中提到: > 我想學組合語言,但 Win95 出現後,好像連一般的書藉、雜誌 > 都將焦點放在 C++, Visual C++, Visual Basic, Delphi, > 是不是組合語言要沒落了?不知它今後的前途如何? 發展又是如何? > 就連這個版上前面的討論也少見有關組語的,是否我該學它呢? > 亦是追逐潮流的變動? 若想成專業的程式設計者是否一定要會組語? > 請同好賜教!感激不盡? 如果你不想成為 system programmer 只想停留在 end-user computing 領域, 不想追求最高的執行性能, 不想碰到任何跟週邊設備有關的控制動作, 不想對電腦架構有更進一步的認識, 不想碰編譯器設計的理論與實務, 沒有課程或工作上的壓力, 沒有好奇心, 就沒有必要學組合語言了。 如果有任何一項答案是「否」的話, 你就該學組合語言了! :)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 中學生以伏案讀書為主, 大學生則應起而高瞻遠矚。 Whitehead. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ============================================================================= 發信人: william@cis_nctu (何陋居主), 信區: programming 發信站: 交大資科_BBS (Feb 18 03:26:19 1996) 轉信站: cis_nctu ==>[作者]: TerryAries.bbs@bbs.ncku(Terry) 在 programming 討論區中提到: >> 如果你不想成為 system programmer 只想停留在 end-user computing 領域, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 要成為一個 system programmer 不是易事, 在這 MOS 中這樣做並沒好處. > 留在跟人家走就好了. 人有 DELPHI 就用啊! 有 VB 就用啊. 有 Mathematica 就夠用了, 幹嘛還學那麼多年的數數、算數、代數、函數呀? 要知道:要學會數數不簡單, 要學會算數不簡單, 要學會代數不簡單, 要學會函數更不簡單...... >> 不想追求最高的執行性能, > ^^^^^^^^^^^^^^^^^^^^^^^ > 高執行性能? 這不是對身體不好的嗎? why don't use DELPHI or VB? > 用他們來寫program 不是易很多嗎? 就連寫個有基本功能的editor 就只要 > 十來行就搞定了, 又不用去學要怎樣寫editor的那一記憶體分配啊! 字串 > 處理啊! right? 幹嘛還學程式設計、演算法、資料結構、資料庫、OS、影像處理、電腦繪圖、 網路硬體、網路程式設計... 等等科目呀, VB 不就夠了嗎? 幹嘛研究怎樣寫得好、跑得快呀, 反正電腦十年後一定比現在快千倍嘛, 硬碟、RAM 十年後一定比現在便宜千倍嘛。 有 Word 就好了呀, 幹嘛再去看 PageMaker 是不是比較好、去學怎麼寫 editor 呀? 學太多對身體不好喲! 有垃圾文學製造機就夠了嘛, 幹嘛還去研究修辭佈局情節起伏? 有和弦模進自動產生器就夠了嘛, 幹嘛還去研究樂理? 有 MIDI 就完美了嘛, 幹嘛還去學提琴鋼琴長笛? 幹嘛還去組織一支交響樂團? >> 不想碰到任何跟週邊設備有關的控制動作, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 這個哦! 不會覺得煩的嗎? 反正有 function 或 ap 可用就好了, 會來幹嘛? 有 Word 95 給你用就不錯了, 還挑它太慢、吃太多 RAM、弄不出你要的中文直排效果? 太慢? 你不會泡杯咖啡等它 reflow/redraw 完呀? 太肥? 你不會把硬碟裡其他東西都清掉、不要同時多工那麼多程式呀? 功能不夠? 你不會當做沒想過、不要叫它做它當初設計時沒有考慮到的功能嘛! 安於現狀就好了嘛, 幹嘛挑三揀四的? >> 不想對電腦架構有更進一步的認識, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 這好像對這個MOS 中並沒什麼用啊! 我有認識一位同學, 他連 > REGISTER 是什麼都不知, 還不是能寫PROGRAM 來gain money. 對嘛! 反正有 Word 給你用就好了, 照樣能夠排書、排文案、排論文, 照樣可以賺 case, 幹嘛還去看什麼 VBA、OLE? >> 不想碰編譯器設計的理論與實務, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 哇哇哇!!! 這個........唉.....如果不是課業上要學, 我看有多少人會去學. >> 沒有課程或工作上的壓力, > ^^^^^^^^^^^^^^^^^^^^^^^ > 這個就課程上就會有壓力, 工作上就不見得囉! >> 沒有好奇心, > ^^^^^^^^^^^ > 和好奇無關吧! 反正我胸無大志、得過且過就好了嘛! 幹嘛碰那麼多東西呢? 好奇心? "牠" 值幾文錢呀? 西洋不是有句諺語:好奇心會殺死一隻貓還是狗... 什麼動物? 咱中國人也有句諺語:少管閒事! 我一輩子也不想、也無力設計一套 Word, 幹嘛去傷這些腦筋? 反正自然有人會生產 Word 給我用嘛! 腦筋讓他們去傷就好了嘛! 反正老子有的是 MONEY...
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 中學生以伏案讀書為主, 大學生則應起而高瞻遠矚。 Whitehead. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ============================================================================= 發信人: chacha.bbs@aidebbs (恰恰), 信區: programming 發信站: 臺灣學術網路 BBS 實驗站 (Mon Feb 19 22:45:22 1996) 轉信站: cis_nctu!news.cis.nctu!news.csie.nctu!aide_board 每次看到有人為組合語言辯的快提刀砍人, 實在是覺得很好笑, 這些回信的人有多少是 現在用組合語言或高階語言在寫程式過活呢 ﹖我是一個程式設計師, 我用組合語言在寫 程式, 但以下我所寫的文章只是我自己在工 作中的一些心得, 不是聽別人說, 更不是亂 猜... 我的工作是全部用組合語言在寫程式, 但不表組合語言是萬能的, 我就曾遇到一件 很悲劇的事, 用組合語言寫一個midi檔的轉 換程式, 等我寫到一半時, 發覺只要用C 寫 不過是一佰來行的程式, 我竟寫了五佰多行 (瘋了...) , 但這也不代表高階語言很好用 , 我用C 寫的程式在編譯時轉成組合語言才 發現一件更悲劇的事, 轉出來的組合語言再 經組譯時, 檔案太大燒不進ROM(崩潰了...) 天啊~~~~ 以上的例子是我在工作中常發生的, 有 什麼法子可以解決嗎﹖答案是很肯定的" 沒 有" 。 但是我很肯定的一件事, " 學組合語言 比較好" 。寫這一句話我是站在我的工作環 境寫的, 因為在我的工作環境中高階的語言 只能用來發展其他的工具, 而主要的程式運 作全部要用組合語言。 而且學組合語言在去學其他高階語言時 比較沒有那麼多的障礙, 就我個人而言, 我 在學校學的組合語言只有80X86, 8048, 但 我現在用的是Z80, 68000, 6502, 8051.... 我的C 還是自修的, 學校只開pascal, basic ..., 我不是自誇, 但我就個人而言組合語 言確實是帶領我進入程式設計師的一項利器 。 學任何一種語言其實是看個人有沒有興 趣, 有沒有用到, 如果你只是因為潮流所需 而學, 那你會學的很悲劇的.............. p.s 我是寫game的程式設計師, 不是pc的哦.... ============================================================================= 發信人: whchuang@csie.nctu (CPlusPlus), 信區: programming 發信站: 臺灣. 新竹. 光復路. 狗窩. 莊偉宏 (Wed Feb 21 01:00:01 1996) 轉信站: cis_nctu!news.cis.nctu!news.csie.nctu!whchuang 我愛組語. 拜讀各家爭頌Windows 天地的大作, 只有一個感想: GUI 會是這個世界的 無二統治者. 這股受歡迎的態勢, 在電腦的使用者日益激增之後, 只會再 盛. 我不是反對大家擁姬尤愛而前行; 事實上, 在我的生活中, 拿Windows 來 作print 亦著實呈現了極佳的效果. 但我就是無法適應這個環境. 對我這 個怪口味的人而言, 強迫系統從文字模式進入繪圖模式, 或者自己拿XMS 取記憶體 (或... DOS Extender) 、用int 33h 取滑鼠資訊以及寫TSR... 才是真正愜意的事. 別急! 這頓牢騷只是我無意識的動作, 您大可不必為 此敲鍵盤來一番教誨... 回到正題, 還要學組語嗎? 我的答案是肯定的, 相當肯定. 就算不是為了 System programming 如此偉大的課題, 作一個平凡的使用者, 藉Assembly 與系統溝通, 也是試圖貼近這個電腦世界時的一條途徑. william 大哥之 前已經揭櫫了學習組語的種種好處, 對一個電腦使用者來說, 這些需求其 實常常仍係不可免的; 而即使不論Assembly 的實用性, 我一直感覺, 在mov 、loopz 和 [bx] 中的意象, 是頗有味道的; 中斷或許不好懂, 但了解之後 玩進入點搜尋、 8259 , 仍令人稱快. 什麼東西都得以經濟價值來衡量, 常不免扼殺了某些夢想... 有時感覺跟隨潮流是很累的; 我只是想要輕鬆一點、有趣一點、像黃舉賢 "國中生學 CPE" 那樣的感覺... 誰能幫我? 嗯! 看了一下, 我這篇東西全是廢話, 就讓它安靜地躺在那裡好了... 祝: 本account 在 2/26 順利be closed. 本人用功一點讀書去考高中.
This is Internet. whchuang@csie.nctu.edu.tw /Hieroglyphical C./ ============================================================================= 發信人: is82219@cis.nctu (Qing), 信區: programming 發信站: 交大資科計算機中心 (Wed Feb 21 12:31:22 1996) 轉信站: cis_nctu!news.cis.nctu!cissun51!is82219 Terry (TerryAries.bbs@bbs.ncku.edu.tw) wrote: > 有沒有水準呢! 就你自己看了, 但有一點是你要看清楚原post人是想問assembly > 還有沒有前途, 在win95這些os之下, 我本來也不想回信的, 但你們實在是..... 你以為全台灣只有你在用 32bits 的 OS 嗎..? 我用 OS/2 還不是有需求要寫 ASM. > 你要知道, 並非每個人都對compiler, os之類的東西有興趣. > 也並不是每個人都會有機會(想)在做一些大型電玩, > 你可以說現在會有多少人會去學assembly? 我自己寫這麼多年assembly, > 看到真的要學的人就越來越少,書也是. 每個都是學來寫virus crack 一下software, > 我真是到現在才知道assembly只是拿來這樣用的........ 難怪了.. 因為你的 assembly 還停留在不實用的階段. 呵... > 我是多說了些廢話, 但你能說現在不是一個金錢導向的社會, 即使現在是個金錢導向的社會 ( 不代表我肯定 ) 學 assembly 就一定 不會賺錢嗎..? 使用愈終端的東西, 永遠都被掌握原始技術的人所控制 , 永遠跟著別人的腳步前進. 今天 Delphi, VB 能有多少功能, 你才能 有多少功能. 如果你只會 VB, 賣 VB 的人想賣你多少就賣多少. 倒底又是誰在賺錢呢..? 台灣也許就是這種 目光短小的人多了, 軟體工業始終無法上軌道. 大概 還要受 M$ 宰制個幾年.......*sigh* > 你能對 assembly 有興趣, 但並不是人人都是, 而現在的高階os中assembly會有嗎? > 還有人願意為這些os做assembler嗎? 難道沒有嗎.? Unix 沒有 assembler 嗎..? 呵呵.. 難道高階的os就沒有machine code 了嗎..? 呵呵.. 完全沒有用到 assembly 的OS要怎麼對速度最佳化我實 在很懷疑..
main(v,c) char**c;{for(v[c++]="Hello, world!\n" (!!c) [*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c)); **c=!c)write(!!*c,*c,!!**c);} ┌────────────────────────────────────┐ │ Qing Wang 交大資科八六級 王建興 is82219@cis.nctu.edu.tw │ │ Void: 140.113.5.151 7777 qing@ccca.nctu.edu.tw │ └────────────────────────────────────┘ ============================================================================= 發信人: is82219@cis.nctu (Qing), 信區: programming 發信站: 交大資科計算機中心 (Thu Feb 22 12:36:07 1996) 轉信站: cis_nctu!news.cis.nctu!cissun51!is82219 Terry (TerryAries.bbs@bbs.ncku.edu.tw) wrote: >> 難怪了.. 因為你的 assembly 還停留在不實用的階段. 呵... > 我不知你所謂的實用是什麼呢? 不會是 inline 吧? 我到現在都是整個 program > 用 assembly 寫的, 不過都是寫來自己用. 但我還是想知你所說的實用.. 這種全部都用 ASM 寫程式的做法, 是我還在讀高中時代的事. 記得 當時很堅持, 一定要全用 ASM 寫. 完成了生平第一個 EDITOR. 不 過高三之後才漸漸了解 ASM 和 高階語言搭配的效率以及開發速度 的協調. 我所謂的實用就是把你的程式中真的需要速度的部份或者 是對於硬體控制顯然比高階語言來得方便的部份以 ASM 來撰寫. 在讀高中的時候, 我一度對撰寫病毒很有興趣. 但是我很慶幸我並 不會認為 CRACK 或者是 VIRUS 僅是當前撰寫 ASM CODE 的人唯一 的出路. 在我撰寫的 AP 中, 仍然能適度的運用 ASM CODE 來搭配. 你不能說 ASM 能主宰一切, 但有人有這個需求, 有些東西有這個需求. 如果你不滿足這些需求, 你大可不用學, 我想這是 william 的意思. [deleted] > UNIX 是有 assembler, 但你會用嗎? 你知它的 system call 要如何寫就煩請告知, > 我實在不知如何寫 UNIX 下的 assembly (只會 VAX 的). 很抱歉, 我想 UNIX 已經成了許多不同機器上一種作業系統的規格(?) 並不是單一存在於某個機器之下的作業系統. 不過除了 PC 外, 我也 的確只能再寫一種罷了. 而且也沒有什麼實作的經驗. 不過我想重點 就是我沒有需要. 有人有需要. 不然誰來寫 OS. 呵.. 大家的說法都 是部份肯定 ASM, 不過你的說法卻是完全否定 ASM 有學習的必要. > 說一句, 台灣要有自己的技術, 就得對基本科學增加投資, 且台灣巿面的電腦書, > 幾乎都是廢物, 且看大陸的, 差太多了. 嗯.. 日本的科技能緊追西方就是能在最短時間內, 將西方的最新著作翻 譯成日文. 台灣的出版界的確需要加油.
main(v,c) char**c;{for(v[c++]="Hello, world!\n" (!!c) [*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c)); **c=!c)write(!!*c,*c,!!**c);} ┌────────────────────────────────────┐ │ Qing Wang 交大資科八六級 王建興 is82219@cis.nctu.edu.tw │ │ Void: 140.113.5.151 7777 qing@ccca.nctu.edu.tw │ └────────────────────────────────────┘ ============================================================================= 發信人: EightCloud.bbs@firebird (嵐雲), 信區: programming 發信站: 中正資工四百年來第一站 (Sat Feb 24 13:18:13 1996) 居士 (dhh.bbs@bbs.ntu.edu.tw) 提到: > 對不起,我想插個嘴....... > 我覺得除非想當一個系統設計師,否則不要學組語。 學組語, 我現在認為最大的好處, 也是很多人提過的, 就是了解 CPU 的運作模式. 雖然我現在已經很少用組語了, 但我在寫 C(++) 時, 都會想著這個程式碼會被 compiler 翻成怎樣的組語? 容不容易最佳化? 等等... 我還是覺得學組語, 對我來說, 是很有幫助的. > 因為今後我們將要進入另一個「作業系統的時代」,一些新的作業系統, > 如 linex 、OS2 、Win95 、WinNT 等等,我覺得應該要有能力掌控電腦設備的 > 一切,並將設備資源分配給我們使用,而組語厲害之處,就是有能力切入設備 > 控制的核心,萬一稍有不當的調配,是不是會將整個系統「摧毀」了? 在保護較好的 OS 裏, 如 linux, OS2, NT (95 不包括在內), 就算你用組語也不可能切入設備控制的核心, 危險的指令在使用者模式 (也就是一般應用程式執行的模式) 中是被禁止的, 一切要透過系統提供的 system call, 切入核心模式, 才可以執行 具有特權的指令. 而這個保護是透過 CPU 提供的功能, 如 x86 的保護模式.
歡迎至 http://gais.cs.ccu.edu.tw/ 使用 GAIS 查詢台灣學術網路資源(BBS,WWW,FTP) ============================================================================= 發信人: lsw.bbs@bbs.ntu (Lisan), 信區: programming 標 題: Re: 還要學組語嗎? 發信站: 台大計中椰林風情站 (Sun Feb 25 08:08:17 1996) 轉信站: cis_nctu!news.cis.nctu!news.csie.nctu!netnews.ntu!Palmarama ==> gsw.bbs@alab01.ee.nctu (DINO (狄諾)) 提到: > 0. 所謂「設備控制的核心」指的應該就是作業系統的核心吧! > 1. 誰說只有組合語言才有能力切入作業系統的核心,一些 Security & > Protection 做的較差的系統如 DOS ,其核心照樣可被其他高階語言 > (如 C、Pascal、BASIC 等) 所寫的程式所侵入。 > 2. 作業系統 Security & Protection 差,是當初設計不當或考慮不周 > 所致。跟程式語言好像沒有什麼關係,怪罪於「組合語言」有點荒謬。 > 3. 只要系統的 Security或 Protection 做的好,不管是不是組合語言 > 都無法侵入。 我有一些看法: 1.還沒有一個作業系統敢說自己是完全 secure 的。各式各樣尚未發覺的、隱藏的 bug 埋在系統中,等待被發掘。UNIX 系統是多人多工最廣泛的系統,其發展也有 數十年的歷史,到今天其 security 問題仍然不少,再加上各種版本及不同平台 的多樣性,要想 UNIX 安全有多麼困難。 2.組合語言比高階語言(或如 C 的"中階"語言好了)比起來的確不夠安全,因為 組合語言寫作上較容易出錯,不如高階語言般直覺,造成系統的問題。 3.組合語言使用 assembler,不如Compiler有著 type checking 等等較強制性的檢驗, 犯錯機率(尤其邏輯思考的錯誤)大增。 4.如 C 有著許多的函式庫,有些由作業系統提供,有些由 3rd party 提供,都比自己 寫來的安全,雖說組合語言也可連結,但是 (a) 沒有呼叫合法與否的 checking, 容 易出錯,(b) 這也不是函式庫設計的本意。 作業系統不希望直接用組合語言寫程式,除非有特殊必要。這違反作業系統作為電腦與 使用者之間介面的原意。 但是我不反對在高階語言設計外學習組合語言,只是除了有需要外只要了解概念就 好,這絕對對增進電腦概念有幫助。有一個懂電腦硬體及內部結構原理的人與不了 解的人,寫起程式來有時候真的會有差的。 至於寫程式那就不需要了。對於大一點的程式往往高階語言compile的結果其執行效率 要比手工寫來的好。還有組合語言寫作並未考量轉移平台的 portability。
[Origin: ◎椰林風情◎] [From: raider.ee.ntu.edu.tw] [Login: **] [Post: **] ============================================================================= 發信人: newmike.bbs@csie.nctu (Mike), 信區: programming 發信站: 交大資工鳳凰城資訊站 (Sun Mar 3 16:33:06 1996) 轉信站: cis_nctu!news.cis.nctu!news.csie.nctu!phoenix ==> 在 ck830385@ck.tp.edu.tw (Shi-Chung Chou) 的文章中提到: > 說實在的, 爭這種問題實在是很無聊 > 如果組語會用到的話就學, 用都用不到的話, 就不用花費心思去學 > 如果只是想了解, 只要放參考資料在旁邊對照就好了. Hi: 當然這樣說也沒什麼不對。不過學組合語言和其它高階語言截然 不同,需要了解一些硬體的東西,例如鍵盤的工作原理、螢幕的工作 原理、....。因為組合語言是因機器而異的,所以不可能像其它高階 語言那麼方便移植(事實上是需要重寫),那麼為什麼要還要學它呢 ﹖講組合語言的書會列一大堆理由,不妨看一看。我認為要成為一個 職業的程式設計師的人,不學組合語言會有很多難題解決不了,一是 執行速度的瓶頸,一是當庫存函式有不可理解的錯誤發生時,用組合 語言可以改正。一般職業程式設計師都是以某一種高階語言為主,少 數程式碼以組合語言來完成。 NewMike 03-03-1996. ============================================================================= 發信人: clock.bbs@csie.nctu (咖啡超人), 信區: programming 發信站: 交大資工鳳凰城資訊站 (Mon Mar 4 13:47:32 1996) 轉信站: cis_nctu!news.cis.nctu!news.cc.nctu!news.csie.nctu!phoenix ==> 在 ates.bbs@cis.nctu.edu.tw (我不喜歡我自己耶) 的文章中提到: > 這些理由都好像是在 Win95, OS/2 還沒風行前的說法, > 那.. 現在呢? 又, 未來呢? 嗯, 見仁見智啦.. 只不過目前我所看到的是, 在 Win95 或 OS/2 下的程式並都是全部都是用 C 或其他高階語言製 作. 啊, 年輕人, 花些時間多學些東西是不會錯的.. 要花時 間在這裡討論學不學組合語言倒不如直接去學學看.. 而且, 您覺得這個世界是由 Win95/OS2 構成的嗎? (題外話, 假如『直接用得到』的知識才去學習, 現在的 大學可能會變成職業訓練班了..)
----====**** Good-bye & Hello ****====----

沒有留言:

張貼留言