組合語言(assembly language)是面向機器的程式語言。在組合語言中,用助記符(memoni)代替操作碼,用位址符號(symbol)或標號(label)代替位址媽。這樣用符號代替機器語盲的二進位製碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。
學習組合語言的第乙個步驟,決定在現有環境中使用什麼型別的組合語言。不同的彙編器有使用不同語法格式編寫程式語句,不同的處理器使用不同的彙編指令集。
主要學習linux下的ia-32和arm彙編
所有處理器都按照製造廠商在晶元內部定義的二進位制**運算元據,這些**定義處理器應該利用程式設計師提供的資料完成什麼功能。這些預置的**稱為指令碼(instruction code)
指令指標(introction pointer)用於幫助處理器了解那些指令碼已經處理過了,以及接下來要處理的是那條指令。
資料指標(data pointer)用於幫助處理器了解記憶體中資料區域的起始位置,這個區域被稱為堆疊(stack)
指令字首可以包含1-4個修改操作碼行為的1位元組字首,按照字首的功能,這些字首被分為4個組,修改操作碼時每個組的字首一次只能使用乙個。
操作碼是ia-32指令格式中唯一必須的部分,它定義由處理器執行的基本功能或者基本任務。
修飾符定義執行的功能中涉及到什麼暫存器和記憶體位置修飾符包含3個單獨的值中:
modr/m位元組
其中modr/m位元組由3個字段的資訊構成
mod欄位和r/m欄位一起使用,用於定義指令中使用的暫存器或者定址模式。在指令中,可能的定址模式有24個,加上8個通用暫存器,共有32個可能的值。
reg/opcode欄位用於允許使用更多的3位進一步定義操作碼的功能或者可以用於定義暫存器值。
r/m欄位用於定義該功能的運算元的另乙個暫存器,或者可以把它個mod欄位組合在一起定義指令的定址模式。
sib位元組
sib也有3個字段的資訊構成
modr/m和sib位元組的組合建立乙個表,可以定義用於訪問資料的眾多可能的暫存器組合和記憶體模式。
位址移位位元組
位址移位位元組用來指定對於modr/m和sib位元組中定義的記憶體位置的偏移量
一些指令從記憶體位置或者處理器暫存器讀取資料,而一些指令碼在其本身內包含資料,這個值經常被用於表示靜態數字值或者記憶體位置。根據資料長度,這個值可以包含1、2、或者4個位元組的資訊。
組合語言使用助記符來表示指令
組合語言程式由三個元件構成:
組合語言學習筆記 一
基礎知識 1.什麼是機器語言?機器語言是機器指令的集合。就是計算機能執行的命令。機器指令就是一列二進位制數字。計算機將之轉變為一列高低電平,使計算機的電子器件受到驅動,進行計算。一列二進位制的數字,人閱讀起來非常不方便。2.什麼是組合語言?組合語言的主體是彙編指令。彙編指令是機器指令便於記憶的書寫格...
組合語言學習筆記(一)
自學王爽老師編寫的組合語言一書有一段時間了,開乙個部落格記錄一下自己這段時間的學習。一.基礎知識 1.機器語言 機器指令的集合。2.組合語言的主體 彙編指令。3.組合語言的組成 彙編指令 偽指令 其他符號。指令和資料是應用上的概念,在記憶體中二者無任何區別。4.儲存單元從0開始編號 位元 bit 位...
組合語言 學習筆記2 彙編程式設計環境
3.段暫存器 4.指令指標暫存器 二 實位址下的儲存器定址方式 三 堆疊儲存技術 四 程式彙編連線與除錯方法 在微機原理與接 術課程中,我學的是16位的彙編,現在總結一下32位的彙編。不過這兩者是一脈相承的,因此會有很多相同的地方。算術邏輯運算後的結果特徵 16位 附加段暫存器es fs和gs 存放...