① c語言的編譯與處理器的指令集有關嗎一定要CISC嗎RISC可不可以
C語言只是用於描述問題和演算法的一種語言,而在實際機器上真實運行的卻是各處理器自己的機器指令。編譯器的工作就是將C語言翻譯為機器指令。對你的問題答復如下:1. C語言與指令系統沒有關系,但是編譯器翻譯的指令與指令系統有關系;2.無論CISC還是RISC,編譯器都可以將C語言翻譯為對應的機器指令。
② 我沒用過C語言,請問怎樣將.c文件轉換成.bin文件,需要什麼編譯軟體嗎
在linux上,使用gcc編譯器,可以直接將它編譯為.bin文件。
不過你說你沒用過C語言,不知道你是沒有編程基礎,還是有其他語言的基礎。
如果完全沒有編程基礎,那對你來說,會很麻煩的。
③ 請問在計算機中有個縮寫RISC是代表什麼意思ARM又是什麼嵌入式系統開發是什麼
RISC即"精簡指令集計算機"。它是針對傳統處理器指令系統的缺陷提出來的,傳統處理器(如Intel體系)的指令系統越來越復雜,不僅導致處理器研製周期變長,而且還有難以調試、難以維護等一些自身無法克服的困難。RISC把著眼點放在如何使處理器的結構更加簡單合理及提高運算速度上。它優先選取使用頻率最高的簡單指令(一般只有50米),避免使用復雜指令,一般將指令長度固定為32位,且多數為單周期指令。指令格式和定址方式、種類減少,縮短了解碼時間,壓縮了機器周期。內部以硬布線控制邏輯為主,不用或少用微碼控制等,這些措施大大提高了RISC處理器的運算速度。K6處理器的內核就是RISC超標准量體系結構。
CISC(復雜指令集計算機)和RISC(精簡指令集計算機)是當前CPU的兩種架構。它們的區別在於不同的CPU設計理念和方法。 早期的CPU全部是CISC架構,它的設計目的是要用最少的機器語言指令來完成所需的計算任務。比如對於乘法運算,在CISC架構的CPU上,您可能需要這樣一條指令:MUL ADDRA, ADDRB就可以將ADDRA和ADDRB中的數相乘並將結果儲存在ADDRA中。將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作全部依賴於CPU中設計的邏輯來實現。這種架構會增加CPU結構的復雜性和對CPU工藝的要求,但對於編譯器的開發十分有利。比如上面的例子,C程序中的a*=b就可以直接編譯為一條乘法指令。今天只有Intel及其兼容CPU還在使用CISC架構。 RISC架構要求軟體來指定各個操作步驟。上面的例子如果要在RISC架構上實現,將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作都必須由軟體來實現,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。這種架構可以降低CPU的復雜性以及允許在同樣的工藝水平下生產出功能更強大的CPU,但對於編譯器的設計有更高的要求。
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結構是什麼
.CISC(complex instruction set computer)即復雜指令集,在20世紀90年代前被廣泛的使用,其特點是通過存放在只讀存儲器中的微碼(microcode)來控制整個處理器的運行。
一條指令往往可以完成一串運算的動作,但卻需要多個時鍾周期來執行。隨著需求的不斷增加,設計的指令集越來越多,為支持這些新增的指令,計算機的體系結構會越來越復雜。然而,在CISC指令集的各種指令中,其使用頻率卻相差懸殊,大約有20%的指令會被反復使用,占整個程序代碼的80%。而餘下的80%的指令卻不經常使用,在程序設計中只佔20%,顯然,這種結構是不太合理的。
RISC和CISC在構架上有著幾個不同的地方。
1)首先是指令集的設計上,RISC構架的指令格式和長度通常是固定的(如ARM是32位的指令)、且指令和定址方式少而簡單、大多數指令在一個周期內就可以執行完畢;CISC構架下的指令長度通常是可變的、指令類型也很多、一條指令通常要若干周期才可以執行完。由於指令集多少與復雜度上的差異,使RISC的處理器可以利用簡單的硬體電路設計出指令解碼(decode)功能,這樣易於流水線的實現。相對的CISC則需要通過只讀存儲器里的微碼來進行解碼,CISC因為指令功能與指令參數變化較大,執行流水線作業時有較多的限制。
2)其次,RISC在結構設計上是一個載入/存儲(load/store)的構架,只有載入和存儲指令可以訪問存儲器,數據處理指令只對寄存器的內容進行操作。為了加速程序的運算,RISC會設定多組的寄存器,並且指定特殊用途的寄存器。CISC構架則允許數據處理指令對存儲器進行操作,對寄存器的要求相對不高。
RISC(精簡指令集計算機)和CISC(復雜指令集計算機)是當前CPU的兩種架構。它們的區別在於不同的CPU設計理念和方法。
早期的CPU全部是CISC架構,它的設計目的是要用最少的機器語言指令來完成所需的計算任務。比如對於乘法運算,在CISC架構的CPU上,您可能需要這樣一條指令:MUL ADDRA, ADDRB就可以將ADDRA和ADDRB中的數相乘並將結果儲存在ADDRA中。將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作全部依賴於CPU中設計的邏輯來實現。這種架構會增加CPU結構的復雜性和對CPU工藝的要求,但對於編譯器的開發十分有利。比如上面的例子,C程序中的a*=b就可以直接編譯為一條乘法指令。今天只有Intel及其兼容CPU還在使用CISC架構。
RISC架構要求軟體來指定各個操作步驟。上面的例子如果要在RISC架構上實現,將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作都必須由軟體來實現,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。這種架構可以降低CPU的復雜性以及允許在同樣的工藝水平下生產出功能更強大的CPU,但對於編譯器的設計有更高的要求。
⑤ 怎麼把C語言代碼轉換為MIPS
把C語言代碼轉換為MIPS:
以下是c語言代碼:
while (candidate_gcd <= min)
{
if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==
0))
{
current_gcd = candidate_gcd;
}
candidate_gcd = candidate_gcd + 1;
}
以下為轉換為mips後的代碼:
首先設置變數:
candidate_gcd = $t0
min = $t1
a mod candidate_gcd = $t2
b mod candidate_gcd = $t3
current_gcd = $t4
$t6 = 0
$t5
代碼如下:(綠色為注釋)
Label3: //設置標簽Label3
ble $t0,$t1,Label //當$t0 小於等於$t1 時,跳到標簽Label
Label: //設置標簽Label
Add $t5,$t2,$t3 //將$t2 和$t3 相加賦值給$t5
Li $t6,0 //給$t6 賦值為0
Leq $t5, $t6,Label1 //判斷如果$t6=$t5=0,跳到標簽Label1
Label1: //設置標簽Label1
Move $t4, $t0 //$t4=$t0
Addi $t0, $t0,1 //$t0=$t0+1(自加加)
J Label3 //跳到標簽Label3,這里其實就是實現c 語言
中的while 無限循環
⑥ C語言和c語言編譯系統有什麼區別兩者是包含關系嗎
無區別,只不過編譯器不一樣罷了。因為不同的cpu構架有不同的指令集。而嵌入式基本使用RISC結構的cpu,需要使用pc上的cpu編譯出在能嵌入式cpu上運行的二進製程序。這叫交叉編譯。pc上的程序不可以直接在其他cpu上運行,需要重新編譯。 因為編譯器不一樣,執行的c語言標准就跟編譯器相關。 管理內存映射,設置中斷系統等在pc上也有,不是嵌入式的專利。 只是做嵌入式里的界面、網路、文件編程的話,跟pc上幾乎沒有差別,因為有操作系統罩著。如果開發驅動程序,就要求你對所使用的cpu和板子的結構很了解,也就是看得懂硬體手冊即可。 另外嵌入式環境同pc的差別 如cpu位數、硬體資源緊缺等是需要程序員考慮的
⑦ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(7)c編譯為riscv擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。