2014-05-08 42 views
0

我從字面上看處處可見,而且人們可以教會我如何在二進制代碼中編寫單個數字,字母,符號等等,但實際上我沒有在語法上看到它會顯示爲什麼。諸如加法,減法,拼出單詞或其他類似的東西。每個1和0的組合之間是否存在空格,正數和負數的組合,還是逐行?這似乎是一件不應該很難找到答案的東西。腳本中的二進制文件是什麼樣的?

回答

1

在大多數現代機器中,字符數據被管理爲8位字節。 (在某些情況下,字符是16位或32位,但在這個節骨眼上只是混亂。)

如果你看一下ASCII table你會看到基本的「拉丁」字符集:

enter image description here

單個字符由8位字節標識,其中(對於基本ASCII字符)高位爲零。因此,值在0到127之間或在00和7F之間(或二進制00000000和01111111之間)運行。

我應該在這裏注意到,前32個代碼是「控制字符」的非打印代碼。例如,十進制10或十六進制0A的代碼是「換行」代碼,它是C和Java中稱爲「換行符」的代碼。 00代碼是下面提到的「NUL」字符。

句子中的字符按照連續的字節順序排列在內存中。因此,「Hello」將是十六進制的48 65 6C 6C 6F。對於C和C++,簡單的「C字符串」總是以全零字節(圖表中的「NUL」字符)結尾。對於Java而言,字符串的長度在別的地方是一個單獨的變量。一些字符編碼方案將該字符串的長度「前綴」爲8位或16位值。

正如您在上面看到的,ASCII字符集包括非字母字符,如!+?。對於「非拉丁文」字符(例如字符£Ç),有幾種技術之一用於「擴展」字符集。有時,那些值爲128到255的8位字符被用來表示給定語言的非拉丁字符(儘管必須知道哪種語言才能知道表示哪組字符)。在其他情況下,使用「Unicode」,使用16位或32位字符而不是8位字符,以便幾乎每種語言中的每個字符都有其自己的唯一代碼。

0

Binary只是一種表示數字的不同方式。它的基數爲2,其中十進制數爲10,十六進制數爲16,當人們提到「二進制代碼」時,通常意味着編譯的程序代碼,也就是機器代碼。

Machine code只是二進制,因爲它在低級別存儲爲一系列二進制數字(位)。但是當任何人看着它時,他們都會用十六進制編輯器來查看它,這比讀取二進制文件要容易得多。

更簡單的方法是將其反彙編爲彙編語言,彙編語言用它們代表的指令名稱替換數字。

下面是來自維基百科a good example,這也解釋瞭如何將這些二進制數:

10110000 01100001 

可以在十六進制表示爲

B0 61 

可以翻譯成本屆大會:

MOV AL, 61h  ; Load AL with 97 decimal (61 hex) 
相關問題