彙編語言

  • 和其他語言不一樣,彙編語言沒有統一的編譯器,彙編語言的格式隨着編譯的不同而不同,因此瞭解什麼是彙編語言是學習彙編語言的第一道門檻。
  • 首先,我們需要知道彙編語言爲什麼出現,爲了回答這個問題,我們就不得不聊一聊處理器指令。

處理器指令:

在計算機內部,處理器基於芯片製造商內置於芯片內的二進制代碼來處理數據,這些代碼定義了處理器操作數據的行爲。這些代碼通常被叫做指令編碼,不同的處理器,指令編碼也一般不一樣。

指令編碼:

處理器通過不斷讀取內存中的指令編碼來運行,指令編碼包含一個或多個字節的數據用來完成不同的任務,指令編碼用到的數據也被處理器讀取到內存,本質上指令編碼和相關的數據對處理器來說沒有什麼不同。

爲了區分指令編碼和數據,我們用指針來區分,指令指針指向要操作的對象,數據指針指向相關的數據。

指令指針總是指向當前要執行的指令。

數據指針用來標識當前內存中程序數據開始的地方,這個區域也稱爲棧。

指令編碼的格式:

這裏我們以當前使用比較廣泛的IA-32指令編碼來說明,指令編碼主要包含4個部分:

  • 指令前綴(可選)

  • 操作碼

  • 修飾符(可選)

  • 數據 (可選)

操作碼:

從上面可以看出指令編碼中唯一必須的元素就是操作碼,他的主要功能是用來完成不同的任務。

指令前綴:

指令前綴的主要功能是修飾操作碼,按功能主要分爲4種類型:

鎖和重複前綴

段重載和分支預測前綴

操作數size重載前綴

地址size重載前綴

修飾符:

一些操作碼需要額外的修飾符來指定寄存器或內存的位置

數據:

操作碼操作的對象

彙編語言:

彙編語言主要包括3部分:

  • 助記符
  • 數據區
  • 指令

助記符

彙編語言定義的運算符號

數據區

彙編語言主要使用兩種方式來定義數據:

  • 內存中
  • 棧中
棧這種定義數據的方式比較簡單,主要通過運算符直接操作
內存定義的方法主要包含兩個部分:
  • 標籤
  • 數據類型
testvalue:
	.long 150
message:
	.ascii "this is a test message"
pi:
	.float 3.14159

指令

最終要的指令是 .section 被用來定義段,彙編語言中最重要的3個段:

  • 數據段
  • 堆棧段
  • 文本段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章