❶ 機器語言(二進制或十六進制)是如何轉成匯編語言(英語)的 能不能轉成中文 為什麼
1.
你需要明白,微處理器的所有執行功能都是固定的,並且它們是有固定順序的,比方說在51指令集里功能的順序是:
00——Nop(空操作)
01——AJmp(絕對跳)
02——LJmp(長跳)
03——RR(邏輯右移)
04——Inc(遞加)
……
也就是說,51單片機里共N種功能,第X種功能是***。
而在80x86匯編里,更加復雜的匯編指令其實也都是按順序組織好的「數字」,比如ADD指令,按照其操作碼的不同(比方說目標操作符是Ax還是Bx),從B8開始有數個標號都屬於Add指令。
匯編時,我們寫的代碼都是助記符也就是諸如Add,Mov這樣的指令,而編譯時,就會把這些指令換成對應的數字了。這種轉換是固定的,也就是說Mov永遠只會轉換成那幾種形式(之所以會有好幾種是因為操作數的類型不同)。
2.
機器語言其實就是上面提到的「數字標號」,也就是指功能序號。比方說一條機器語言是00,按照上面的表找出來,就是Nop空操作指令,當單片機從ROM中執行到00這條代碼的時候就會自動調用「第00號功能」,而這個功能就是空操作。所有同型號的51單片機都是這么處理的。
3.
上面從字面上解決了你這個問題。但是我看了你的追問,似乎你想知道的不是這個,而是數字怎麼變成字?好吧……
首先你要知道ASCII碼,也就是數字和英文字母及標點符號之間的關系。舉個例子,65這個數字,在ASCII碼中可以表示大寫字母A,依次的,66可以表示B;32表示空格,13表示回車,等等。ASCII碼佔一個位元組。
漢字,比較特殊的一類字元,關鍵就在於它的復雜。英文字母加上標點符號和一堆稀奇古怪的符號,撐死了用127個ASCII碼表示就完事了,但是常用漢字遠不止它的十倍。所以漢字在數字邏輯中的處理,是按另一種編碼存在的。一般的ANSI格式文件是將漢字表示為GB-2312編碼,這種編碼跟ASCII碼不沖突,占兩個位元組。關於GB-2312編碼的具體情況可以網路查詢,規則比較復雜,沒辦法簡單講清楚的。注意這里講的是字元的表示規范。
至於指令能不能用漢字來表示,就是相當於 加 A,#30 這樣的指令能否存在,我想說的是,完全可以實現;但是這種匯編指令跟 ADD A,#30 有什麼區別?我們只需要把現有的匯編編譯器稍做修改,讓它可以識別這樣的指令,然後將「加」換成ADD,再把它轉換成數字,在實現上和用Add根本沒有區別。
現在的「易語言」,差不多也是用的這種原理,只是寫出了可以識別漢字指令的編譯器,然後還是使用的形如Delphi和VB一樣的編程風格。說白了就是將國外的產品進行一個「山寨」。如果你還不懂,說明我上面講的你沒懂。。。那我也沒辦法。
4.
其實在微處理器,或者CPU運行期間,內存中只有數字,也就是二進制碼,上面所有提到的,包括指令和字元,都是數字形式存在。而我們通常操作時看到的字元,都是用另外的方式(如顯卡)轉換成圖形放到顯示器上的,並不是處理器自帶的功能;單片機要顯示圖形字元,需要另外編程。
而對於輸入,其實也是將輸入的字元轉換成數字才能存儲到內存之中。
❷ 用於單片機燒寫的文件-----.hex文件,如何將.hex文件轉換為容易解讀的語言---C語言。詳細步驟!
用51反匯編工具 V1.0 智能版(這個可以反匯編的)
Hex-Rays插件 v1.0.071108。。。(這個可以反C語言的,貌似是最好的了)
但是反出來的效果不太好。。
因為官方的要付費,所以沒用過,不能給你提供詳細步驟了,不好意思
自己去搜索下,研究下吧 呵呵