當前位置:首頁 » 編程軟體 » 編譯器程序二進制機器查表

編譯器程序二進制機器查表

發布時間: 2022-10-04 07:07:27

㈠ 我用c語言編寫了一段代碼,有什麼軟體或方式可以查看生成的機器二進制代碼嗎(就是0和1)

//這個是用以前C++寫的,樓主郵箱...

//左邊顯示的每個位元組的16進製表示,右側是文件中每個位元組對應的ASCII碼如果是可顯示字元輸出,不可列印的字元就全部用點替代了。這個就算是使用說明了。

㈡ 匯編語言編譯器是怎麼編寫的

沒實現過,如果考慮不是很復雜的話,可以這樣:
通過查一張表的方式實現:每個匯編指令對應的二進制機器碼
每次讀取匯編源碼的一行指令,然後查表,看對應哪個二進制機器碼,然後根據指令的不同,把操作數等編入機器碼...最後把結果輸出到exe中。最後可能還需要處理一下exe的描述section...

java中什麼是能夠在計算機CPU上執行的二進制代碼

java中的JVM是能夠在計算機CPU上執行的二進制代碼。

  • java的執行過程

Java代碼需要經過編譯和解釋兩個步驟,才在能在平台上運行。首先java語言的編譯器,幫java代碼編譯成class的位元組碼,之後通過java虛擬機(JVM)來解釋執行。

  • java代碼的編譯

java代碼是如何編譯的?

首先編譯的解釋:把用高級程序設計語言書寫的源程序,翻譯成等價的計算機匯編語言或機器語言書寫的目標程序的翻譯程序。編譯的具體過程,可以看看《編譯原理》相關的書籍。

其實java的編譯過程,和通常c/c++還是不同的。

java編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變數名等等)以及符號引用(方法引用,成員變數引用等等);方法位元組碼放的是類中各個方法的位元組碼。

Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。

c/c++的編譯,當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而生成的。因此在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。

  • java虛擬機(JVM)

簡單的可以這樣理解它的功能:就是將java編譯之後的位元組碼,解釋成cpu能夠執行的二進制代碼。

JVM是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。JVM有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM的主要工作是解釋自己的指令集(即位元組碼)並映射到本地的CPU的指令集或OS的系統調用。Java語言是跨平台運行的,其實就是不同的操作系統,使用不同的JVM映射規則,讓其與操作系統無關,完成了跨平台性。JVM對上層的Java源文件是不關心的,它關注的只是由源文件生成的類文件(class file)。類文件的組成包括JVM指令集,符號表以及一些補助信息。

java虛擬機工作的原理,可以自己找一下網上的資料。大家還需要思考的問題,jvm的內存、jvm的垃圾回收(GC)、Android的朋友還要區分(Dalvik 和標准 Java 虛擬機JVM)的區別。

  • 總結:

java代碼編譯之後,可以直接運行在Windows或者其它裝有JVM虛擬機的系統下。而C或C++直接編譯成與機器和操作系統相關的代碼。所以C語言編譯的程序沒有跨平台性,就算沒有使用到操作系統相關的API,在不同的系統下也必須重新編譯才能運行。

㈣ C/C++語言編譯生產可執行的二進制文件的過程求大神詳盡解釋,

  1. 預編譯。編譯器將你的.c、.cpp源代碼,通過解釋其中的預編譯指令,將源代碼轉換成相應的沒有任何預編譯指令的代碼。

  2. 編譯、優化。將上一步的代碼編譯成匯編指令,並作一定優化,形成對應的.s匯編代碼

  3. 匯編。將.s文件匯編成機器碼,形成對應的.o目標文件,此時是不可執行的二進制文件。生成對應的清單文件。為了連接需要,還會生成未定向符號表、導出符號表、地址重定向表等等。

  4. 連接。先根據對應的清單文件、連接文件及之間的調用關系,決定所有的目標文件及引用的庫文件在最後可執行文件中的位置;然後做一些其他事情,比如根據符號表等將目標文件中的符號地址補全等等;最終得到可執行文件。

這只是我個人的簡單理解,更詳盡的解答都可以寫成好幾本書了=_=望採納~

㈤ 匯編指令如何轉換為二進制或者十六進制

一種是手工查表進行轉換,找到針對CPU的匯編碼的書,根據匯編語句查對應的機器碼。
另一種一種是用編譯軟體,對應於X86的,有ASM程序可以編譯匯編程序,對應S51,也有專門的匯編編譯程序
X86系統如果是少量的
用DEBUG軟體,可以實現
用其中的A命令,輸入匯編語句
然後用D命令就可以看到16進制的機器碼

㈥ 關於匯編語言和高級語言的問題

這個東西不是簡單明了能夠說明白的,原諒!

我們的計算機能夠執行的是一條一條用二進制數字寫成的指令,在CPU讀取這些指令時會用其內部的解碼部件把這些數字翻譯成一定的操作,從而指導計算機完成該做什麼,怎麼做的問題.
在同一架構的CPU中,機器指令是相同的,或是向下兼容的.硬體工程師們在設計CPU時,綜合考慮各方面的情況,最終形成了若干條指令(就像我們所寫的程序都可以用三種基本結構寫成一樣),然後再把這若干條指令鐫刻在CPU中,用硬體部分予以實現(電子電路中能夠講到).
由於每種CPU的設計者和設計理念不同,因此,形成了各種各樣的CPU或單片機品牌,像我們常用的pentium和amd都是屬於80x86架構的,此外還有mcs51單片,arm晶元,motorola的680X00系列等.

再說下匯編語言:
由於機器指令是一串可執行的數字代碼,因而我們一般人是不會記也很難記住的,為了解決這個問題,所以才發明了匯編語言,用助記符來代替相應的機器語言.所以匯編語言與機器語言是一一對應的,CPU內部有多少條機器指令,就會相應有多少條匯編指令.

高級語言:
由於匯編語言只是機器語言的符號化,雖說相對簡單了,但是還是得要求人們學習相應的內部結構,對於復雜的內部結構,有很大一部分人還是無從著手的.所以就出現了高級語言,當程序員用高級語言指令寫完源程序後,只需用編譯器編譯就可運行了.此時編譯器所做的工作就是把高級語言指令翻譯成匯編語言(機器語言).由於每種機器對應的指令不同,所以在不同架構的機器下,就會有著不同的編譯器.

從上我們可以知道,機器語言 匯編語言是基於機器的,在80x86下能夠運行的程序,放到arm下肯定沒法運行,為什麼?因為其機器結構不同,內部的硬體實現不同.所以說其移植性差.
那為什麼說高級語言移植性就好呢?是因為他不是用匯編語言寫的.在80x86下用c寫了一個程序,我們可以用mcs51下用mcs51的c編譯器進行編譯,將關鍵字翻譯成mcs51的匯編指令就可以了.

打的太多了,希望你能明白.

㈦ 關於編譯原理

1.當然是機器語言了,如果是匯編指令,那還得編譯一次!能運行的程序都是機器語言,只有機器語言才能控制CPU,NET或Java這些中間語言,程序在運行時會被CLR或JVM快速編譯成機器語言,因此這些程序速度上有損失。

高級語言源代碼(文本)-通過編譯器(compiler)-程序(二進制機器語言)
匯編代碼(文本)-通過匯編器(assembler)-程序(二進制語言)

看到這里,你可能會想那匯編語言到底有什麼用呢,編譯器完全能代替匯編啊?
(1).編譯器是通過高級語言(c,c++)轉到機器語言的。轉換過的機器語言受限與高級語言,效率和功能上都有限制。比如c不等過分操作內存。但通過匯編器轉化過來的機器語言,效率高,且用匯編語言,直接和CPU對話!
(2).匯編可以反匯編(逆向編譯),而這里高級語言沒有發言權,就是:
程序(二進制機器語言)-通過反匯編器(compiler)-可轉化為匯編代碼(文本)
但永遠不能轉化為高級語言的源代碼,。
以上兩點匯編存在的重要性。

2。當然是說移植源代碼。windows用x86機器語言,蘋果用powerPC機器語言,windows程序當然不能運行在蘋果機上,因為程序其實就是一串機器語言!但windows上有c的編譯器(vc++),蘋果機上也有c編譯器(gcc),因此同一個c的源代碼,當然就可以通過不同平台的同一種編譯器實現平台移植。

3.當然是NASM,我看的所有書都首先說NASM,他是開源的,就像Linux一樣,很受歡迎,還有MASN是微軟的,borland的也有匯編器,不過都不常見了。

4.這跟CPU有關,一般32位x86兼容的cpu有許多寄存器,多數是32位的,也有16位的。比如CS,ES,DS這些segment寄存器一直是16位的。

5.優勢太多了,這和32位和16位存在的優勢一樣,16位電腦最大內存1MB,寄存器都是16位的。32位,最大內存可以有4GB,整整是16位的4096倍啊!16位多渺小啊,同理64位基本上也可以蔑視32位,64內存最大內存用TB來衡量,寄存器多數是64位!地址匯流排也是64位。64對32位沒有什麼優勢劣勢可言,64位完全就是32位的下一代。

㈧ c語言是如何編譯成二進制

計算機專業有門課程叫做《編譯原理》,詳細講述了怎麼把高級語言翻譯成匯編語言活著機器能看懂的二進制代碼。

簡單的說,C語言是通過編譯器翻譯成二進制代碼的(就像英譯漢的軟體把英文翻譯成漢語一樣。把高級語言翻譯成機器語言過程很復雜,學了編譯原理就懂了)。還有編譯器可以用各種語言編寫,C語言可以被用C語言寫的編譯器來編譯。

㈨ 用C語音編寫單片機程序時,查表法怎樣用

數組。將數組定義為只讀屬性,像這樣code
unsigned
char
TAB[
*
]={xx,
xx,.........};意思是
只讀的
無符號位元組型數組TAB。編譯器會幫你把這個數組放到ROM裡面去,而不會佔用RAM。使用的時候和一般的數組一樣使用就可以了。如我要調出數組裡面的第十個數,只需要a=TAB[9];就可以了。並且你可以指針去查找裡面的數據,很方便操作。

㈩ c語言是怎樣變成計算機可以識別的二進制機器指令的急求 …詳細點

一般C語言都在特定的環境中編寫,比如visual c++,turbo C之類的。這些環境中帶有C語言編譯器,當你點編譯的時候,編譯器就會將C代碼轉換為匯編語言。匯編語言和二進制指令有直接對應關系,機器可以識別。就是這樣

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372