線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:9629
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

請問一下關於RISC的基本知識?

答題得分者是:syntax
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-28 22:20:54 IP:210.240.xxx.xxx 訂閱
請教各位高手一下
大家應該都知道RISC與CISC
目前我將RISC與CISC歸類於組合語言 <-- 對嗎?
我認為一般在OS下的動作命令都是以組合語言表示
然後通過CPU的組譯器轉換成機械碼在由CPU來處理(RISC與CISC的定義)
再來假設我在OS平台上架設C 的程式設計環境透過程式
的編寫下達命令經過C 的設計環境內建的Compiler轉換成
機械碼後再經過CPU處理(所以他的處理過程完全跟RISC不相干?)
因為小弟看過很多說明RISC與CISC的文章內容常用Compiler表示將risc或cisc指令集轉換程機械碼
但是組合語言是用組譯器來轉換高階語言才是用compiler來轉換於是小弟陷入迷網
關於小弟這次發文如果造成大家困擾先說聲抱歉 我會在改進
以上是小弟的見解有錯請提出修正謝謝
各位真的很感謝你們浪費了寶貴時間幫我解答更是感謝版主的支持但是要再次跟各位說聲抱歉因為我的表達能力不好
但是我真的很想將目前我所遇到的RISC這個課題搞清楚因為我認為如果只是一個很基本的課題我就解決不了我想日後
我所做的研究也就沒有意義了(小弟是個研究生)
首先我要個版主說明一下我看過維基的資料但是我覺得它給予我的資訊並不完全
這樣說好了 先說說CPU --> RISC精簡指令集屬於CPU的設計模式
CPU大家都知道只能接受機械碼再來就是CPU主要以算數邏輯單元與控制單元為主要重點我所謂的動作是表示需
透過算數邏輯單元與控制單元作處理的動作所以相對要給予機械碼再來往上推機械碼應該是由最接近機械碼的
組合語言組譯而成所以組譯器我認為在RISC的CPU出廠前已將組譯器(程式)燒錄於ROM中所以我才會猜測
RISC所謂的精簡指令集是組合語言而RISC就是組合語言的一個名稱這ㄧ切說法部分可以說是我的猜測
但是我又曾看過文章表示CISC是最早期的CPU設計模式是因為當時的CPU內部硬體設計較為複雜電晶體較多但是後來RISC的推出
是為了減少CPU的負擔相對CPU在設計上也變簡單電晶體數下降減少成本但是相對的它的Compiler複雜度提升(可以說是將原先cpu處理上的工作排給compiler來做這樣一來risc在cpu的處理比cisc的cpu快但是指令數卻比較多)
請問當你們看到compiler時是否有疑惑?因為我覺得應該是assembly

而我之所以會認為risc指令集是組合語言是因為我認為指令不等於機械 機械只接受0和1 指令則是 add a b

所以我想說的是risc的cpu應該是精簡指令的組合語言透過組譯成機械碼經過cpu的邏輯單元與控制單元來處理呈現出你需要的結果
編輯記錄
maxgto 重新編輯於 2007-11-29 08:40:41, 註解 無‧
maxgto 重新編輯於 2007-11-29 21:12:40, 註解 無‧
maxgto 重新編輯於 2007-11-29 21:32:29, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-29 00:23:16 IP:123.193.xxx.xxx 訂閱
你想討論的是屬於計算機結構方面的東西吧?!
這方面的知識, 教科書裡面很多喔
像是邏輯運算單元, 暫存器 之類的....
機器編碼的一些op-code加上許多種定址模式
配合一些Segment(如: CS:IP) , 只要載入這些機
器碼, 設定好相關資料, CPU 就能工作了


OS 則屬於System Programming 方面的東西,
講的是一些名為管理實為霸佔電腦資源的作業系統程式
主要負責的工作像是 CPU Scheduling, Memory Management,
Process Scheduling 之類的管理, 壓迫著CPU努力的工作, 嫌
CPU 的閒置時間(Idle time)太可惜了, 搞個Multi-Process, Multi-task
的名目, 叫CPU更有效率的工作....

嗯, CPU只懂得0101001..., 人類不容易理解, 所以透過像組合語言之類
的組譯器或像是C之類的編譯器來和CPU溝通, 在以前DOS時代, OS管
得不多的時候, 這種溝通感覺來的比較直接一點, 不像現在Windows, 向
系統要資源, 嗯, 要先取得相關資源的Handle才可以繼續後續的工作....

閒聊, 閒聊, 僅供參考....
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-29 03:42:13 IP:61.64.xxx.xxx 訂閱
不是想吐你嘈!
你所說的,跟新手一樣

請問你一下喔!你
看過計算機結構相關書籍否?
看過 VLSI 相關書籍與實作過否?

不要取個「詳談」來談「基本」的東西

書上的知識,不需要來這裡重貼,尤其是基本觀念,這種你自己看書就可以瞭解的,在家自己多看即可
不要來這裡亂,徒然浪費大家時間

既然要談 CPU 基本結構,那就來 ALU、SMP 電路實作或理論推演
不然就是快取安排之類的

沒有人會要跟你「詳談」基本觀念,這種對於真的懂 CPU 的人(不包含我,我似懂非懂而已)來說,實在很浪費時間

更不用說,你的觀念也不全然正確,也有點狹隘

最起碼,你真懂了,再來談,不然,請到新手區去發問,謝謝你的配合,讓論壇多一些優質文章,而不是這種

至於你的見解,你去看書後就會知道對不對,前一兩章節,就可,希望你不排斥看點書

===================引 用 maxgto 文 章===================
請教各位高手一下
大家應該都知道RISC與CISC
目前我將RISC與CISC歸類於組合語言

其實一般在OS下的動作命令都是以組合語言表示
然後通過CPU的組譯器轉換成機械碼在由CPU來處理

再來假設我在OS平台上架設C 的程式設計環境透過程式
的編寫下達命令經過C 的設計環境內建的Compiler轉換成
機械碼後再經過CPU處理

以上是小弟的見解有錯請提出修正謝謝
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-29 09:49:14 IP:61.220.xxx.xxx 訂閱
不對, 您的觀念一團混亂
> 目前我將RISC與CISC歸類於組合語言
不對 (把 摩托車 和 汽車 歸類於 公路)
RISC (Reduced Instruction Set Computer) 
http://zh.wikipedia.org/wiki/精简指令集
CISC (Complex Instruction Set Computer)
http://zh.wikipedia.org/w/index.php?title=复杂指令集&variant=zh-tw
計算機概論
http://tw.kuso.cc/cs/Jupiter_FTP/95 FTP/¦ҥjÃD¸ѵª/marsalis/­p·§/89¦~¬ã¨s©ҭp·§¸ÕÃD¸ѵª(total).doc
>其實一般在OS下的動作命令都是以組合語言表示
不對, OS 無法直接執行組合語言, 也不是以組合語言表示
以 MS-Windows (OS)來說, 可以執行 dir 等內部命令, xcopy 等外部命令, for 等批次檔案命令
不管是 C 或組合語言 都不能直些在 OS 下執行
使用 C 語言寫成 C 程式碼, 一般要經過 C 的 Compiler 作 Compile 成為 Machine Code, 才能執行
使用 Assembly 語言寫成程式碼, 一般要經過 Assembler 組譯成為 Machine Code, 才能執行
>然後通過CPU的組譯器轉換成機械碼在由CPU來處理
不對, CPU 沒有組譯器, 組譯器是在 OS 下執行的程式
>因為小弟看過很多說明RISC與CISC的文章內容常用Compiler表示將risc或cisc指令集轉換程機械碼
>但是組合語言是用組譯器來轉換高階語言才是用compiler來轉換於是小弟陷入迷網
一般將 組合語言 組譯 成為 可執行程式碼的 程式 稱為  組譯器
一般將 高階語言 編譯 成為 可執行程式碼的 程式 稱為  編譯器
如果您是在 RISC 電腦上使用 組譯器 (或 編譯器), 一般會將 組合語言(或 高階語言) 組譯(或 編譯) 成為使用 RISC 指令集的 程式碼(或 機器碼)
如果您是在 CISC 電腦上使用 組譯器 (或 編譯器), 一般會將 組合語言(或 高階語言) 組譯(或 編譯) 成為使用 CISC 指令集的 程式碼(或 機器碼)
(某些 Compiler 或 Assembler 或許有跨平台 Compile 或 Assemble 的能力, 一般人不會需要這樣用)
 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2007-11-29 09:49:45, 註解 無‧
pcboy 重新編輯於 2007-11-29 09:50:02, 註解 無‧
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-29 11:54:01 IP:61.218.xxx.xxx 訂閱
CPU 執行的, 都是 machine code, 人也可以直接寫 machine code, 只是很花工.

組語的特性, 是組語的指令集與 CPU 的指令有著一對一的關係, 一個組語的指令,
就直接對應到一個 CPU 的指令. 而其它中高階的語言, 就沒有這種對應關係了.

而 CISC 就是指 CPU 提供了一大堆功能強大的指令, 供設計者使用, 但是隨著人類
的懶惰與科技的進步, 愈來愈少人真的用組語在開發系統, 取而代之的, 都是一些
中高階語言.

中高階語言, 透過 compile 產生出真正給 CPU 的指令, 通常只占 CPU 指令集的
一部份, 以二八論來說, compile 產生的指令集, 可能只占 CPU 指令集的 80%.
剩下的 20% CPU 指令, 根本就用不到. 但是, 這剩下的 20% CPU 指令集, 通常是
最難開發的 (指設計 CPU), 也許占用了 80% 的 CPU 設計時間與面積.

所以就有人開始動腦筋, 既然這些強大的 CPU 指令, 不再被使用, 那甘脆設計
CPU 時, 就不再提供這些指令了, 這樣可以減小 CPU 的面積, 降低價格, 並提
昇剩下指令的執行速度. 這種指令集比較簡化的 CPU, 就是 RISC.

至於 OS, 那是一個全然不同的課題, 也與你講的內容不太一致, 所以略去不談.
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-29 19:55:45 IP:61.64.xxx.xxx 訂閱
這樣就清楚多了,可以讓人清楚知道你的問題與意圖,如此,回答才會切中核心

pcboy 已經回答大部分的問題了,bernie_w39 末段的說法,並不是很正確,不提供指令與提升指令執行速度沒有因果關係,同時 RISC 並不是因為不提供指令才稱為 RISC,是因為設計理念不同,所以其末段看法有點反果為因

建議看 pcboy 所提供的 wiki 連結,解釋的滿清楚的,或看書 (wiki 真是我們的好朋友)

另外我是覺得你的思考方式很特殊 --> 我認為一般在OS下的動作命令都是以組合語言表示
不知道你是如何想的,動作就是動作,命令就是命令,與組語何干?一如將目錄與檔案列出,我們會使用 dir 這個命令,去執行「將目錄與檔案列出」這個動作,哪裡來的「用組語表示」?讓人想不通,要是你說「使用組語實作出該動作的功能」那就可以讓人瞭解

因為小弟看過很多說明RISC與CISC的文章內容 <--- 你真的看過嗎?有的話,又讓你問這些問題,那麼那些文章可以丟了
pcboy 解釋的很清楚,但我想你可能想知道為何有時說 組譯 Assemble,有時又用編譯 Complie,所以補充一下(這是書上無法直接看出的隱性觀念)

組合語言,因為很接近機器語言,是一種「助憶」語言 (幫助記憶與簡化機器語言的東西),所以是一個指令一個動作,所以只需要將該動作所對應的機器碼,與資料組合 Assemble 後寫入執行檔中,所以稱為組譯,可以看成組合與翻譯 (很像單字翻譯)

高階語言,不是有多高階,不要被「高階」所迷惑,不過是一個名字,不然哪天改叫「快樂語言」,真的就快了囉?所以其意思是「高階」語言比較接近人類的思考與交談方式,故以一名稱「高階」命名之,也因此,必須做「轉化」的動作,將「意思」轉為「一個一個的動作」,所以我們稱之為編譯 Compile,可以看成,編輯與轉譯 (很像文句轉譯)

所以 Compile 後的機器碼,實際上的「動作」,與我們所寫的高階語言程式的指令動作,都會有所出入,有的甚至會有很大的不同 (有 Compiler 最佳化的差異會比較大),但是,意思一樣,就是我們要做的事

像這種知識,建議你由課堂或是書籍中取得,一來是有系統化,二來是面對面討論會比較清楚

網路論壇這種機制,只適合針對很清楚的議題,做討論與切磋

漫天式的無範圍討論、或是範圍過廣的,都不是很適合,簡單的說,只適合很狹小的範圍中做討論,不然說不完,也說不清


===================引 用 maxgto 文 章===================
請教各位高手一下
大家應該都知道RISC與CISC
目前我將RISC與CISC歸類於組合語言 <-- 對嗎?

我認為一般在OS下的動作命令都是以組合語言表示
然後通過CPU的組譯器轉換成機械碼在由CPU來處理(RISC與CISC的定義)

再來假設我在OS平台上架設C 的程式設計環境透過程式
的編寫下達命令經過C 的設計環境內建的Compiler轉換成
機械碼後再經過CPU處理(所以他的處理過程完全跟RISC不相干?)

因為小弟看過很多說明RISC與CISC的文章內容常用Compiler表示將risc或cisc指令集轉換程機械碼
但是組合語言是用組譯器來轉換高階語言才是用compiler來轉換於是小弟陷入迷網

關於小弟這次發文如果造成大家困擾先說聲抱歉 我會在改進

以上是小弟的見解有錯請提出修正謝謝
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-30 07:13:57 IP:203.204.xxx.xxx 訂閱
maxgto 兄
建議不要看完其他人的回覆後, 您又修改自己原來的發文, 而是應該回覆
不然整個討論串看起來很怪
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-11-30 08:45:37 IP:61.220.xxx.xxx 訂閱
建議加上標點符號, 不管全形或半形
> 各位真的很感謝你們浪費了寶貴時間幫我解答,更是感謝版主的支持,但是要再次跟各位說聲抱歉因為我的表達能力不好
可以慢慢學著改良表達, 只要有心, 會愈來愈好 (小弟的作文也不好)
> 但是我真的很想將目前我所遇到的RISC這個課題搞清楚, 因為我認為如果只是一個很基本的課題我就解決不了, 
> 我想日後我所做的研究也就沒有意義了(小弟是個研究生)
不懂則問; 雖懂而有疑問則問; 雖懂而想知更多則問, 這是好事情
> 首先我要個版主說明一下, 我看過維基的資料但是我覺得它給予我的資訊並不完全
維基 是大家編寫的, 不保證100%正確 (就算是維基官方編寫, 也未必能保證)
 
> 這樣說好了 先說說CPU  --> RISC精簡指令集屬於CPU的設計模式 
> CPU大家都知道只能接受機械碼, 再來就是CPU主要以算數邏輯單元與控制單元為主要重點, 我所謂的動作是表示需
> 透過算數邏輯單元與控制單元作處理的動作, 所以相對要給予機械碼,
> 再來往上推, 機械碼應該是由最接近機械碼的組合語言組譯而成 => 所以組譯器我認為在RISC的CPU出廠前已將組譯器(程式)燒錄於ROM中, 
> 所以我才會猜測RISC所謂的精簡指令集是組合語言, 而RISC就是組合語言的一個名稱, 這ㄧ切說法部分可以說是我的猜測
> 但是我又曾看過文章表示CISC是最早期的CPU設計模式, 是因為當時的CPU內部硬體設計較為複雜, 電晶體較多,
> 但是後來RISC的推出是為了減少CPU的負擔, 相對CPU在設計上也變簡單, 電晶體數下降, 減少成本, 
> 但是相對的它的Compiler複雜度提升 
RISC 的 Compiler 應該沒有 CISC 複雜, 因為 CISC 指令種類多
> (可以說是將原先cpu處理上的工作排給compiler來做, 這樣一來RISC在CPU的處理比CISC的CPU快, 但是指令數卻比較多)
將原先cpu處理上的工作排給compiler來做, 好奇怪的說法
> 請問當你們看到compiler時是否有疑惑? 因為我覺得應該是assembly 
聽不懂
> 而我之所以會認為RISC指令集是組合語言, 是因為我認為指令不等於機械, 機械只接受0和1, 指令則是 add a b 
指令是不等於機械碼
> 所以我想說的是risc的cpu應該是精簡指令的組合語言, 透過組譯成機械碼, 經過cpu的邏輯單元與控制單元, 來處理呈現出你需要的結果 
risc的cpu應該是精簡指令的組合語言 => 組合語言沒有 RISC 或 CISC 的分別, 這是 Assembler 將它組譯成為機械碼才要考慮的東西
 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2007-11-30 08:54:32, 註解 無‧
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-11-30 10:27:30 IP:210.240.xxx.xxx 訂閱
pcboy你好

>>RISC 的 Compiler 應該沒有 CISC 複雜, 因為 CISC 指令種類多...
>>將原先cpu處理上的工作排給compiler來做, 好奇怪的說法...
-------------------------------------------------------------------------------------------------------------------------------------------------------
<<精簡指令及根複雜指令集的差異在於,精簡指令的指令執行週期短(cpu處理週期短),相對的cpu內部電路設計
<<精簡化但是假設相同運算下cisc會比risc的指令數少,再來指令集複雜度高的compiler在設計上容易,相對cpu執行
<<週期會拉長,剛好與risc相反,所以簡單來說早期(cisc的年代)設計的cpu著重於硬體結構上的支援,所以在設計
<<上硬體較為複雜(電晶體用的多),而軟體的工作較為簡單,所以在組譯器的設計上較為簡單,漸漸科技進步
<<(risc的年代)cpu的硬體設計越來越精簡,相對著重於軟體的支援,導致compiler的設計變的困難
<<(指令同步處理的出現).
-------------------------------------------------------------------------------------------------------------------------------------------------------
>>聽不懂
-------------------------------------------------------------------------------------------------------------------------------------------------------
<<上面回答的部份所看到的compiler我認為應該換成assembly,但為何我要寫compiler,是因為我所看到的文章都
<<以compiler為主,但是我就出現疑問了,我目前在說的指令集都是以cpu的內部為出發點,所以cpu的指令集應該屬
<<於組合語言的語法,那用compiler怎麼會對呢?
-------------------------------------------------------------------------------------------------------------------------------------------------------
>>risc的cpu應該是精簡指令的組合語言 => 組合語言沒有 RISC 或 CISC 的分別, 這是 Assembler 將它組譯成為
>>機械碼才要考慮的東西
-------------------------------------------------------------------------------------------------------------------------------------------------------
<<我想你的說法應該是,組合語言是一套語法,沒有所謂的risc的組合語言跟cisc的組合語言對嗎?
<<這點我明白指示我表達的方式與你不同但是我想結論應該是相同的,如果我的想法沒錯,我可以
<<說risc的精簡指令與cisc的複雜指令都屬於組合語言這樣對嗎?


編輯記錄
maxgto 重新編輯於 2007-11-30 10:30:22, 註解 無‧
maxgto 重新編輯於 2007-11-30 10:30:54, 註解 無‧
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-11-30 11:30:47 IP:61.220.xxx.xxx 訂閱
<<精簡指令及根複雜指令集的差異在於,精簡指令的指令執行週期短(cpu處理週期短),相對的cpu內部電路設計
<<精簡化但是假設相同運算下cisc會比risc的指令數少,再來指令集複雜度高的compiler在設計上容易,相對cpu執行
<<週期會拉長,剛好與risc相反,所以簡單來說早期(cisc的年代)設計的cpu著重於硬體結構上的支援,所以在設計
<<上硬體較為複雜(電晶體用的多),而軟體的工作較為簡單,所以在組譯器的設計上較為簡單,漸漸科技進步
<<(risc的年代)cpu的硬體設計越來越精簡,相對著重於軟體的支援,導致compiler的設計變的困難
<<(指令同步處理的出現).
=>
小弟的看法
敘述的不是很好, 一下 Compiler, 一下又組譯器; 一下從指令集角度去比, 後面又蹦出同步問題
CISC : Assembler 應該比較難設計, 因為指令種類比較多; Compiler 比較好設計, 因為編譯轉換時, 一個高階語言敘述可以用較少的指令去完成
RISC : Assembler 應該比較好設計, 因為指令種類比較少; Compiler 比較難設計, 因為編譯轉換時, 一個高階語言敘述可以用較多的指令去完成
CISC和RISC同步問題從 CPU 硬體, Assembler, Compiler, 程式撰寫設計 角度來看
(此處同步指的是 HT or 多CPU or 多核心CPU )
如果要用 CPU 自己去處理同步問題, 會比 RISC 難, 因為指令種類多, 執行週期有些差異很大
如果是要靠 Assembler, Compiler 去最佳化程式, 讓指令同步執行, 做出一個 Assembler 或 Compiler 在 CISC 也比 RISC 難多了
從程式撰寫角度來看, 不太需要在乎 CPU 的指令同步執行能力, 也不需要管 Assembler, Compiler 容不容易開發 ( 你要自己開發一套 Assembler 或 Compiler 使用嗎 ?)
***********************************
> risc的精簡指令與cisc的複雜指令都屬於組合語言這樣對嗎?
RISC CPU 和 CISC CPU 執行的指令其實都是一個一個碼, 為了方便了解, 我們給他對應一個方便閱讀的指令, 而組合語言就直接以指令為程式敘述和命令
小弟想您應該大致了解實際的意義, 不過您的文字敘述怪異
(這句該怎麼說呢? 乾脆就是不要說)
 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-11-30 11:33:59 IP:59.125.xxx.xxx 未訂閱
機械語言是一連串代表指令的 0 1 ,不需要經過組譯就可以直接丟給 CPU 處理. 組合語言則是把代表指令 01 改用「助憶碼」來代替.但這種「助憶碼」並不是電腦能直接處理的東西. 所以必需經過組譯→連結等過程才能將這些助憶碼轉換成電腦可直接處理的機械碼, 然後執行.

組合語言
1> 以程式語言的分類,它屬於低階語言.
2> 以作用面來看,它是可以讓你更加瞭解處理器架構,並掌握電腦細部運作的工具.
3> 它是跟隨處理器架構而產生的「程式語言」(因此才能利用它來掌握很細部的運作).換句話說, 每一種 CPU通常都會有自己的組合語言.例:80x86, 8051, Z80, 68000 等。

處理器裡頭並無 compiler , 它只執行機械碼.

處理器架構所提供的指令若幾乎為簡單指令, 只須 1個指令週期可完成的指令, 它就是RISC

FYI.

p.s : 有點無力感.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-11-30 16:19:57 IP:210.240.xxx.xxx 訂閱
很抱歉浪費各位的寶貴時間
我有努力在思考各位的解答對我都非常有幫助謝謝
但是我的問題還沒解決所以可能會再度打擾各位先跟各位說個抱歉^^"

以下我在做個釐清把我目前的問題再度整理!!
--------------------------------------------------------------------------------------------------------------------------
1<<單純一顆RISC的CPU請問他是否擁有下列我例舉的東西
ROM(存放Assembly組譯器與Compiler編譯器)

2<< 組合語言--> 組譯器--> 機械碼 , 高階語言--> 編譯器--> 機械碼 <---是否觀念正確?

3<<假設我的PC是用ㄧ顆RISC的CPU,當我再OS底下建置一個BCB平台來設計程式,接著
<<將程式compiler後的檔案是屬於機械碼嗎?如果是也就可以丟給cpu處理?不是的話呢?


p.s
<<我所謂的同步是額外話題,但是我的同步表示指令同步處理,而這個同步處理是由組譯器
<<來完成原先是設計在cpu硬體結構上的,但是後來轉變成由組譯器來完成(跟vliw有關係)

--------------------------------------------------------------------------------------------------------------------------

編輯記錄
maxgto 重新編輯於 2007-11-30 16:21:46, 註解 無‧
maxgto 重新編輯於 2007-11-30 16:22:29, 註解 無‧
maxgto 重新編輯於 2007-11-30 16:23:37, 註解 無‧
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-11-30 16:37:03 IP:61.218.xxx.xxx 訂閱
建議你找兩顆 CPU 的組合語言的書來看一下, 一顆是 8086, 注意看它的指令集, 以及暫存器.
AX, BX, CX, DX... 一堆, 每個暫存器都有一些特異功能. 然後文件上應該都會有附錄每個指令
對應到機器碼的轉譯規則, 看看它的指令編碼的規則是不是很複雜, 長長短短的差很多.

再看另一顆 68000 的組語, 一樣注意它的指令集, 暫存器. D0-D7 A0-A7, 好像只有 A7 有用來
作堆疊不太一樣, 然後看看它指令對應到機器碼的規則, 是不是很容易的把 D0-D7 A0-A7 順勢
排進去. 再看它最短指令, 與最長指令的差異.

既然是研究生, 應該多花點心思在研究的題目上. 這兩顆 CPU 都是紅極一時的產品, 文件應該
很容易取得. 看完了之後, 應該比較會體會一點 CISC 與 RISC 之間的差異. 不要單單看到一些
評論性的文章, 去推測它的意思.

到時候再來和網友談那些什麼指令預儲, 多管線, 分歧預測, 快取比對... 這些 CPU 設計中
的重要課題, 比較會有效果.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-11-30 17:33:50 IP:61.220.xxx.xxx 訂閱
1<<單純一顆RISC的CPU請問他是否擁有下列我例舉的東西
ROM(存放Assembly組譯器與Compiler編譯器)
Ans: 小弟不知道有這種東西 (不保證絕對沒有)
技術上可行, 但是未必有價值
因為 ROM 一般容量很小, 未必能容納 Assembler 或 Compiler
容量很大的 ROM 可能非常貴
2<< 組合語言--> 組譯器--> 機械碼 , 高階語言--> 編譯器--> 機械碼 <---是否觀念正確?
3<<假設我的PC是用ㄧ顆RISC的CPU,當我再OS底下建置一個BCB平台來設計程式,接著
<<將程式compiler後的檔案是屬於機械碼嗎?如果是也就可以丟給cpu處理?不是的話呢?
Ans : 2, 3一起答,
一般 Assembler 和 Compiler 產生的程式碼是 native code 型態的機器碼, 是 CPU 可以直接跑的
Java 的 Compiler 產生的是 P-Code (虛擬碼), 只能跑在 JVM 上
Visual Studio 2005 的 Assembler 和 VB Compiler 產生的 P-Code 也必須跑在 .NET 上
PS: 小弟只能就比較一般的情況討論, 很多事情沒有絕對, 可能有極少數的例外
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-11-30 20:22:39 IP:210.240.xxx.xxx 訂閱
可否想像一下ㄧ顆CPU如何設計的請將我目前所提到的RISC以及組譯器做個結合?

1<< 我的最初的想法是CPU只能處理機械碼,所以ㄧ個運算在透過CPU處理時它會有
前置作業,所謂的前置作業是將運算轉成RISC的指令,透過組譯器(原廠設計放於
CPU的ROM中)轉換後再送到CPU處理

2<< 後來發現不太對看了你們的說法後感覺CPU是由RISC的精簡指令設計出來所以
CPU已經把路定好了只要你的運算近來它都會依照規則來處理但是相對的它的設
計內容也會包含組譯只是它放置位置我還是認為在ROM中因為CPU的內部除了
ROM應該沒有其餘的記憶體可以保存資料了吧!

3<< 至於我會說利用BCB來寫程式並將程式編譯後丟給CPU處理運算照目前的想法來
說也就是ㄧ條新開的路不會經過CPU預設的路(RISC)對嗎?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-11-30 21:06:40 IP:203.204.xxx.xxx 訂閱
> 可否想像一下ㄧ顆CPU如何設計的? 請將我目前所提到的RISC以及組譯器做個結合?
>1.我的最初的想法是CPU只能處理機械碼,所以ㄧ個運算在透過CPU處理時它會有前置作業,
>所謂的前置作業是將運算轉成RISC的指令,透過組譯器(原廠設計放於CPU的ROM中)轉換後再送到CPU處理
> 2.後來發現不太對, 看了你們的說法後, 感覺CPU是由RISC的精簡指令設計出來, 
> 所以CPU已經把路定好了, 只要你的運算近來, 它都會依照規則來處理, 但是相對的它的設
> 計內容也會包含組譯, 只是它放置位置, 我還是認為在ROM中因為CPU的內部除了
> ROM應該沒有其餘的記憶體可以保存資料了吧!
如果你可以想像 CPU 和 Assembler 結合, 再多結合 RAM 也沒什麼不得了
而且 HD 中的程式被執行時候, 程式碼(HD) => RAM => 主機板Cache => CPU Cache => CPU
CPU自己內部不需要有RAM
> 3.至於我會說利用BCB來寫程式, 並將程式編譯後, 丟給CPU處理運算, 照目前的想法來
> 說也就是ㄧ條新開的路, 不會經過CPU預設的路(RISC)對嗎?
還是會啊
建議您去唸一本 計算機組織結構
翻閱電腦雜誌 (有些雜誌有時候會介紹一些 CPU 內部架構)
為何一直想將 RISC CPU 和 Assembler 結合 ?
你的研究所論文想將 RISC CPU 和 Assembler 結合 ?
請問一下
你有寫過組合語言程式嗎? Intel x86 的? 還是 RISC 的?
你有寫過組譯器(Assembler)嗎 ? 
有設計過 CPU 硬體嗎? (不管多陽春)
之前站上某位仁兄的專題目標遠大, 他說他會努力, 
但是當他懂愈多知識, 懂愈多技術後, 他的題目就一直縮小...
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-11-30 21:32:25 IP:123.193.xxx.xxx 訂閱
CPU內含ROM,  組譯程式燒錄在其中

嗯, 我想最好還有好用又方便的IDE,
可能的話, 可不可以內含程式產生器...

要知道, 全世界運算最快的電腦, 可不是用一顆CPU組成的喔...

要不然懷舊一點, 燒在BIOS也不錯, 一開機, 嗶一聲,
嘿, 不是BASIC喔, 已經 chip-up 成為組譯器了...

閒聊, 閒聊, 僅供參考...

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-11-30 23:19:23 IP:211.76.xxx.xxx 未訂閱
CPU 裡面沒有"組譯". 照你說的, 寫完程式我直接丟給 CPU 就好幹麻須要組譯連結?

請問你有寫過任何程式語言嗎? 如果沒有, 請任學一種, 有了一點基礎概念與功夫後再來跟大家問這些問題.

===================引 用 maxgto 文 章===================
2<< 後來發現不太對看了你們的說法後感覺CPU是由RISC的精簡指令設計出來所以
CPU已經把路定好了只要你的運算近來它都會依照規則來處理但是相對的它的設
計內容也會包含組譯只是它放置位置我還是認為在ROM中因為CPU的內部除了
ROM應該沒有其餘的記憶體可以保存資料了吧!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-12-01 01:38:54 IP:59.121.xxx.xxx 訂閱

1<< 我的最初的想法是CPU只能處理機械碼,所以ㄧ個運算在透過CPU處理時它會有
前置作業,所謂的前置作業是將運算轉成RISC的指令,透過組譯器(原廠設計放於
CPU的ROM中)轉換後再送到CPU處理

似乎是有這麼一回事, 在幾年前我好像有看過一篇 intel 的技術文章, 有提過類似的事情.
但是你用的名詞, 完全不對. 因為 RISC 技術的興起, 所以 Intel 想把旗下的王牌 x86 系列,
也搞成 RISC 架構. 但是它又要背起歷史的原罪, 相容於以往的 "機械碼', 所以那些 CISC
的指令, 一個也不能少. 所以它的 CPU 內部, 就有另一個解譯 "機械碼" 的單元, 把它換成另
一個 "微碼", 當 "機械碼" 指令載入 CPU 後, 立刻變換成 "微碼" 在真正的執行單元中處理.
但是那個東西, 就不叫作 "組譯器" 了, CPU 內部儲存 "微碼" 的地方, 也不叫作 "ROM".

2<< 後來發現不太對看了你們的說法後感覺CPU是由RISC的精簡指令設計出來所以
CPU已經把路定好了只要你的運算近來它都會依照規則來處理但是相對的它的設
計內容也會包含組譯只是它放置位置我還是認為在ROM中因為CPU的內部除了
ROM應該沒有其餘的記憶體可以保存資料了吧!

沒錯, CPU 載入指令之後, 會依指令內容來處理. 但是 CPU 的指令, 大多都是將暫存器的
內容進行變換, 或與外部的 ram, rom, i/o 溝通. CPU 執行這些指令時, 已經不需要那些
組譯的工作了. 因為 "組譯" 這一詞, 是用在不同電腦語言的變換上. CPU 的那些指令, 都
是特別設計好, 讓 CPU 看的很輕鬆愉快的 (也就是人會看的很痛苦的).

其實 CPU 的工作, 是以暫存器為核心的, 你講的 CPU, 有一點點 "單晶片" 的味道, 或是
整塊主機板.

3<< 至於我會說利用BCB來寫程式並將程式編譯後丟給CPU處理運算照目前的想法來
說也就是ㄧ條新開的路不會經過CPU預設的路(RISC)對嗎?

這一段好像天書, 怎麼猜都猜不透. 你要不要先說一下什麼是 "路"? 在你心目中的 CPU
又是什麼? 丟給 CPU 處理的東西, 不經過 CPU 預設的路, 這樣 CPU 還有辦法走嗎?
CPU 內部有幾條路? 預設的? 使用者定義的? 有 GUI 的?

要不然懷舊一點, 燒在BIOS也不錯, 一開機, 嗶一聲,
嘿, 不是BASIC喔, 已經 chip-up 成為組譯器了

哈, 其實那台機器還滿不錯的, 電一開就可以開始打字了, 10 就開始寫程式, call -151
就開始填機器碼, 記不清楚時還可以找 lisa 來幫幫忙...
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-12-01 09:27:42 IP:122.116.xxx.xxx 訂閱


感謝各位 小弟不材 但是非常感謝大家的批評指教 謝謝

其實小弟目前是在研究TI的DM6446晶片(影像處理)DM6446它是雙內核(ARM與DSP)

ARM是屬於RISC而DSP屬於VLIW所以我才會在思考RISC這個問題

下面網址的內容你們是否認同? 可否解釋一下他所謂的編譯器代表什麼? 我是否可能就是被它搞混?

http://translate.google.com/translate?hl=zh-TW&sl=zh-CN&u=http://cnw2004.cnw.com.cn/issues/2000/11/1109.asp&sa=X&oi=translate&resnum=8&ct=result&prev=/search?q=VLIW&complete=1&hl=zh-TW

PS:
我有寫過程式但是很多寫過程式的人大多不懂程式基本的運作流程只知道說下什麼命令電腦就做什麼動作
我以前的想法也是如此但是經過我的指導老師的教誨後我領悟一句話(練拳不練功到老一場空)<--有點怪 希望大家不要生氣 ︿︿"
編輯記錄
maxgto 重新編輯於 2007-12-01 09:40:06, 註解 無‧
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#21 引用回覆 回覆 發表時間:2007-12-01 10:17:51 IP:203.204.xxx.xxx 訂閱
它的編譯器應該是泛指 Compiler, Assembler, Interpreter..等
有時候文章中太精確細分很多東西, 會使某些人搞不清楚
就像我們一般談 C 是使用 Compiler 編譯後執行
實際上 C 也有 Interpreter (解譯器) 的版本 (確實命稱忘記了, 小弟玩過)
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#22 引用回覆 回覆 發表時間:2007-12-01 11:10:16 IP:61.64.xxx.xxx 訂閱
你真的是研究生?
.....
我們的教育真的快完蛋了嗎?現在研究生的程度,比以前大學生還遭
不過以上是預設立場,假設你是資訊科系相關學生

如果你是醫學系、化學系、物理系之類的學生,那我跟你說對不起,但如果你是資訊相關科系,那你要檢討了
你的基礎知識不足,而且來源有問題 (但這都不嚴重,只要你有辦法修正來源,知識永遠都在哪,等你,不會跑掉)

正確的學科知識,因該是來自有口碑的書籍、課堂教學與研究文件
而網路上的東西,你要是沒有一定水準、無法判斷真偽,最好是不要將之當成知識來源
因為網路的知識,偽知識相當多

話說回來,我大學先念土木,後念建築,這兩個科系,跟與資訊不相干,為何知道的比你正確?建議你要深思
是你不努力?我相應該不會,只要是人都會想努力,只是努力程度差異而已
所以我猜,是你的知識來源有問題,看書啦,看要是白算盤,還是黑算盤,挑一本啃

你是研究生,啃起來應該很快 (如果你真具有研究生的能力),至於如果不知道算盤是哪本,問資訊工程系的學生吧 (我想你應該也不是資訊本科生)

所以你對 CPU 的認知很奇怪,可以說對,但「對」得很離譜

CPU 也不過是一個「很複雜」的單晶片,你簡單的電路設計應該去瞭解一下,像是邏輯閘、 FF;或是加法器、計數器之類的,CPU 就是這些東西的集合與組合應用

至於獨立的 ROM 內放編譯、組譯程式 ,這是早期的電腦才會有,現在 ROM 多是裝韌體,而且 「CPU 內的 ROM」(天阿你哪裡聽到這種講法),你可以找找 microcode之類的資料,可能你將這種東西當成 ROM 了

你要基礎懂了,再來看後來的發展、應用、與變形,這樣觀念才會正確、才會一體,要是你隨便抓個變體來看,等你用到另一個變體或應用,你又會問題一堆了

最後,強烈建議你不要看 「對岸的資料」,更不要看「對岸翻譯的資料」 (指的是大陸 China) ,不是貶低對岸,而是對岸的文章素質差異相當大,而且「差的」佔大部分,再加上用語與文化差異,你看完,會有錯誤的理解

我都喜歡直接看英文文件,用英文思考,雖然我英文不好,但抱著總有一天會看完的心態猛看,起碼得到知識的不會差太多
看翻譯的很爛的簡體,花的時間,是英文的 3 倍,雖然看簡體是很快,看英文是很慢,而看英文理解的慢,卻比不上看簡體是「無法理解」

===================引 用 maxgto 文 章===================
請教各位高手一下
大家應該都知道RISC與CISC
目前我將RISC與CISC歸類於組合語言 <-- 對嗎?
我認為一般在OS下的動作命令都是以組合語言表示
然後通過CPU的組譯器轉換成機械碼在由CPU來處理(RISC與CISC的定義)
再來假設我在OS平台上架設C 的程式設計環境透過程式
的編寫下達命令經過C 的設計環境內建的Compiler轉換成
機械碼後再經過CPU處理(所以他的處理過程完全跟RISC不相干?)
因為小弟看過很多說明RISC與CISC的文章內容常用Compiler表示將risc或cisc指令集轉換程機械碼
但是組合語言是用組譯器來轉換高階語言才是用compiler來轉換於是小弟陷入迷網
關於小弟這次發文如果造成大家困擾先說聲抱歉 我會在改進
以上是小弟的見解有錯請提出修正謝謝
各位真的很感謝你們浪費了寶貴時間幫我解答更是感謝版主的支持但是要再次跟各位說聲抱歉因為我的表達能力不好
但是我真的很想將目前我所遇到的RISC這個課題搞清楚因為我認為如果只是一個很基本的課題我就解決不了我想日後
我所做的研究也就沒有意義了(小弟是個研究生)
首先我要個版主說明一下我看過維基的資料但是我覺得它給予我的資訊並不完全
這樣說好了 先說說CPU --> RISC精簡指令集屬於CPU的設計模式
CPU大家都知道只能接受機械碼再來就是CPU主要以算數邏輯單元與控制單元為主要重點我所謂的動作是表示需
透過算數邏輯單元與控制單元作處理的動作所以相對要給予機械碼再來往上推機械碼應該是由最接近機械碼的
組合語言組譯而成所以組譯器我認為在RISC的CPU出廠前已將組譯器(程式)燒錄於ROM中所以我才會猜測
RISC所謂的精簡指令集是組合語言而RISC就是組合語言的一個名稱這ㄧ切說法部分可以說是我的猜測
但是我又曾看過文章表示CISC是最早期的CPU設計模式是因為當時的CPU內部硬體設計較為複雜電晶體較多但是後來RISC的推出
是為了減少CPU的負擔相對CPU在設計上也變簡單電晶體數下降減少成本但是相對的它的Compiler複雜度提升(可以說是將原先cpu處理上的工作排給compiler來做這樣一來risc在cpu的處理比cisc的cpu快但是指令數卻比較多)
請問當你們看到compiler時是否有疑惑?因為我覺得應該是assembly

而我之所以會認為risc指令集是組合語言是因為我認為指令不等於機械 機械只接受0和1 指令則是 add a b

所以我想說的是risc的cpu應該是精簡指令的組合語言透過組譯成機械碼經過cpu的邏輯單元與控制單元來處理呈現出你需要的結果
編輯記錄
syntax 重新編輯於 2007-12-01 11:11:39, 註解 無‧
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#23 引用回覆 回覆 發表時間:2007-12-01 17:01:05 IP:122.116.xxx.xxx 訂閱
看來我的表達能力有問題所以再次說聲抱歉 容許我在問最後一次
從RISC的CPU方向來看我把它分成兩部份(軟體與硬體)
硬體部分可能是基本的一些電晶體結合並非我的疑問
軟體部分假設一個運算要丟給CPU處理時它應該會有個流程所以我想先了解它處理運算時的動作流程會是如何?
我想知道的是CPU內部的處理這個運算的流程如果可以說明的越詳細越好 謝謝

PS:謝謝大家的幫忙我學到了很多也許我的問題並沒有達到最好的解答但是我卻得到許多寶貴的資訊




syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#24 引用回覆 回覆 發表時間:2007-12-01 18:47:27 IP:61.64.xxx.xxx 訂閱
你要問幾次都行,但可能不見得都會有回應就是囉!

既然你麼堅持你無法找到資料,那就算我雞婆好了

不過 CPU 執行流程式不分軟硬體的,硬要切割,反而會一竅不通

一個指令的執行流程的通用模型為:

  1. 指令提取 Instruction Fetch
    根據目前的 PC 去取得 [指令 資料],PC 其實就是記錄下一個執行位置的記憶體位址的紀錄器(暫存器)
  2. 指令解碼 Decoding
    根據 PC 取得的東西,將前半部指令取出,才知道要做的動作
  3. 執行 Executing
    根據 PC 取得的東西,將後半部取出,得到要處理的資料
    依據資料計算有效位址
    根據定址方式求出運算元的位址與提取運算元 Operand Fetch
    於處理器的暫存器中執行指令
  4. 存放結果 Result Stored

不管是 CISC 或是 RISC 都是如此,而每一個動作都是 [指令 資料] ,所以程式的資料都是
----------------------
| 指令 | 運算元 |
----------------------

-------------------------
| 指令 | 定址模式 | 位址 |
-------------------------

指令的長度固定,後方長度是依據格式變動的,只是 CISC 有很多格式與不同的長度,RISC 是一律等長

以一個 ADD B 組合語言為例,將 B 的內容與 累加暫存器之內容相加

------------------------------
| 指令 = ADD | 運算元 = 1 |
------------------------------

----------------------------------------
| 指令 = ADD | (定址模式 | 位址) = [B] |
----------------------------------------

1.根據 PC 的位址,將位址送到 MAR ,之後 PC 的值會加一,只向下一個位址
2. Control Unit 會根據 MAR 的中的位址提取 ADD (及該位址的前半部,指令 code 的部分),送到 MBR (怎麼送,就是硬體線路的電子傳遞)
3. MBR 會將資料送至指令暫存器 IR (當電路訊號 Colck 正確時,MBR 電子會流進到 IR 線路)
4.Control Unit 解碼 IR 內容,並一併把 B 的位址送到 MAR,Control Unit 再根據 MAR,提取 B 之內容,或 B 所指的內容 (看定址方式,但 RISC 的定址方式很少,只有幾種),送到 MBR 中
5. ALU 將 MBR 與 累加暫存器之內容相加 (Clock 正確時,兩者電子會根據各接腳相關位置進入 ALU,並由對應接腳流出,出來的就是答案囉!)
6. 結果電子會再流回 累加暫存器 (高電位有電子流為壹,低電位視為零),就是將結果存在 累加暫存器

RISC 與 CISC 的差異究竟在哪裡,可以比較如下:
RISCCISC
1指令長度固定,種類極少,只有幾種,所以能做的事極為簡單,通常都是基本動作,但幾乎都可以在一個週期 (one CPU clock) 內完成,反之複雜的事,就必須好幾道指令才能完成指令總長度不固定,有很多種,所以格式複雜,但可以一道指令完成複雜的動作
2幾乎都是 Register 到 Register 的存取,只有 Load/Store 可以存取 Memory,因此暫存器數目多幾乎所有指令都可以使用 Memory 定址模式,存取 Memory
3提特性使之可以高度使用 Pipeline (指令簡單,分割容易,可減低分支問題)因指令複雜,組合之後,易出現使 Pipeline 失效之狀況(白做),所以 Pipeline 使用上不如 RISC
4指令簡單,長度固定,所以可以直接以硬體線路施做,速度快指令複雜,硬體線路難以施做,在中間夾一層微碼,以半軟、半硬體方式執行 (指令由微碼執行,微碼由硬體執行)
5指令數目少,定址方式只有幾種相對多樣化
6大量使用暫存器,暫存器數目多暫存器數目少 (存取暫存器,比存取記憶體快)
7因為指令與硬體簡單,所有工作之複雜度都在 Complier複雜度在於微碼 microcode ,Compiler 反而簡單,所以 Compiler 易實作,最佳化的複雜度也相對降低
8效能都卡在 Compiler,最佳化做得好的 Compiler ,編出來的程式就極有效率反之 Compiler 就不如此重要
9適合 VLSI 實作
10

可以看出,兩種架構各有優缺,所以加總起來,沒有誰比誰好,誰比誰快,都需要在其缺點處能夠得到好的效率,才會快,不然「一樣慢」
也是如此,現在的設計趨勢,有互相靠攏的現象,要是你發現 RISC 中有複雜的東西,不是以上的說明不正確,而是 RISC 向 CISC 靠攏的結果,反之亦然,這就是我所說,基礎不懂,前因後果不清,問題就會一堆

不過如果你真的要研究 晶片,或設計 DSP ,那你 計算機結構 非看不可,不然你要畢業,很難

但如果你只是要使用該晶片,那 API 看看,趕快實作出你的軟體就可以


===================引 用 maxgto 文 章===================
看來我的表達能力有問題所以再次說聲抱歉 容許我在問最後一次
從RISC的CPU方向來看我把它分成兩部份(軟體與硬體)
硬體部分可能是基本的一些電晶體結合並非我的疑問
軟體部分假設一個運算要丟給CPU處理時它應該會有個流程所以我想先了解它處理運算時的動作流程會是如何?
我想知道的是CPU內部的處理這個運算的流程如果可以說明的越詳細越好 謝謝

PS:謝謝大家的幫忙我學到了很多也許我的問題並沒有達到最好的解答但是我卻得到許多寶貴的資訊




編輯記錄
syntax 重新編輯於 2007-12-01 18:51:48, 註解 無‧
syntax 重新編輯於 2007-12-01 18:53:39, 註解 無‧
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#25 引用回覆 回覆 發表時間:2007-12-01 19:56:37 IP:122.116.xxx.xxx 訂閱
請問risc與cisc比較欄位中的7.compiler是指?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#26 引用回覆 回覆 發表時間:2007-12-01 20:01:21 IP:203.204.xxx.xxx 訂閱
> 你真的是研究生?
> 我們的教育真的快完蛋了嗎?現在研究生的程度,比以前大學生還遭
大學的錄取率太高了, 研究所也是, 主要問題在教育部, 不是學生
不過我覺得maxgto兄至少敢問, 肯問, 也沒有發脾氣

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#27 引用回覆 回覆 發表時間:2007-12-01 21:33:39 IP:122.116.xxx.xxx 訂閱
^^ 小弟不材 但是我非常認同大家給予我的批評指教
因為其實一路發問下來我覺得大家給我一個正確的觀念就是我的基礎不夠所以我問的問題其實不夠深入
導致大家可能也有心無力但是其實我認為跟大家之間出了一點問題就是我的表達不好再來就是因為這個
問題對大家來說可能非常基本所以代表大家的層級很高在回答我的時候並不是在我所能領悟的基礎上但
我不並不是在怪罪大家請大家不要誤會︿︿只是我慢慢在轉變自己的發言方式甚至利用透過大家回答的
內容來提出疑問看看是否與自己的想法相同因為自己的表達不好所以可能會產生其實大家跟我的想法相
同但卻在表達上不同而導致雙方不能理解

ps: 我真的是研究生︿︿" 哈哈 小弟不材 感謝大家不嫌棄
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#28 引用回覆 回覆 發表時間:2007-12-02 01:06:44 IP:59.121.xxx.xxx 訂閱
第 7 點的 compiler 就是指軟體程式的編輯器, 也就是將 user program 轉換為 machine code
的程式. 這個 compiler 不包含 assemble 的組譯器, 因為 assemble 的組譯器與 cpu 指令直接
對應, 所以沒有什麼最佳化可言.

像 C, Base, Pascal... 這些設計給人寫的程式語言, 它在執行前, 都會有一個轉譯的動作, 將程式
轉為機器碼, 對 CISC 來說, 機器碼的好壞, 對效能影響不那麼關鍵, 因為再好的 compiler 能優化
的程度, 也很有限.

相反的, RISC CPU 有一些特性, 就是 compiler 必需要掌握的, 否則出來的程式碼, 可能會有很大
的效率差異. 像 RISC 指令集, 幾乎是用定長度的 machine code, 所以 CPU 提取指令的 fetch, 可以
不停的提取下一道指令, 例如一個程式包含

instruction A
instrunctio B
instruction C
instruction D

當 CPU 正在執行 instruction B 時, CPU 內部的 fetch 可能就在載入 instruction D 了, 然後
instruction C 是已經被載入完成了, 正在進行解碼. 而 instruction A 是已經執行完成的,
正在進行結果回存的動作. 這就是一般 RISC CPU 在設計時常會應用的方式, 所以指令執行
才會快. 因為一個指令的動作, 被細分成好多個 stage (或是 phase).

但是有一個不幸的問題, 就是如果指令 B 其實是一個跳躍的動作時, 那麼指令 C, D 雖然已經
被載入與解碼, 但是其結果都將被捨棄, 因為下一個指令不應該是 C, 可能是 F, 那麼 F 這個
指令就必需重新被載入並解碼, 執行. 所以這個動作, 就會嚴重影響 CPU 的效率.

單純的跳躍, 其實也還好, 在 CPU 多設計一道, 指令載入時, 如果判斷出指令特徵是跳躍, 就
令 fetch 直接換到新的位置去讀下一道指令, 怕就是怕分歧. 因為分歧會視情況有兩種結果,
一是要跳走, 另一個是不要. 所以 CPU 通常會作一個分歧預測的動作, 如果猜中了, 那效率就
好了, 猜不中, 就得使指令重新來過, 一佪分歧指令就可能會多佔用好幾個 clock.

怎麼樣安排 machine code, 讓 cpu 儘可能猜的中分歧的結果, 就是 compiler 中的一項課題.
諸如此類的課題還有很多, 所以 compiler 產生 machine code 的好壞, 對 RISC CPU 會有很
重要的影響.

你說你研究的題目是一顆圖形的處理器, 一般圖形的處理器都會有進階的數值運算器, 裏
面很多會採用平行式或向量式運算的, 最佳化的動作, 就更複雜了. 哪些東西可以平行處理,
哪些可以排入向量. 其中資料分析與流程控制的學問更大, 多 K 那些文件, 應該會有收獲.
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#29 引用回覆 回覆 發表時間:2007-12-02 03:55:04 IP:61.64.xxx.xxx 訂閱
「現在研究生的程度,比以前大學生還遭」,其實以前,我們老師還不是常這樣暗示我們
不過有的更是直接擺明「現在的大學生,跟高中生差不多」,那時,考進大學時,大學錄取率 32 %

maxgto 確實是一位有前途的人
生氣,是很爽,但爽一時,卻錯過問題,永遠沒看到真相,認清事實
所以以前長輩都會說,忍一時,海闊天空

更厲害的,根本沒感到被冒犯
,連忍都不用忍

因為每個人的溝通方式都不同,不需要因為一時不適應,就反應過大,反正,溝通久了,就會適應,不然,溝通是要幹什麼?

研究所短短兩年,說實在,若要補基礎,也不可亂抓,培養如何學習的能力,再針對迫切需要,先學,不然,兩年哪夠用
更不用說,論文寫起來超繁雜,連一個小小標點,都不可以錯,所以集中火力,是很重要的

===================引 用 pcboy 文 章===================
> 你真的是研究生?
> 我們的教育真的快完蛋了嗎?現在研究生的程度,比以前大學生還遭
大學的錄取率太高了, 研究所也是, 主要問題在教育部, 不是學生
不過我覺得maxgto兄至少敢問, 肯問, 也沒有發脾氣
maxgto
一般會員


發表:5
回覆:14
積分:3
註冊:2007-11-28

發送簡訊給我
#30 引用回覆 回覆 發表時間:2007-12-02 10:00:02 IP:122.116.xxx.xxx 訂閱
請問一下

那這樣說的話risc的指令集可以算是machine code?

而你所指的compiler並非現今一顆cpu內部含有的?


而是設計程式平台的環境(C, Base, Pascal)提供的所以C, Base, Pascal在設計compiler的

大大們必須對於risc的cpu或是cisc的cpu結構上有一定的認知才能下手設計 <--猜測︿︿

Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#31 引用回覆 回覆 發表時間:2007-12-02 11:03:49 IP:60.245.xxx.xxx 訂閱
看了這麼久,想要浮起來一下..

你的回應OK,但是你應該要考慮念點書,書也許不能解釋你全部的疑問,但至少他是個規範,能讓你在這無限個疑問上縮小疑問的範圍。
所以不管你大學是不是念資訊科系的,建議你還是看書先吧,
計算機概論、計算機組織與結構、x86 ASM的書,是讓你了解整個運算結構的書,念這類書我想對你來說應該二個月有足
找來看看,就算不是真的要學也無所謂,重點是你應該要清楚組/編/直譯的意義在哪,計算機運作結構與流程為何
不然這樣談下去其實對你我都沒有任何好處。

另外不要去找翻譯程式翻出來的文件,
對我們稍微有學過的人來說,只要文件本身講述並不是錯的,那麼我們多少能看著翻譯有點問題的文件來找資料
但是你連基本知識都沒有的時候,就不要使用這一類文件,只會讓你的想法更有問題。

在發問前請準備好你的問題,至少讓別人知道你問題的背景,
不然這種問法其實你不懂,我們也只能猜,後面的人想要找這類知識更是看的一頭霧水。
與其這樣,我誠心的建議各位前輩開書單或列一些可以學習的網站。
不然即使這樣互相回應了#31依舊是無意義的問答。


===================引 用 maxgto 文 章===================
請問一下

那這樣說的話risc的指令集可以算是machine code?

而你所指的compiler並非現今一顆cpu內部含有的?


而是設計程式平台的環境(C, Base, Pascal)提供的所以C, Base, Pascal在設計compiler的

大大們必須對於risc的cpu或是cisc的cpu結構上有一定的認知才能下手設計 <--猜測︿︿

------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
[<<] [1] [2] [>>]
系統時間:2024-03-29 5:44:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!