A. 匯編語言與c語言有什麼區別
1、操作復雜程度的不同
c語言,與匯編語言相比,c語言在更加接近人的一般思維,因此在程序的設計過程中比較容易操作,此外在進行一些復雜的操作,運算時,c語言比匯編就要簡單很多,尤其是c語言中的豐富的函數庫,可以直接實現一些原本很復雜的功能,並且從代碼量來說任意一個c語言程序,通過反匯編之後變成匯編語言程序,其長度都可能要增加好幾倍。
2、使用范圍的不同
c語言程序的事件將會只是編寫匯編語言程序的幾分之一,從編寫程序的效率上來說c語言無疑更高,此外C語言是高級程序語言因此可移植性較好,不太受到到硬體設備的限制。
在實現一個功能時,匯編語言可以直接奔著目標去,而C語言則是給你提供了一種對於對於這種問題的普遍處理辦法,不具有針對性,因此會有許多多餘的在這個問題中不需要的過程,因此可能回事程序較大,運行較慢。相對與匯編語言,C語言更加適合一些較大型項目的開發。
3、運行的速度和效率不同
程序沒有了匯編語言計算機直接就無法運行,因為匯編語言是基於計算機底層硬體的編程,通過它實現了對cpu,內存,硬碟以及外界設備的直接操作,因為直接所以匯編語言在程序的大小,執行的速度與效率方面幾乎無可比擬,但是也是因為直接,所以匯編程序難以移植,且完成相同的操作代碼量太大,在進行一些大的項目是,單獨使用匯編進行編程幾乎不可能實現。
B. 匯編語言和c語言區別
匯編語言與C語言的區別:
1、在匯編語言中,為一個處理器編寫的程序不能在另一種類型的處理器上運行。在C語言程序中,程序獨立於處理器類型運行。
2、匯編語言代碼的性能和准確性優於C代碼。
3、C語言必須提供額外的指令來在計算機上運行代碼。
4、匯編語言代碼比C代碼難以理解和調試。
5、 一個或兩個C語言語句擴展為許多匯編語言代碼。
6、匯編語言可以比C別更好地進行通信某些類型的硬體操作只能通過匯編語言執行。
7、在匯編語言中,我們可以直接讀取物理地址上的指針,這在C別是不可能的。
8、在匯編語言中使用位更容易。
9、匯編程序用於在匯編語言中轉換代碼,而編譯器用於在C編譯代碼。
10、C語言的可執行代碼大於匯編語言代碼,因此執行時間較長。
11、由於長的可執行代碼,C程序的效率低於匯編語言程序。
12、與匯編程序員相比,C語言程序員不需要知道處理器中的寄存器等硬體細節。
13、最C的語言代碼首先自動轉換為匯編代碼。
C. C語言為什麼要先編譯成匯編語言
C語言,具有可移植性,或者說同樣的代碼可以在不同cpu平台上運行得到同樣的結果
匯編語言,移植性差,一般針對某型cpu,每個類型的cpu都有自己的匯編語言
為保證C語言編制的通用演算法的可移植性,比如我們用C編寫了一套mp3解碼演算法程序,要在pc機上、手機上都能用,那麼我們就採用通用的C編譯器,將C語言程序編譯成指定CPU的匯編語言,再匯編成機器可執行程序。
另一個用途是程序優化問題,在C語言層次,由於是高級語言,不涉及底層硬體,那麼底層硬體的特性不能夠得到充分利用,在需要優化演算法的場合,我們需要將C語言演算法編譯生成匯編程序,然後修改需要優化的匯編程序達到目的。比如,你在手機上經常會遇到音頻解碼器,需要安裝,而且不同的cpu需要選擇不同的解碼器,這些解碼器應當就是在匯編層次上優化了演算法的可執行代碼,關鍵部分經過匯編級優化,不需要優化部分仍然使用C語言編譯的結果。
D. 先生們,女神們,快來看啊…… 請問下,c語言通過編譯器轉換成匯編語言,那電腦是怎樣聽懂匯編語言呢說
1、比如彈出光碟機,學過高中物理應該知道電生磁,實際上就是個發動機,將電能轉換成機械能。
2、要弄懂這個問題,舉個 ia32 windows平台上的例子,我也只能大體上說一下,具體的細節在這里是說不完的。。以晌游c++源碼
int main()
{
int a = 2;為例
}
經過編譯器,會生成匯編代碼:mov dword ptr ss:[esp-4], 2,匯編指令經過匯編器(即將匯編指令轉換成機器碼的程序)即C74424FC02000000這樣的機器碼,匯編指令生成的機器碼是有一定的指令格式的,你可以參考intel開發手冊,第一部分就有intel指令的格式。然後鏈接器根據生成的二進制文件,按照pe結構,生成一個exe文件。當你雙擊運行這個文件的時候,windows的pe loader 程序會將exe文件內存文件映射到虛擬內存中(即windows上的頁文件,也就是c盤中的pagefile文件),CPU的內部有一個震盪器(震盪器的原理很簡單,平時看到的電鈴就是這個原理),震盪器不斷的發送脈沖,每一次當脈沖為1時,CPU就會從內存中讀取指令,脈沖為1的時候,會根據內存中的地址匯流排,發送要取指的內存地址,這時候有一個解碼器,所謂的解碼器就是一種開關電路,比如有三個開關,當2個斷開1個閉合時,就表示成001,也就是取第一個單元的數據,這樣CPU將指令取得後,它會對指令進行解碼,解碼完後設置電路開關,然後將相應的數據放入到運算器中,運算器的實現,最早就是一個加法器。然後就是指令執行,執行完了,繼續取下一條指令。這就是存宴悔銷儲程序原理。
沒事歡迎來0x30網路貼吧,分享交流更多計前宏算機編程知識。
E. C語言和匯編語言的關系
程序員編寫的C語言代碼,首先要經過C語言編譯器,生成匯編代碼,這個過程稱為編譯階斷,當C語言編譯器生成匯編代碼後,再調用匯編器來將匯編代碼編譯成匯編指令。
這是一種站在巨人肩人的作法,最早的C++編程語言也是這樣的實現方法,只不過那時候叫Cfront程序,Cfront程序的作用是將C++代碼轉換成C語言代碼,類似於一個文本處理器,然後再調用C語言編譯器,將C源碼編譯成匯編代碼,然後再調用匯編器將匯編代碼編譯成機器碼。
這個過程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc這款c語言編譯器為例,它實際上是四個小程序。
cp: c語言預處理程序,有它負責進行預處理操作。
cc: C語言編譯器,它負責將C源碼編譯成匯編代碼。
as: 匯編器,它負責將匯編代碼編譯成機器碼,一般使用gcc test.c這樣的命令編譯C語言時,會生成一個a.out的程序,它實際上指的就是as ouput,即匯編器輸出文件。
link: 鏈接器,它負責將匯編器輸入的機器碼和庫打包成一個操作系統可以運行的可執行文件,在Linux上的可執行文件格式是ELF格式,這個格式的實現是有鏈接器來完成的。
F. C語言與匯編語言有什麼區別與聯系
C語言當然一種
匯編是對於各種單片機特定的編寫語句,對於不同總類的也不同
C語言是一種通用語言,雖然不同總類的單片機的匯編語言不同,但他們大部分可以用C語言編寫,建議學好C語言
G. C語言和匯編語言的區別是什麼
區別如下:
(1)兩者編譯組成不同。匯編語言是將由0、1組成的機器語言用具有簡單語義的英文代碼表示,而C語言不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等。
(2)兩者被計算機識別的路徑不同。匯編語言通常用於對硬體的直接操控。而且C語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行。
(3)兩者用處不同。匯編語言通常用在程序中最核心的、控制硬體的代碼,一方面是安全,另一方面提高運行速度。而C語言通常用在計算機外用功能上。
(4)兩者學習難易程度不同。匯編語言所需要的編繪知識很多很復雜,經常被開發者使用。而C語言是一門很簡單方便的語言,編程者也就不需要有太多的專業知識。
計算機語言(Computer Language)指用於人與計算機之間通訊的語言。計算機語言是人與計算機之間傳遞信息的媒介。計算機系統最大特徵是指令通過一種語言傳達給機器。計算機語言從低級到高級可以分為:
(1)機器語言,即由0、1組成的機器硬體可以識別的語言;
(2)低級語言,即匯編語言
(3)中級語言,如C語言
(4)高級語言,如C++,JAVA,C#等。
(7)c語言匯編原理擴展閱讀:
如今通用的編程語言有兩種形式:匯編語言和高級語言。
匯編語言和機器語言實質是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,容易識別和記憶。源程序經匯編生成的可執行文件不僅比較小,而且執行速度很快。
高級語言是絕大多數編程者的選擇。和匯編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。
高級語言主要是相對於低級語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,如流行的vb、vc、foxpro、delphi等,這些語言的語法、命令格式都各不相同。
高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:解釋類和編譯類。
H. 實踐,C語言是怎麼變成匯編的
c語言未必會經歷匯編語言這一環節,准確的說,c語言經歷編譯器(必須),鏈接器(某種程度上非必須)的處理,成為可執行代碼(一般是二進制代碼)。
而匯編也許是目前多數編譯器提供的中間環節(vc,vs都提供在調試運行下使用反匯編的功能),因為對於匯編語言來說,進一步編譯肆孝成機器語言的難度很低,只需查找有限的匯編指令對應的編碼,如MOV,ADD等,具體編纖雹茄碼與機器有關。
而你說的c語言變成匯編這一過程,正是編譯器的核心工作,也是最為困難的。需要對你毀察的程序(本質上是一個超長的字元串)做分割,詞法分析,語法分析,最後翻譯成匯編。
I. c語言和匯編語言是如何變成0和1運行的
謝邀!c語言和匯編語言是怎麼變成0和爛鄭1的,要想知道答案就要先從數字電路說起,在數字電路中都是運行的二進制,二進制和數字電路有什麼關系呢?下面我就來給大家講解一下,既然是數字電路就和電有關系,通過用電平的高底來代表二進制,高電平可以理解為數字電路的1底電平可以理解為數字飢前頌電路的0,比方說在電路中有兩種電壓,一種是5v一種悔運是0v,用5v代表數字1用0v代表數字0,這就是編程軟體的底層原理,就拿計算機來說,計算機的底層就是0和1,通過0和1人們就發明了編譯軟體,c語言和匯編語言就是通過編譯軟體變成0和1的
J. c語言是怎麼基於匯編實現的
如果你是想用匯編實現C語言功能呢,我感覺這個應該沒什麼必要,因為兩者最終運行時,同樣是以機器語言運行。zd高級語言存的產生就是為了讓程序員在編寫較少的代碼是想更復雜的功能,雖然最終在效率上可能略有下降,但是這是軟體工程的思想。但是有些地方是必須使用C,就是操作硬體的時候,有時候為了效率,也可以進行改寫。
如果你是在是想知道呢,你對C語言可以進行反編譯,就知道大致的結構了,但是C語言本身有很多統一的函數庫,所以反編譯的東西只要看自己寫的東西就好了。