為什麼說C語言是直接對硬體操作的語言

2022-02-27 18:29:07 字數 2475 閱讀 7814

1樓:匿名使用者

首先,c語言不能夠直接對硬體進行操作。從本質上來說,連組合語言都不可以。只有機器語言能夠直接操作硬體。

其次,c語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的c語言了。

以gcc編譯器為例,這個可以分為四步。

第一步是預處理,包括語法檢查等工作。

gcc -p abc.c

第二步由源程式生產組合語言**。

gcc -s abc.c

會生成abc.s檔案,這個檔案裡就是彙編**。

第三步編譯器生成目標**,一個原始檔生成一個目標**。

gcc -c abc.c

會生成abc.o

第四步聯結器從目標**生成可執行檔案。

gcc abc.o

最後,相對來說,c語言在高階語言當中是最貼近物理層面的語言。它也被稱作高階語言裡面的低階語言。因為它很多方面都非常貼近硬體。

典型的就是指標,這是一種通過實體地址直接操作記憶體的變數。

2樓:匿名使用者

vb不行

語言從低階到高階,語義功能越來越完善(意思是寫出來的程式越來越接近人類語言),但是同時失去了對硬體的直接操縱能力,而且執行效率越來越低。

比如最低階的機器語言(全部是各種數字),沒學過根本看不出是什麼意思,但是對硬體操縱能力最強,想怎麼讓硬體做硬體就會怎麼做。執行效率為百分之百。

其次是組合語言,組合語言稍微向英語邁進了一點,但是很有限,一般人也看不明白的,比如這句

mov a,b

誰知道什麼意思!其操縱硬體能力也極強,隨心所欲,執行效率基本也是百分之百。

而c語言介於高階和低階之間,**容易理解,還可以用指標操縱硬體(不過還是很侷限的,cpu就無法之間操縱了),執行效率為80%,對於一直語言來說很不錯了。

basic語言完全是高階語言,**簡單,但是不具備操縱硬體能力,也就是你想寫個**直接讓記憶體怎麼怎麼樣,記憶體不聽你的,只聽編譯好的程式的。而且執行效率也很低了。

3樓:匿名使用者

樓上的描述不準確,c語言直接對硬體操作的例子比如直接通過c語言寫入晶片的控制暫存器,配置晶片的工作模式,達到使用者希望的效果,如定時器。這一點類似於微控制器。 對記憶體的操作事實上還是由更低階的儲存器控制晶片完成的。

4樓:匿名使用者

其它語言最終對硬體操作並不是這種語言完成的,而是由計算機作業系統(如windowsxp)來完成的。

如int a=5;並不是對地址在操作,而是由作業系統自動分配了個地址來存放a,你也不知道這個地址確切是多少

c語言接近硬體是指它可以直接用指標訪問硬體地址。如:malloc,new函式

int *p; p = new int; //返回型別為int* 型別(整數型指標),分配大小為 sizeof(int);

int* p; p = (int *) malloc (sizeof(int));

然後就可以對這個指標指向的記憶體地址進行賦值等操作

5樓:匿名使用者

按你舉的例子 寫int a=5 都是分配一個空間

但是你有沒有想過 到底是誰給我們分配的這個空間?計算機是怎麼理解到的?

舉一個不恰當的例子吧 : 一隻小狗叫一聲表示 你好 一個人用一門很複雜的語言 說了一句 你好 對於同樣接收到這兩個資訊的物件而言那個更直白呢更容易理解呢?

c語言可以直接對硬體進行操作嗎

6樓:匿名使用者

不能。首先,c語言不能夠直接對硬體進行操作。從本質上來說,連組合語言都不可以。只有機器語言能夠直接操作硬體。

其次,c語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的c語言了。

以gcc編譯器為例,這個可以分為四步。

第一步是預處理,包括語法檢查等工作。 gcc -p abc.c 第二步由源程式生產組合語言**。

gcc -s abc.c 會生成abc.s檔案,這個檔案裡就是彙編**。

第三步編譯器生成目標**,一個原始檔生成一個目標**。 gcc -c abc.c 會生成abc.

o 第四步聯結器從目標**生成可執行檔案。 gcc abc.o

最後,相對來說,c語言在高階語言當中是最貼近物理層面的語言。它也被稱作高階語言裡面的低階語言。因為它很多方面都非常貼近硬體。

典型的就是指標,這是一種通過實體地址直接操作記憶體的變數。

7樓:匿名使用者

c語言只是一種程式設計工具,微控制器程式設計可用c語言,機器人程式設計也有用c語言,計算機系統下的程式設計也可以用c語言。是否可以操作硬體,看你用c語言的環境。微控制器程式設計、機器人程式設計肯定就要操作硬體,如果是編寫計算機系統的軟體,又要看是什麼作業系統,win98之前的系統,程式可以直接操作硬體,nt以後的系統,使用者程式不能直接操作硬體,必須通過驅動程式介面來操作硬體。

c語言為什麼for是死迴圈,C語言中程式如for為什麼是死迴圈

for 按語法,for 迴圈 初態 終態 步長 這三部分,現在 是 空語句 回 空語句 空語句 是合法的答語句。由於沒有給 終態 即允許繼續迴圈和終止迴圈的條件 迴圈語句於是可以 永遠繼續下去。俗稱 無限迴圈 或 死迴圈。但通常 迴圈體內 會有 語句控制 決定 是否中止。例如for for 當然,必...

(C語言)int num31,2,3,4,5,6為什麼是對的

num是一個多維陣列,每行有3個int型元素。由於多維陣列的儲存方式實際上也是類似於一維陣列那樣連續存放的,所以對於形如 這種型別,其實與,這種形式的存放方式是完全一樣的,這也是多維陣列必須指定除第1箇中的大小的原因,因為沒有後面的大小,c語言是無法正確地區分這片連續記憶體究竟是幾行幾列。而,這種形...

c語言的題正確的是為什麼

選bstrlen是取字bai 符串的長度,也就是從字du符zhi串第一個位元組開dao始讀,直到遇到字串結束符內 0 的時候結束,abc4567 一共容7個字元,因此第一個為7 sizeof是取空間大小,陣列s一共10個char型別的元素,因此大小為10 strlen const char str ...