『壹』 c語言能對硬體直接操作是什麼意思,小弟初學者,請高手解答!非常感謝!!!
C語言允許直接訪問物理地址,能進行位(bit)操作,能實現匯編語言的大部分功能,可以直接對硬體進行操作。因此有人把它稱為中級語言。也就是說,C語言可以直接對物理地址進行操作。
學習指針是學習C語言中最重要的一環,能否正確理解和使用指針是我們是否掌握C語言的一個標志。
在計算機中,所有的數據都是存放在存儲器中的。一般把存儲器中的一個位元組稱為一個內存單元,不同的數據類型所佔用的內存單元數不等,如整型量佔2個單元,字元量佔1個單元等,在前面已有詳細的介紹。為了正確地訪問這些內存單元,必須為每個內存單元編上號。根據一個內存單元的編號即可准確地找到該內存單元。內存單元的編號也叫做地址。 既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。 內存單元的指針和內存單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關系。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針, 存款數是存單的內容。對於一個內存單元來說,單元的地址即為指針,其中存放的數據才是該單元的內容。在C語言中,允許用一個變數來存放指針,這種變數稱為指針變數。因此,一個指針變數的值就是某個內存單元的地址或稱為某內存單元的指針。
『貳』 C語言怎樣直接讀寫硬體
BCB中利用__emit__函數可以直接將二進製程序代碼嵌入程序中,這樣就可以實現一些底層的操作。由於直接操作系統底層,這種方法可能會導致系統的不穩定。
下面是利用__emit__函數讀寫硬體埠的方法。
//讀埠
//port參數為輸入埠地址,value為返回值.
unsigned char __fastcall inportb(unsigned short int port)
{
unsigned char value;
__emit__(0x8b,0x95,&port); //把埠地址送到EDX寄存器中
__emit__(0x66,0xec); //從埠中讀入數據到AL寄存器中
__emit__(0x88,0x85,&value); //把AL寄存器中的值輔給value
return value;
}
//---------------------------------------------------------------------------
//寫埠
//port參數為輸出埠地址,value參數為輸出值
void __fastcall outportb(unsigned short int port,unsigned char value)
{
__emit__(0x8b,0x95,&port); //把埠地址送到EDX寄存器中
__emit__(0x8a,0x85,&value); //把value送到AL寄存器中
__emit__(0x66,0xee); //把AL寄存器中的值寫入埠
『叄』 都說C語言可以直接操作硬體
不能。
首先,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語言在高級語言當中是最貼近物理層面的語言。它也被稱作高級語言裡面的低級語言。因為它很多方面都非常貼近硬體。典型的就是指針,這是一種通過物理地址直接操作內存的變數。
『肆』 c語言為什麼可以實現操作硬體的功能
樓上的描述不準確,c語言直接對硬體操作的例子比如直接通過c語言寫入晶元的控制寄存器,配置晶元的工作模式,達到用戶希望的效果,如定時器。這一點類似於單片機。
對內存的操作事實上還是由更低級的存儲器控制晶元完成的。
『伍』 c語言為什麼可以實現操作硬體的功能
不能。 首先,C語言不能夠直接對硬體進行操作。從本質上來說,連匯編語言都不可以。只有機器語言能夠直接操作硬體。 其次,C語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的C語言了。...
『陸』 為什麼說C語言是直接對硬體操作的語言
VB不行
語言從低級到高級,語義功能越來越完善(意思是寫出來的程序越來越接近人類語言),但是同時失去了對硬體的直接操縱能力,而且執行效率越來越低。
比如最低級的機器語言(全部是各種數字),沒學過根本看不出是什麼意思,但是對硬體操縱能力最強,想怎麼讓硬體做硬體就會怎麼做。執行效率為百分之百。
其次是匯編語言,匯編語言稍微向英語邁進了一點,但是很有限,一般人也看不明白的,比如這句
mov
a,b
誰知道什麼意思!其操縱硬體能力也極強,隨心所欲,執行效率基本也是百分之百。
而C語言介於高級和低級之間,代碼容易理解,還可以用指針操縱硬體(不過還是很局限的,CPU就無法之間操縱了),執行效率為80%,對於一直語言來說很不錯了。
Basic語言完全是高級語言,代碼簡單,但是不具備操縱硬體能力,也就是你想寫個代碼直接讓內存怎麼怎麼樣,內存不聽你的,只聽編譯好的程序的。而且執行效率也很低了。
『柒』 c語言可以直接對硬體操作嗎
害,這個問題怎麼說呢,操作系統才是直接對硬體進行操作的,如果操作系統使用C語言編寫,那麼宏觀上看上去就變成了C語言對硬體進行了操作,但用戶編程的c語言程序是不可以直接對硬體進行操作的,必須調用操作系統提供的服務才可以對硬體進行操作,比如printf函數.
『捌』 C語言是怎麼操控硬體的
操作系統在 BIOS(基本輸入輸出系統,一般是電腦主板上的一塊 ROM 晶元)程序中提供了對電腦中各種硬體設備,如顯示卡、軟盤、硬碟、串、並口、內存等的底層控製程序,C 語言中如果要直接操作硬體一般通過直接調用這些 BIOS 程序來實現,很少有人繞過BIOS程序直接操控硬體,當然那樣做也是可以的,只不過你必須是硬體的高高手,知道如何具體去控制它。
『玖』 為什麼說C語言是直接對硬體操作的語言
首先,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語言在高級語言當中是最貼近物理層面的語言。它也被稱作高級語言裡面的低級語言。因為它很多方面都非常貼近硬體。典型的就是指針,這是一種通過物理地址直接操作內存的變數。