彙編語言基礎知識篇章一,預備知識

彙編大多是指彙編語言,彙編程序。把彙編語言翻譯成機器語言的過程稱為彙編。在彙編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了彙編語言。於是彙編語言亦稱為符號語言。用匯編語言編寫的程序,機器不能直接識別,要由一種程序將彙編語言翻譯成機器語言,這種起翻譯作用的程序叫彙編程序,彙編程序是系統軟件中語言處理的系統軟件。

隨著現代軟件系統越來越龐大複雜,大量經過了封裝的高級語言如C/C++,Pascal/Object Pascal也應運而生。這些新的語言使得程序員在開發過程中能夠更簡單,更有效率,使軟件開發人員得以應付快速的軟件開發的要求。而彙編語言由於其複雜性使得其適用領域逐步減小。但這並不意味著彙編已無用武之地。由於彙編更接近機器語言,能夠直接對硬件進行操作,生成的程序與其他的語言相比具有更高的運行速度,佔用更小的內存,因此在一些對於時效性要求很高的程序、許多大型程序的核心模塊以及工業控制方面大量應用。

此外,雖然有眾多編程語言可供選擇,但彙編依然是計算機科學類專業的領域,以讓我們深入瞭解計算機的運行原理。

彙編語言基礎知識篇章一,預備知識

編程工程概念

1.機器碼,又稱機械碼。當你用16進制編輯器打開、編輯exe等可執行文件時你會看到許許多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F組成的數碼,這些數碼就是機器碼。修改程序時,必須通過修改機器碼來修改exe等可執行文件。所以,能夠修改16進制機器碼的軟件就是我們的必備工具,拿進隨身藥箱中。機器碼究竟有什麼用處呢?我們來舉個例子,在彙編語言中:NOP這條指令很簡單也很常用。在編譯的時候,編譯器會掃描整個源代碼。由於計算機只能識別二進制的0和1,所以,源代碼"NOP"是無法直接運行的。當編譯器遇到"NOP"的時候,為了生成讓計算機能運行和識別的"東西",就會以十六進制數"90"來代替它。在這裡,"90"就是"機器碼",而"NOP"則是"助記符(mnemonic)"。我們平時用高級語言編寫的源代碼編譯成exe文件時,都會被翻譯成機器可識別的二進制數0和1,從而操控程序的執行。所以,修改程序時必須通過修改機器碼來實現exe等可執行文件的修改.也就是說,十六進制編輯器是修改程序必不可少的工具軟件。字符在機器裡必須用二進制數來表示,它是通過ASCII碼來實現的。ASCII碼是美國信息交換標準碼(American Standard Code for Information Interchange)。這個編碼標準的主要作用是使計算機能通過一個八位的存儲單元--"字節(byte)"來進行信息交換。

下面的ASCII碼和對應的字母數字是比較常用的,一定要牢記在心。

a,b,c,d,e-61,62,63,64,65(十六進制)->97,98,99,100,101(十進制)

A,B,C,D,E-41,42,43,44,45(十六進制)->65,66,67,68,69(十進制)

1,2,3,4,5-31,32,33,34,35(十六進制)->49,50,51,52,53(十進制)

彙編語言基礎知識篇章一,預備知識

公鑰加密

2. 16進制編輯器。16進制編輯器是編輯、修改exe等可執行文件的軟件。常用的有UltraEdit、WinHex等。由於這兩款軟件非常有名,網上有很多介紹它們使用的文章,作為作業,自己去搜索,學學它們的用法。

彙編語言基礎知識篇章一,預備知識

工作的商務人士

3. 修改指令時常用匯編指令如下:

cmp a,b 比較a與bmov a,b 把b的值送給a,使a=bret 返回主程序nop 無作用,英文"no operation"的簡寫,意思是"do nothing"(機器碼90) (解釋:ultraedit打開編輯exe文件時你看到90,等同於彙編語句nop)call 調用子程序,子程序以ret結尾,返回值保存在EAX中je 或jz 若相等則跳(機器碼74 或0F84)jne或jnz 若不相等則跳(機器碼75或0F85)jmp 無條件跳(機器碼EB)jb 若小於則跳ja 若大於則跳jg 若大於則跳jge 若大於等於則跳jl 若小於則跳jle 若小於等於則跳pop xx xx出棧push xx xx壓棧,詳細的指令請繼續關注萃乎。

彙編語言基礎知識篇章一,預備知識

編程和編碼概念

4. 機器碼常見修改指令,參看表1

彙編語言基礎知識篇章一,預備知識


分享到:


相關文章: