導航:首頁 > 源碼編譯 > 編譯器的溫升

編譯器的溫升

發布時間:2022-10-20 17:38:22

A. 幾道計算機簡答題!

1,馮.諾依曼計算機體系結構的基本思想可以簡要地概括為以下三點:
(1)計算機應包括運算器、存儲器、控制器、輸入和輸出設備五大基本
部分.
(2)計算機內部應採用二進制來表示指令和數據.每條指令一般具有一個操作碼和一個地址碼.其中操作碼表示運算性質,地址碼指出操作數在存儲器中的地址.
(3)將編好的程序送入內存儲器中,然後啟動計算機工作,計算機無需操作人員干預,能自動逐條取出指令和執行指令.
按此思想設計的計算機硬體系統應由運算器、存儲器、控制器、輸入和輸出設備五大基本部分組成.
計算器又稱算術邏輯部件,簡稱ALU,是計算機用來進行數據運算的部件.
存儲器是計算機中具有記憶能力的部件,用來存放數據或程序.存儲器就是一種能根據地址接收或提供指令或數九的裝置.
控制器是計算機的指揮系統,計算機的工作就是在控制器下有條理的協調工作的.
輸入設備是用來輸入程序和數據的部件.
輸出設備是用來輸出結果的部件.
2,內存儲器簡稱內存,又稱主存,是CPU能根據地址線直接定址的存儲空間,有半導體器件製成.其特點是存取速度快,基本上能與CPU速度相匹配.
外存儲器簡稱外存,它作為一種輔助存儲設備,主要用來存放一些暫時不用而又需常期保存的程序或數據.當需要執行外存中的程序或處理外存中的數據時,必須通過CPU輸入/輸出指令,將其調入RAM中才能被CPU執行和處理,所以外存實際上屬於輸入/輸出設備.
3,從一條指令的啟動到下一條指令的啟動的間隔時間稱為指令周期.
指令的執行過程中包含若干個基本操作步驟,如訪問存儲器和數據運算等.每個完成一個數據運算和訪存操作所需的時間作為機器周期的時間.
時鍾周期則是計算機主頻的周期.
一個指令周期一般需要幾個機器周期完成,一個機器周期需要幾個時鍾周期,近年的新型計算機中採用了硬體的並行技術及簡化的指令系統,使得平均指令周期可以等於甚至小於一個時鍾周期,機器周期一般等於一個時鍾周期.
4,RISC優點:(1) 簡化的指令系統
(2) 以寄存器-寄存器方式工作
(3) 指令部以流水方式工作
(4) 使用較多的通用寄存器以減少訪存,一般至少有32個通用寄存器
(5) 為提高指令執行速度,絕大部分指令採用組合電路控制器實現,不用或少用微程序實現
(6) 通過精心選擇的指令系統,並採用軟體手段
RISC缺點:指令功能簡單使得程序代碼較長,佔用了較多的存儲器空間
5,DMA方式與中斷控制方式的相同點:處理隨機請求
不同點:DMA方式直接依靠硬體實現傳送,中斷方式依靠執行程序實現處理.DMA方式應用於簡單,高速的數據批量傳送,中斷方式應用於處理比較復雜的隨機事件,管理中低速I/O操作.

B. 編譯器是什麼意思,是做什麼的

編譯器
編譯器是一種特殊的程序,它可以把以特定編程語言寫成的程序變為機器可以運行的機器碼。我們把一個程序寫好,這時我們利用的環境是文本編輯器。這時我程序把程序稱為源程序。在此以後程序員可以運行相應的編譯器,通過指定需要編譯的文件的名稱就可以把相應的源文件(通過一個復雜的過程)轉化為機器碼了。

下面我們看看它是如何工作的。首先編譯器進行語法分析,也就是要把那些字元串分離出來。然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。最後生成的是目標文件,我們也稱為obj文件。再經過鏈接器的鏈接就可以生成最後的可執行代碼了。有些時候我們需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。我們把一過程稱為交叉鏈接。

有一個稱為LCC的編譯器,還挺不錯的;還有一個用於分析其規則的小工具;

C. 編譯器的工作原理

編譯 是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的EXE,
所以我們電腦上的文件都是經過編譯後的文件。

D. 編譯器的工作分為哪幾個階段

編譯器就是一個普通程序,沒什麼大不了的
什麼是編譯器?

編譯器是一個將高級語言翻譯為低級語言的程序。

首先我們一定要意識到編譯器就是一個普通程序,沒什麼大不了的。

在沒有弄明白編譯器如何工作之前你可以簡單的把編譯器當做一個黑盒子,其作用就是輸入一個文本文件輸出一個二進制文件。

基本上編譯器經過了以下幾個階段,等等,這句話教科書上也有,但是我相信很多同學其實並沒有真正理解這幾個步驟到底在說些什麼,為了讓你徹底理解這幾個步驟,我們用一個簡單的例子來講解。

假定我們有一段程序:

while (y < z) {
int x = a + b;
y += x;
}
那麼編譯器是怎樣把這一段程序人類認識的程序轉換為CPU認識的二進制機器指令呢?

提取出每一個單詞:詞法分析
首先編譯器要把源代碼中的每個「單詞」提取出來,在編譯技術中「單詞」被稱為token。其實不只是每個單詞被稱為一個token,除去單詞之外的比如左括弧、右括弧、賦值操作符等都被稱為token。

從源代碼中提取出token的過程就被稱為詞法分析,Lexical Analysis。

經過一遍詞法分析,編譯器得到了以下token:

T_While while
T_LeftParen (
T_Identifier y
T_Less <
T_Identifier z
T_RightParen )
T_OpenBrace {
T_Int int
T_Identifier x
T_Assign =
T_Identifier a
T_Plus +
T_Identifier b
T_Semicolon ;
T_Identifier y
T_PlusAssign +=
T_Identifier x
T_Semicolon ;
T_CloseBrace }
就這樣一個磁碟中保存的字元串源代碼文件就轉換為了一個個的token。

這些token想表達什麼意思:語法分析
有了這些token之後編譯器就可以根據語言定義的語法恢復其原本的結構,怎麼恢復呢?

原來,編譯器在掃描出各個token後根據規則將其用樹的形式表示出來,這顆樹就被稱為語法樹。

語法樹是不是合理的:語義分析
有了語法樹後我們還要檢查這棵樹是不是合法的,比如我們不能把一個整數和一個字元串相加、比較符左右兩邊的數據類型要相同,等等。

這一步通過後就證明了程序合法,不會有編譯錯誤。

E. 編譯器的功能是什麼

1、編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)。
2、工作方法:
1)、首先編譯器進行語法分析,也就是要把那些字元串分離出來。
2)、然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。
3)、最後生成的是目標文件,也稱為obj文件。
4)、再經過鏈接器的鏈接就可以生成最後的EXE文件了。
5)、有些時候需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。這一過程稱為交叉鏈接。

F. RISC技術有什麼特點

RISC的英文全稱是Reced Instruction Set Computer,中文是精簡指令集計算機,它的指令系統相對簡單,它只要求硬體執行很有限且最常用的那部分指令,大部分復雜的操作則使用成熟的編譯技術,由簡單指令合成。其技術特點:

1、大多數指令在單周期內完成

2、採用LOAD/STORE結構。因為訪問存儲器指令所需要的時間比較長,在指令系統中要盡量減少這類指令,所以RISC指令中只保留不可再少的LOAD/STORE兩種存儲器訪問指令

3、硬布線控制邏輯。使得大多數指令在單周期內執行完成,以減少為程序技術中的指令解釋開銷

4、減少指令和定址方式的種類

5、固定的指令格式

6、解碼優化

7、面向寄存器結構

8、注重提高流水線的執行效率,盡量讓減少流水線斷流,提高流水線效率

9、優化編譯技術

(6)編譯器的溫升擴展閱讀

RISC中的關鍵技術

1、延時轉移技術

在RISC處理機中採用流水線工作方式,取指令和執行指令並行工作,那麼當遇到條件轉移指令時,流水線可能斷流。為了盡量保證流水線的執行效率,在轉移指令之後插入一條有效的指令,而轉移指令好像被延時了,這樣了技術即為延遲轉移技術。通常指令序列的調整由編譯器自動進行。需要注意的是:調整指令序列是不能改變原有程序的數據關系;被移動的指令不破壞機器的條件碼。

2、指令取消技術

由於採用指令延遲技術中,遇到條件轉移指令時,調整指令序列比較困難,採用了指令取消技術。所有轉移指令和數據變換指令都可以決定待執行指令是否應該取消。為了提高執行效率,採用取消規則為:如果向後轉移(轉移的目標地址小雨當前程序計數器PC值),則轉移不成功時取消下一條指令,否則執行下一條指令;如果向前轉移,則相反,在轉移不成功時執行下一條指令,否則取消。

3、重疊寄存器窗口技術

由於RISC的指令系統比較簡單,通常採用一段子程序來實現。因此RISC中的CALL和RETURN非常多,而且都需要通過堆棧操作保存前一過程指針、數據等。為了盡量減少因為CALL和RETURN操作訪問存儲器的量,提出了重疊寄存器窗口技術。基本思想:在處理器中設置一個數量較大的寄存器堆,並劃分成窗口。每個過程使用其中的三個窗口和一個公共窗口,而在這些窗口中有一個窗口式前一個過程公用的,還有一個窗口是與後一個過程共用。與前一過程公用的窗口可以用來存放前一過程傳遞被本過程的參數。

4、指令流水調整技術

為了保持指令流水線高效率,不斷流,優化編譯器必須分析程序的數據流和控制流。當發現指令有斷流可能時,要調整指令順序。有些可以通過變數重命名來消除的數據相關,要盡量消除。例如:
ADD R1,R2,R3; (R1)+(R2)->R3
ADD R3,R4,R5; (R3)+(R4)->R5
MUL R6,R7,R3; (R6)*(R7)->R3
MUL R3,R8,R9; (R3)*(R8)->R9
調整指令後
ADD R1,R2,R3;
MUL R6,R7,R0;
ADD R3,R4,R5;
MUL R0,R8,R9;
調整指令後,速度可以提高一倍。

5、硬體為主固件為輔

指令系統採用為程序實現的優點:便於實現復雜指令,便於修改指令系統,增加機器的靈活性,但是速度慢。所以RISC一般採用硬體為主固件為輔的方法實現指令。

G. 編譯器的組成及各部分的功能及作用

1. 詞法分析 詞法分析器根據詞法規則識別出源程序中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。 2. 語法分析 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。 3. 語義分析 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。 4. 中間代碼生成 中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。 5. 中間代碼優化 優化是編譯器的一個重要組成部分,由於編譯器將源程序翻譯成中間代碼的工作是機械的、按固定模式進行的,因此,生成的中間代碼往往在時間和空間上有很大浪費。當需要生成高效目標代碼時,就必須進行優化。 6. 目標代碼生成 目標代碼生成是編譯器的最後一個階段。在生成目標代碼時要考慮以下幾個問題:計算機的系統結構、指令系統、寄存器的分配以及內存的組織等。編譯器生成的目標程序代碼可以有多種形式:匯編語言、可重定位二進制代碼、內存形式。 7 符號表管理 符號表的作用是記錄源程序中符號的必要信息,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、准確的查找和操作。符號表中的某些內容甚至要保留到程序的運行階段。 8 出錯處理用戶編寫的源程序中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程序中的邏輯錯誤,它們發生在程序運行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,數組元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表達式中缺少操作數、begin和end不匹配等。靜態語義錯誤是指分析源程序時可以發現的語言意義上的錯誤,如加法的兩個操作數中一個是整型變數名,而另一個是數組名等。

H. C語言的各類編譯系統的特點

你是不是問的各類編譯器??如果是編譯器的話請往下看,不是的話請忽略,工中號一匹大懶蟲


C語言編譯器目前主要有VC++、dev-C++、C-Free、win-TC、TC 2.0等等。

其中比較經典的VC++,微軟的產品,編譯器,鏈接器,運行,調試等功能於一體的強大開發工具,特點是功能十分強大,對於新手來說需要一段時間去摸索。

dev-C++是windows下一款開發c/c++的開發環境,使用gcc為編譯器,遵循標准,功能比較強大,語法高量,可以進行單步調試(這對排除錯誤很重要),進行斷點設置等功能,遵循C標准,是一款很強大的開發工具。

C-Free是一款支持多種編譯器的專業化C/C++集成開發環境(IDE)。利用C-Free,使用者可以輕松地編輯、編譯、連接、運行、調試C/C++程序。

TC 2.0:Borland公司的產品,在dos界面下編譯運行,小巧、靈活,但是不能使用滑鼠。

win-TC:在tc2.0的基礎上加上了界面,能夠使用滑鼠,具有語法高量,可以嵌入匯編等特點,對新手一些,拜託了不能用滑鼠的困難。

編譯器,簡單講,就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) 預處理器 (preprocessor) 編譯器 (compiler) 目標代碼 (object code) 鏈接器(Linker) 可執行程序 (executables)。

I. RISC的關鍵技術都有哪些

RISC晶元的工作頻率一般在400MHZ數量級。時鍾頻率低,功率消耗少,溫升也少,機器不易發生故障和老化,提高了系統的可靠性。單一指令周期容納多部並行操作。在RISC微處理器發展過程中。曾產生了超長指令字(VLIW)微處理器,它使用非常長的指令組合,把許多條指令連在一起,以能並行執行。VLIW處理器的基本模型是標量代碼的執行模型,使每個機器周期內有多個操作。有些RISC處理器中也採用少數VLIW指令來提高處理速度。
RISC 和CISC 是目前設計製造微處理器的兩種典型技術,雖然它們都是試圖在體系結構、操作運行、軟體硬體、編譯時間和運行時間等諸多因素中做出某種平衡,以求達到高效的目的,但採用的方法不同,因此,在很多方面差異很大,它們主要有:
(1) 指令系統:RISC 設計者把主要精力放在那些經常使用的指令上,盡量使它們具有簡單高效的特色。對不常用的功能,常通過組合指令來完成。因此,在RISC 機器上實現特殊功能時,效率可能較低。但可以利用流水技術和超標量技術加以改進和彌補。而CISC 計算機的指令系統比較豐富,有專用指令來完成特定的功能。因此,處理特殊任務效率較高。
(2) 存儲器操作:RISC 對存儲器操作有限制,使控制簡單化;而CISC 機器的存儲器操作指令多,操作直接。
(3) 程序:RISC 匯編語言程序一般需要較大的內存空間,實現特殊功能時程序復雜,不易設計;而CISC 匯編語言程序編程相對簡單,科學計算及復雜操作的程序社設計相對容易,效率較高。
(4) 中斷:RISC 機器在一條指令執行的適當地方可以響應中斷;而CISC 機器是在一條指令執行結束後響應中斷。
(5) CPU:RISC CPU 包含有較少的單元電路,因而面積小、功耗低;而CISC CPU 包含有豐富的電路單元,因而功能強、面積大、功耗大。
(6) 設計周期:RISC 微處理器結構簡單,布局緊湊,設計周期短,且易於採用最新技術;CISC 微處理器結構復雜,設計周期長。
(7) 用戶使用:RISC 微處理器結構簡單,指令規整,性能容易把握,易學易用;CISC微處理器結構復雜,功能強大,實現特殊功能容易。
(8) 應用范圍:由於RISC 指令系統的確定與特定的應用領域有關,故RISC 機器更適合於專用機;而CISC 機器則更適合於通用機。
目前常見使用RISC的處理器包括DEC Alpha、ARC、ARM、MIPS、PowerPC和SPARC等

J. 編譯器的歷史

20世紀50年代,IBM的John Backus帶領一個研究小組對FORTRAN語言及其編譯器進行開發。但由於當時人們對編譯理論了解不多,開發工作變得既復雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結構的研究。他的發現最終使得編譯器的結構異常簡單,甚至還帶有了一些自動化。Chomsky的研究導致了根據語言文法的難易程度以及識別它們所需要的演算法來對語言分類。正如Chomsky架構(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關文法)被證明是程序設計語言中最有用的,而且今天它已代表著程序設計語言結構的標准方式。分析問題(parsing problem,用於上下文無關文法識別的有效演算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。它已是編譯原理中的一個標准部分。
有限狀態自動機(Finite Automation)和正則表達式(Regular Expression)同上下文無關文法緊密相關,它們與Chomsky的3型文法相對應。對它們的研究與Chomsky的研究幾乎同時開始,並且引出了表示程序設計語言的單詞的符號方式。
人們接著又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱為優化技術(Optimization Technique),但因其從未真正地得到過被優化了的目標代碼而僅僅改進了它的有效性,因此實際上應稱作代碼改進技術(Code Improvement Technique)。
當分析問題變得好懂起來時,人們就在開發程序上花費了很大的功夫來研究這一部分的編譯器自動構造。這些程序最初被稱為編譯器的編譯器(Compiler-compiler),但更確切地應稱為分析程序生成器(Parser Generator),這是因為它們僅僅能夠自動處理編譯的一部分。這些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年為Unix系統編寫的。類似的,有限狀態自動機的研究也發展了一種稱為掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時,由Mike Lesk為Unix系統開發)是這其中的佼佼者。
在20世紀70年代後期和80年代早期,大量的項目都貫注於編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。
編譯器設計最近的發展包括:首先,編譯器包括了更加復雜演算法的應用程序它用於推斷或簡化程序中的信息;這又與更為復雜的程序設計語言的發展結合在一起。其中典型的有用於函數語言編譯的Hindley-Milner類型檢查的統一演算法。其次,編譯器已越來越成為基於窗口的交互開發環境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標准並沒有多少,但是對標準的窗口環境進行開發已成為方向。另一方面,盡管在編譯原理領域進行了大量的研究,但是基本的編譯器設計原理在近20年中都沒有多大的改變,它正迅速地成為計算機科學課程中的中心環節。
在20世紀90年代,作為GNU項目或其它開放源代碼項目標一部分,許多免費編譯器和編譯器開發工具被開發出來。這些工具可用來編譯所有的計算機程序語言。它們中的一些項目被認為是高質量的,而且對現代編譯理論感興趣的人可以很容易的得到它們的免費源代碼。
大約在1999年,SGI公布了他們的一個工業化的並行化優化編譯器Pro64的源代碼,後被全世界多個編譯器研究小組用來做研究平台,並命名為Open64。Open64的設計結構好,分析優化全面,是編譯器高級研究的理想平台。
編譯器相關專業術語: 1. compiler編譯器;編譯程序 2. on-line compiler 連線編譯器 3. precompiler 預編譯器 4. serial compiler 串列編譯器 5. system-specific compiler 特殊系統編譯器 6. Information Presentation Facility Compiler 信息展示設施編譯器 7. Compiler Monitor System 編譯器監視系統

閱讀全文

與編譯器的溫升相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:26
不能修改的pdf 瀏覽:750
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491