Albert.B
我記得我以前好像講過,不過我還是再強調一次...
"組合語言非常不適合被當作單獨的電腦程式語言來學習!!!"
所謂的"組合語言"是可以跟某一種CPU的二進位指令碼一對一
對應的速記符號,當你在講"組合語言"時,實際上是指某一種
CPU的指令集的速記碼,而且你指的還是"某一種組譯器"所能
接受的格式.
為什麼組合語言不適合這樣教? 因為要一個初學者了解組合
語言,他必須先了解這顆CPU,要了解一顆CPU,他至少要知道
大致上CPU是怎麼回事,所以,他必須先學完計算機結構,至少,
要學完"指令集",然後再以某個特定CPU的指令集為例子,教他
這種CPU的組合語言.
學會了C,你到哪用的C都大同小異,但是在不明白計算機結構
的情況下學x86組合語言,你可能不會了解MIPS或Alpha的組語
要怎麼寫,不要說是別種CPU,你看了施威銘那本組合語言,我
就不相信你知道同樣在x86底下,UNIX裡面要顯示字元怎麼寫,
你也不會知道在不准靠INT 21(DOS),INT19(BIOS),的情況下
要怎麼去用組合語言存取硬體,偏偏這些才是組合語言的真正
目的.
這世界上沒有哪本書可以讓初學者不碰計算機結構,就可以
學好組合語言的,要基礎,要觀念清楚,請先找一本清楚的計
算機結構課本,沒有這種基礎,施威銘那本(以及坊間絕大部
分的組合語言"入門"書)只會讓你知道怎麼呼叫DOS和BIOS
裡面別人已經幫你寫好的東西,至於那些東西怎麼寫,你大概
也學不會.
--
廟小妖風大
池淺王八多
--
> : 對於這個部份我深有同感,
> : 市面上x86的書好像都是在講解
> : DOS下的組合語言使用法,
> : 對於一些我比較想要了解的
> : 部份都未提及..
> 我以前也看到有人 post 說,如果寫組語都只是在 call 別人寫好的程式(int),
> 那這樣根本不算是真正在寫組語。這樣的說法嚴格了一點,不過市面上的組語書
> 的確大都以「你要學 DOS下 x86 組合語言」為前提。我也很想知道如果不用DOS
> 和 BIOS 的中斷,要怎麼寫個程式達到有那些中斷的功能或者存取硬體,不知道
> 有什麼書是以這樣的主題為內容呢?想來真的是蠻不容易的。
那就是我說的....
有沒有書會拿這種主題當內容? 很抱歉,沒有.
為什麼沒有? 因為講不完,"存取硬體"意味著你
要知道這個硬體的介面(也就是溝通的規則),這
世界上有多少種介面? 有多少種規則? 你自己
隨時可以創出一個硬體介面來,怎麼可能有哪本
書告訴你所有的規則?
舉個例子來說,IDE硬碟知道吧? 知道怎麼存取嗎?
這個問題要問你的IDE硬碟控制器,如果很幸運的,
這個控制器是傳統的定址方式,你可以知道IRQ是14,
I/O port是1F0h-1F7h(我沒記得很確實),然後你
就要找出ST506/412當年的介面規定,上面會告訴你
1F0是資料暫存器,1F1是指令等等等等,然後你就
用in/out對暫存器讀寫適當的值.
如果不是,你就要看該控制器的介面手冊,然後自己
去想辦法摸出方法來存取.
很麻煩是不是? 但是它們的骨子裡是一樣的,也就
是說,你透過CPU對外界的存取(記憶體或是I/O port)
來對一個硬體裝置下達它能接受的命令,正如同你
學習以x86能接受的方式去對CPU下命令一樣,而這個
裝置所能接受的命令,就是它的指令集.
所以你可以了解為什麼我極力鼓吹學習組合語言的
應該先學計算機結構,因為你要先有這種基本的概念,
才能在學習組語的過程中知道自己在學的是什麼,
知道如果遇上問題,你應該去找什麼樣的資料.
也唯有了解計算機結構,你才能了解為什麼我們通常
用 xor ax,ax,而不用mov ax,0,雖然這兩個作用一樣.
Reference:
請介紹一本適合初學者關於組合語言的書
Saturday, July 31, 2010
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment