請各位高手,介紹一本基礎且觀念清楚關於組合語言的書
~~謝謝
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: n168.n203-95-216.eranet.net
--
人生最重要的是--
Be yourself!
快樂最重要!
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: cafepc6.get.com.tw
我記得我以前好像講過,不過我還是再強調一次...
"組合語言非常不適合被當作單獨的電腦程式語言來學習!!!"
所謂的"組合語言"是可以跟某一種CPU的二進位指令碼一對一
對應的速記符號,當你在講"組合語言"時,實際上是指某一種
CPU的指令集的速記碼,而且你指的還是"某一種組譯器"所能
接受的格式.
為什麼組合語言不適合這樣教? 因為要一個初學者了解組合
語言,他必須先了解這顆CPU,要了解一顆CPU,他至少要知道
大致上CPU是怎麼回事,所以,他必須先學完計算機結構,至少,
要學完"指令集",然後再以某個特定CPU的指令集為例子,教他
這種CPU的組合語言.
學會了C,你到哪用的C都大同小異,但是在不明白計算機結構
的情況下學x86組合語言,你可能不會了解MIPS或Alpha的組語
要怎麼寫,不要說是別種CPU,你看了施威銘那本組合語言,我
就不相信你知道同樣在x86底下,UNIX裡面要顯示字元怎麼寫,
你也不會知道在不准靠INT 21(DOS),INT19(BIOS),的情況下
要怎麼去用組合語言存取硬體,偏偏這些才是組合語言的真正
目的.
這世界上沒有哪本書可以讓初學者不碰計算機結構,就可以
學好組合語言的,要基礎,要觀念清楚,請先找一本清楚的計
算機結構課本,沒有這種基礎,施威銘那本(以及坊間絕大部
分的組合語言"入門"書)只會讓你知道怎麼呼叫DOS和BIOS
裡面別人已經幫你寫好的東西,至於那些東西怎麼寫,你大概
也學不會.
--
廟小妖風大
池淺王八多
--
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
謎:企圖在日後可能被人注意之處,留下隱藏的規律,而自身終究被埋沒於歷史。
<---Avat312, somewhere in time--->
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: u861544.JEN.ab.nthu.edu.tw
當然組語最強大的地方還是在硬體控制方面
但是應該不用把"明白計算機結構"當作組語入門的門檻
: )
--
※ [36;1m風信遊子 [35m(bbs.cm.nctu.edu.tw) [37m ★ [33mPost From: [34m MaxChang.Dorm13.NCTU.edu.tw [m★
不對,組合語言本身的硬體相關性,就已經限制了你的目的.
如果你學的是x86組合語言,你的目的必定是在x86上發展軟體,
否則你沒有必要學.
> 像是也可以拿來和c混用
> 便可以在程式開發時間和速度上有較大的取捨空間等
> 並不一定是拿來控制硬體
> 好好的善用組語的特色,應該在很多地方都可以有所發揮
> 當然組語最強大的地方還是在硬體控制方面
> 但是應該不用把"明白計算機結構"當作組語入門的門檻
> : )
請問一下:沒學過計算機結構,你怎麼知道什麼時候用組合語言
加速? 你怎麼知道如何用組合語言加速? 沒有學過計算機結構,
你怎麼知道組語的"特色"是什麼?
沒有足夠的計算機結構當背景,你的組合語言根本就是空中樓閣,
當近代的高階語言編譯器可以針對硬體編譯出比你自己硬coding
更快更有效率的機械碼,當你根本還不知道自己的組語程式要怎
麼寫才能讓Pentium Superscalar最佳化,憑什麼說你可以發揮
組合語言的特色?
計算機結構絕對是學好組語的門檻,除非你只是想告訴別人你知道
mov AX,BX而已.
--
<壞份子一號簽名檔> Albert B. Wang , Email:alb...@neto.net
<廣告> 台灣經濟奇蹟幕後的無名英雄! 啊...copy啦! copy啦1....</廣告>
<抵制行動> 抗議Hinet放任使用者濫發垃圾電子郵件,請共同抵制 </抵制行動>
<FAQ> 問:為什麼我超頻超不上去? 答:因為你祖宗沒積德,風水不好! </FAQ>
</壞份子一號簽名檔>
簡單的說,錯,詳細點說,你的觀念有根本上的錯誤.
很多書會提到加快程式執行的方法,其中最主要的
課題集中在節省迴圈所花的時間,要加快迴圈執行,
最重要的工作是什麼?
改用組合語言? 錯! 最重要的是"找出迴圈中的重複運算"
也就是每次迴圈執行時運算結果都固定的敘述,把這些敘述
在回圈外先算好,用固定變數代進去.其實這只是基本原則
"減少迴圈的敘述"的基本運用.
詳細的挑選演算法,小心的把迴圈中可以移出迴圈的運算找
出來,這點如果可以確實做到,效果絕對比不經思考直接把迴
圈內敘述用組語改寫有效率的多,你所謂的"斟酌",絕對是這
些可行方案中最後也最不重要的方法,而且你也還是沒注意
我所說的"沒學過計算機結構,你拿什麼來證明自己用組語改
寫的一定比現代編譯器編譯的要快"?
> : 沒有足夠的計算機結構當背景,你的組合語言根本就是空中樓閣,
> : 當近代的高階語言編譯器可以針對硬體編譯出比你自己硬coding
> : 更快更有效率的機械碼,當你根本還不知道自己的組語程式要怎
> : 麼寫才能讓Pentium Superscalar最佳化,憑什麼說你可以發揮
> : 組合語言的特色?
> 許多編譯器確實都可以針對cpu做最佳化
> 但是在其他的部分(像我提到的迴圈)
> 編譯器並沒有辦法真的幫你做到最好的效率
> 因為每個人程式的目的.寫法不同
> 編譯器頂多可以做到"一般性"的編譯
> 所以,比較好的情形應該是善用編譯器的優點
> 把自己不懂得地方交給編譯器來做
> 然後編譯器較弱的地方便可以使用組語補強
那是你沒學過compiler最佳化設計,才會有這樣的誤解.
所謂"編譯器並沒有辦法真的幫你做到最好的效率"是指
你自己使用了錯誤的演算法,多餘的迴圈內動作,這些錯
誤都不是你用組語就可以彌補的.
看了你上述的文章...你很強調"計算機結構"的重要!!
那請你推廌一本適合初學者看的計算機結構的書吧!
因為我學校也開始在教程式設計了...可是我都看不懂...
所以請你說一本吧...
書名..出版社...價錢...
謝啦.... ^__^
--
[1;37;42m別惹起蠍子對你的敵意... [m
[1;37;42m那種反抗你會受不了的... [m
[1;37;42mnavy [m
--
※ From: 210.60.63.6
[1;33;45m本文來自: [0m [1;37;46m Our Story BBS , 210.60.55.253 [0m
: 這世界上沒有哪本書可以讓初學者不碰計算機結構,就可以
: 學好組合語言的,要基礎,要觀念清楚,請先找一本清楚的計
: 算機結構課本,沒有這種基礎,施威銘那本(以及坊間絕大部
: 分的組合語言"入門"書)只會讓你知道怎麼呼叫DOS和BIOS
: 裡面別人已經幫你寫好的東西,至於那些東西怎麼寫,你大概
: 也學不會.
--
一位拓撲學家不能說出炸麵餅圈和他的咖啡杯之間的差別....
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: 210.71.60.254
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: h141.s41.ts30.hinet.net
那就是我說的....
有沒有書會拿這種主題當內容? 很抱歉,沒有.
為什麼沒有? 因為講不完,"存取硬體"意味著你
要知道這個硬體的介面(也就是溝通的規則),這
世界上有多少種介面? 有多少種規則? 你自己
隨時可以創出一個硬體介面來,怎麼可能有哪本
書告訴你所有的規則?
舉個例子來說,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,雖然這兩個作用一樣.
--
turing# finger jvne...@math.ias.edu
[einstein.math.ias.edu]
Login Name TTY Idle When Where
jvneumann John von Neumann console 12: Sat 17:52
之所以會介紹這本書,只是自己正在看,覺得還不錯!
(可以引導像我們這些初學「組語」的人進入「組語」,
畢竟像這類低階的語言,對於一般人來說,總不如高階語言來的親近!)
而這本書卻可以用簡易的實例,清楚的觀念帶領我們入門,
所以才想介紹給同在「書堆」裡打滾,
暗夜摸索的人,希望大家都能夠輕鬆地入門.
至於是不是入門書,我不敢說,也沒資格說,
畢竟適合我閱讀的書並不一定適合他人!
只是給個建議有空去書局翻翻看,
滿意就帶回家去吧...:)
--
人生最重要的是--
Be yourself!
快樂最重要!
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: cafepc3.get.com.tw
的確,您的觀念與我一樣...介紹自己覺得不錯的書給大家
至於讀者自己也應該有判斷的能力才對,哪種書適合自己 自己應該最清楚
當然,我沒有否定Albert先生的見解,您的建議是正確的,組語與計算機結構
是相當有關係的.不過人家也不過才問哪一本書基本且觀念清楚,
您也無須牽涉到計算機結構的概念,若您想要造福大家
何不寫一篇"如何學好組合語言"來教導初學者?
小弟很久沒有寫組語了 不過也寫了一段時間 記得那時自修組語時
尚未修過計算機結構(後來才修) 不過我還是學得很高興
而且許多在學習所獲得的觀念 非常有助於我修計算機結構 ...
我現在回憶過去的學習歷程, 在學習組語的過程中, 我已經不知不覺地
得到許多CPU與計算機結構的觀念,甚至在我學組語之前,我尚未修OS.
當然我不是很厲害的人,書也不過看了幾本,原文書方面包括
Peter Norton以及黃皮書...後來買了MASM原版軟體,也K了裡面的一本手冊
其他都是工具書. 在這時,我連計算機結構與作業系統都未修過
難道您認為我就學不好嗎?
Albert先生,若您覺得網路上很多人都是傻瓜的話,何不寫一篇
"如何好好學習組合語言"來造福我們這群傻瓜?
--
[;33;45m◣ [1;31m., [33m 140.115.82.163 [37m 所發表之文章 [m
[;33;45m█◣ [1;31m-●- [33m◢█◣ [32m/" [37m‧ [36m國立中央大學 資訊管理研究所 [m
[;31;44m == [1;33m◢████◣ [37m‧ [32m破曉時刻 sunrise.twbbs.org [m
--
人生最重要的是--
Be yourself!
快樂最重要!
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: pc67.csie.fju.edu.tw
就"如何學好組語"來說,我想我已經寫了不少篇了,也已經
講得很清楚了,學好組語的第一步,是要有良好的計算機結
構概念,這是我想要造福有志於組語學習者的方法.
還有,這是個自由的社會,如果你覺得要造福大家一定要來
篇冠冕堂皇的"如何學好組合語言"來教導初學者,請自便,
我等著看閣下的大作;至於我有我自己的做法;如果你認為
無須牽涉到計算機結構的概念,那是"你的想法",我不需要
因為對方只問"哪一本書"我就得答哪一本.
> 小弟很久沒有寫組語了 不過也寫了一段時間 記得那時自修組語時
> 尚未修過計算機結構(後來才修) 不過我還是學得很高興
> 而且許多在學習所獲得的觀念 非常有助於我修計算機結構 ...
那是因為有很多你本來應該先從計算機結構學到的東西,因為
學組語而不得不先學到.
> 我現在回憶過去的學習歷程, 在學習組語的過程中, 我已經不知不覺地
> 得到許多CPU與計算機結構的觀念,甚至在我學組語之前,我尚未修OS.
> 當然我不是很厲害的人,書也不過看了幾本,原文書方面包括
> Peter Norton以及黃皮書...後來買了MASM原版軟體,也K了裡面的一本手冊
> 其他都是工具書. 在這時,我連計算機結構與作業系統都未修過
> 難道您認為我就學不好嗎?
學不學得好,只有你自己心裡有數,我一不是你老師,二不是你老闆,
三沒看過你寫過什麼真正有內容的組語文章或程式碼,怎麼會知道
你學得好不好? 你怎麼會問一個跟你毫不相干的人"你認為我學得
不好嗎"? 又不是三歲小孩...
> Albert先生,若您覺得網路上很多人都是傻瓜的話,何不寫一篇
> "如何好好學習組合語言"來造福我們這群傻瓜?
第一,你從哪裡看到我覺得網路上很多人都是傻瓜? 第二,
我為什麼要聽你的話來寫文章造福傻瓜? 第三,文章已經
寫了好幾篇,只有傻瓜才看不出來,既然看不出來,再寫一篇
會有用嗎?
我從來不覺得網路上很多傻瓜,不過很多人拼了命要表現出
他是傻瓜給我看,這實在沒辦法拒絕.
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 139.175.127.70
我是覺得學組合語言也可以讓我們了解計算機結構......
並不一定要先學計算機結構......要學機算機結構可以先從組語下手
80x86與MASM 6.1 組合語言我是覺得很不錯至於計算機結構
COMPUTER ORGANIZATION & DESIGN
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: ts251-201.ndhu.edu.tw