CPU就是用來計算的,CPU可以做不同的計算,每種計算是一個命令,你可以用命令通知CPU做這種計算,所有的命令構成了指令集。
你寫的代碼CPU是不懂的,需要翻譯成上面說的命令,這個翻譯者就是編譯器。
演算法跟他們的關系稍遠一些。如果把計算比作生產的話,那演算法就是配方和工藝,指導著從原材料到產品的生產過程。
希望能幫助到你。
㈡ 編譯器為什麼會生成匯編語言而不是機器語言
計算機只能識別二進制代碼,所以機器指令是由二進制代碼組成的,即你所說的機器語言。所謂匯編語言,只是一種符號,用來方便人們使用,否則你看到的都是一串串的01011011之類的信息,一眼就認出它是什麼指令非常困難,而用匯編語言這種符號,一看就知道是什麼指令了。這種符號語言用助記符來表示操作碼,用符號或符號地址來表示操作數或數地址,它與機器指令是一一對應的。(樓上各位表述的所謂「步驟」論是不確切的)
所以,並不是你說的「生成匯編語言而不是機器語言」,生成的是機器語言,你在調試器或反匯編程序中看到的匯編語言代碼只是由反匯編程序把機器指令翻譯成你看得懂的符號--匯編語言--而已。(比如你在OD或IDA中可以看到每行匯編指令前面都有機器碼,如push ebp的機器碼是55h,單看55,你不是熟手的話可能還不知道它是什麼指令,後面給你顯示出符號"push ebp",你一下子就明白了,這就是一一對應的關系,連"55"都是為了讓你看的方便,否則應是01010101,即8個電子元件的電源開、關狀態)
同樣的道理,你在十六進制編輯器(如winhex、HexWorkShop等軟體)中看到的是十六進制每行16位元組排列的,那也是經過把二進制代碼每位元組轉換成十六進制顯示給你看的。
關於平台問題,當然會有影響,不同的CPU有不同的指令系統,就連同一廠家的CPU指令系統都不同,比如Intel公司的CPU,從最早的到現在的,指令不斷增多,什麼MMX、SSE等等新指令集不斷出現,更不要說不同廠家的CPU了。當然它們之間也有很多兼容的指令集。
㈢ 學c語言用電腦編程,或運行相關編譯器等軟體,所用電腦必須用intel的處理器嗎
ss。一般ASP搭配Access,PHP搭配MySql。
PHP是比較古老的語言了,ASP也是五六年前很流行的,這兩年比較流行的是Java和Asp.net,不過學Java比較多人要,Asp.net開發起來會相對簡單一點,但現在Java也封裝得很好,有利於開發。關於學什麼,就自己興趣所在了。
我也是計算機專業的,雖然覺得不怎樣,但總算有過這幾年經驗。關於如何學一門語言,我認為,不要只看書,要看書然後動手,最好自己找個項目來做,做項目需要什麼,就看什麼,邊學邊做,這樣一來有興趣,二來可以學到東西。但是若一點都不懂的話項目也是做不下去的,所以呢,最好找兩本好一點的書,先瀏覽性過一遍,然後再相對較詳細的看一遍,這樣起碼對這門知識有點了解,以後做的時候找相應的知識也容易一點。
最後回答你的第一個和第二個問題:1.那些不用記下來,要看懂,要知道結構,比如If...else;for,while之類的,知道那些是表達什麼樣的結構。這些東西,邊用邊學慢慢就全知道了,背下來一點用都沒有。
2.不一樣的概念。這里的函數只是把一些經常用到的語句寫在一起,方便調用。這些慢慢體會。
個人經驗,回答完畢。
㈣ 關於cpu指令集和編譯器的問題
這些軟體在編寫時也考慮到了這點,所以用兼容的方式是可以運行的,當然,在優化過的程序(與指令集最匹配)中肯定會獲得較好的運行效率。
個人觀點,不夠專業,僅供參考!
㈤ 正常編寫的c語言程序編譯器會自動進行針對特定指令集用匯編語言優化嗎
這個要看你使用什麼編譯器了。查看編譯器的幫助文檔,它會告訴你它支持那些指令集,並且做哪些可能的優化。
不同的編譯器,是不一樣的。
補充:GCC 不太清楚,你連VC++的版本都不說。汗,VC6是不支持SSE的,需要安裝VC6SP5。
VS2005 和 VS2008 都支持 SSE。對 SSE/MMX 指令集優化得最好的,還是 Intel 的 c++ 編譯器。
對並行和高性能計算,Fortran 的優勢比較大。特別是 Fortran2003 的新特徵,為並行計算做了很多專門的設定。Intel 也有 Fortran 的編譯器。
㈥ 處理器架構,指令集和匯編語言,三者有何關系
指令集架構簡稱指令集,ISA,CPU的執行單元和解碼logic基本上由指令集決定。軟體硬體之間的一個介面,程序員根據CPU的指令集能編寫各種各樣的編譯器,用高級語言編寫程序。
匯編語言屬於指令集,指令集包括機器指令和匯編指令。一條機器指令對應一條匯編指令,如mips中的000000機器碼指令對應匯編指令的add假加法指令。匯編語言是便於人去理解的,記著一條add指令總比000000容易吧。
處理器架構就是微架構,學術界稱為微結構。主要是CPU的流水線部分的設計。
㈦ 程序是通過編譯器編譯才能執行的,那麼編譯器又是怎麼
一般來說,程序語言的編譯有兩個變數,一個是語言本身的語法體系,另外一個是目標機器的指令集體系結構。
對於前者,我們要發明一個新的編程語言的時候,一般是用已有的編程語言寫新語言的編譯器;
對於後者,要進行交叉編譯,即在A指令集的計算機上編譯B指令集計算機要用到的二進製程序。
本質上是一個雞生蛋蛋生雞的問題。
然而還是會繞到最終的問題:最最開始的第一隻雞(蛋(編譯器))哪裡來的?
當然是拿匯編語言寫的啦~
那第一個匯編語言的匯編器是怎麼寫的?當然是直接手寫二進制代碼啊。。。
㈧ c語言的編譯與處理器的指令集有關嗎一定要CISC嗎RISC可不可以
C語言只是用於描述問題和演算法的一種語言,而在實際機器上真實運行的卻是各處理器自己的機器指令。編譯器的工作就是將C語言翻譯為機器指令。對你的問題答復如下:1. C語言與指令系統沒有關系,但是編譯器翻譯的指令與指令系統有關系;2.無論CISC還是RISC,編譯器都可以將C語言翻譯為對應的機器指令。
㈨ 編譯器與指令集
1.tc是16位的編譯器,它用於64位的程序開發。自然沒有對新的64位指令集支持。
2.樓主的理解有一些偏差:如同樓上所說,C語言是本地編譯和鏈接的,此次編譯鏈接成的可執行文件時針對本地機。其跨平台是在可用一個源文件在多平台編譯鏈接,但是其產生的目標文件和本地不同。
TC已經過時N久了,推薦樓主使用微軟的VS2008。