ADS組合語言2

2021-06-01 03:00:28 字數 4095 閱讀 4635

4.2  組合語言的語句格式

arm(thumb)組合語言的語句格式為:

在組合語言程式設計中,每一條指令的助記符可以全部用大寫、或全部用小寫,但不用許在一條指令中大、小寫混用。

同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用「/」表示下一行與本行為同一條語句。

4.2.1  在組合語言程式中常用的符號

在組合語言程式設計中,經常使用各種符號代替位址、變數和常量等,以增加程式的可讀性。儘管符號的命名由程式設計者決定,但並不是任意的,必須遵循以下的約定:

- 符號區分大小寫,同名的大、小寫符號會被編譯器認為是兩個不同的符號。

- 符號在其作用範圍內必須唯一。

- 自定義的符號名不能與系統的保留字相同。

- 符號名不應與指令或偽指令同名。

1、 程式中的變數

程式中的變數是指其值在程式的執行過程中可以改變的量。arm(thumb)匯程式設計序所支援的變數有數字變數、邏輯變數和字串變數。

數字變數用於在程式的執行中儲存數字值,但注意數字值的大小不應超出數字變數所能表示的範圍。

邏輯變數用於在程式的執行中儲存邏輯值,邏輯值只有兩種取值情況:真或假。

字串變數用於在程式的執行中儲存乙個字串,但注意字串的長度不應超出字串變數所能表示的範圍。

在arm(thumb)組合語言程式設計中,可使用gbla、gbll、gbls偽指令宣告全域性變數,使用lcla、lcll、lcls偽指令宣告區域性變數,並可使用seta、setl和sets對其進行初始化。

2、 程式中的常量

程式中的常量是指其值在程式的執行過程中不能被改變的量。arm(thumb)匯程式設計序所支援的常量有數字常量、邏輯常量和字串常量。

數字常量一般為32位的整數,當作為無符號數時,其取值範圍為0~232-1,當作為有符號數時,其取值範圍為-231~231-1。

邏輯常量只有兩種取值情況:真或假。

字串常量為乙個固定的字串,一般用於程式執行時的資訊提示。

3、 程式中的變數代換

程式中的變數可通過代換操作取得乙個常量。代換操作符為「$」。

如果在數字變數前面有乙個代換操作符「$」,編譯器會將該數字變數的值轉換為十六進製制的字串,並將該十六進製制的字串代換「$」後的數字變數。

如果在邏輯變數前面有乙個代換操作符「$」,編譯器會將該邏輯變數代換為它的取值(真或假)。

如果在字串變數前面有乙個代換操作符「$」,編譯器會將該字串變數的值代換「$」後的字串變數。

使用示例:

lcls s1       ;定義區域性字串變數s1和s2

lcls s2  

s1  sets  「test!」

s2  sets  「this is a $s1」  ;字串變數s2的值為「this is a test!」

4.2.2  組合語言程式中的表示式和運算子

在組合語言程式設計中,也經常使用各種表示式,表示式一般由變數、常量、運算子和括號構成。常用的表示式有數字表示式、邏輯表示式和字串表示式,其運算次序遵循如下的優先順序:

- 優先順序相同的雙目運算子的運算順序為從左到右。

- 相鄰的單目運算子的運算順序為從右到左,且單目運算子的優先順序高於其他運算子。

- 括號運算子的優先順序最高。

1、 數字表示式及運算子

數字表示式一般由數字常量、數字變數、數字運算子和括號構成。與數字表示式相關的運算子如下:

- 「+」、「-」、「×」、「/」 及「mod」算術運算子

以上的算術運算子分別代表加、減、乘、除和取餘數運算。例如,以x和y表示兩個數字表示式,則:

x+y   表示x與y的和。

x-y   表示x與y的差。

x×y   表示x與y的乘積。

x/y    表示x除以y的商。

x:mod:y  表示x除以y的餘數。

- 「rol」、「ror」、「shl」及「shr」移位運算子

以x和y表示兩個數字表示式,以上的移位運算子代表的運算如下:

x:rol:y  表示將x迴圈左移y位。

x:ror:y  表示將x迴圈右移y位。

x:shl:y  表示將x左移y位。

x:shr:y  表示將x右移y位。

- 「and」、「or」、「not」及「eor」按位邏輯運算子

以x和y表示兩個數字表示式,以上的按位邏輯運算子代表的運算如下:

x:and:y  表示將x和y按位作邏輯與的操作。

x:or:y  表示將x和y按位作邏輯或的操作。

:not:y  表示將y按位作邏輯非的操作。

x:eor:y  表示將x和y按位作邏輯異或的操作。

2、 邏輯表示式及運算子

邏輯表示式一般由邏輯量、邏輯運算子和括號構成,其表示式的運算結果為真或假。與邏輯表示式相關的運算子如下:

- 「=」、「>」、「<」、「>=」、「<= 」、「/=」、「 <>」 運算子

以x和y表示兩個邏輯表示式,以上的運算子代表的運算如下:

x = y   表示x等於y。

x > y   表示x大於y。

x < y   表示x小於y。

x >= y   表示x大於等於y。

x <= y   表示x小於等於y。

x /= y   表示x不等於y。

x <> y   表示x不等於y。

- 「land」、「lor」、「lnot」及「leor」運算子

以x和y表示兩個邏輯表示式,以上的邏輯運算子代表的運算如下:

x:land:y 表示將x和y 作邏輯與的操作。

x:lor:y  表示將x和y作邏輯或的操作。

:lnot:y  表示將y作邏輯非的操作。

x:leor:y 表示將x和y作邏輯異或的操作。

3、 字串表示式及運算子

字串表示式一般由字串常量、字串變數、運算子和括號構成。編譯器所支援的字串最大長度為512位元組。常用的與字串表示式相關的運算子如下:

- len運算子

len運算子返回字串的長度(字元數),以x表示字串表示式,其語法格式如下:

:len:x

- chr運算子

chr運算子將0~255之間的整數轉換為乙個字元,以m表示某乙個整數,其語法格式如下:

:chr:m

- str運算子

str運算子將將乙個數字表示式或邏輯表示式轉換為乙個字串。對於數字表示式,str運算子將其轉換為乙個以十六進製制組成的字串;對於邏輯表示式,str運算子將其轉換為字串t或f,其語法格式如下:

:str:x

其中,x為乙個數字表示式或邏輯表示式。

- left運算子

left運算子返回某個字串左端的乙個子串,其語法格式如下:

x:left:y

其中:x為源字串,y為乙個整數,表示要返回的字元個數。

- right運算子

與left運算子相對應,right運算子返回某個字串右端的乙個子串,其語法格式如下:

x:right:y

其中:x為源字串,y為乙個整數,表示要返回的字元個數。

- cc運算子

cc運算子用於將兩個字串連線成乙個字串,其語法格式如下:

x:cc:y

其中:x為源字串1,y為源字串2,cc運算子將y連線到x的後面。

4、 與暫存器和程式計數器(pc)相關的表示式及運算子

- base運算子

base運算子返回基於暫存器的表示式中暫存器的編號,其語法格式如下:

:base:x

其中,x為與暫存器相關的表示式。

- index運算子

index運算子返回基於暫存器的表示式中相對於其基址暫存器的偏移量,其語法格式如下:

:index:x

其中,x為與暫存器相關的表示式。

5、 其他常用運算子

- ?運算子

?運算子返回某**行所生成的可執行**的長度,例如:

?x 返回定義符號x的**行所生成的可執行**的位元組數。

- def運算子

def運算子判斷是否定義某個符號,例如:

:def:x

如果符號x已經定義,則結果為真,否則為假。

《組合語言》習題2

組合語言程式設計 測試題 一 填空 15分 1 計算機語言指令包括 2 資料暫存器組包括ax,bx,cx,dx 其中ax稱 bx稱為,cx 稱,dx 稱。四個段暫存器分別是,ip 暫存器中存放的是。4 資料的傳送的基本單位分為三種位元組 字 雙字,其中乙個整數位元組的表示範圍是 乙個整數字的表示範圍...

組合語言 手記2

彙編由以下3類組成 1 彙編指令 機器碼的助記符 2 偽指令 由編譯器執行 3 其他符號 由編譯器識別 組合語言的核心是彙編指令,它決定了組合語言的特性 cpu是計算機的核心部件,它控制整個計算機的運作並進行運算,要想讓乙個cpu工作,就必須提供指令和資料。指令和資料在儲存器中存放,也就是平時所說的...

組合語言 手記2

彙編由以下3類組成 1 彙編指令 機器碼的助記符 2 偽指令 由編譯器執行 3 其他符號 由編譯器識別 組合語言的核心是彙編指令,它決定了組合語言的特性 cpu是計算機的核心部件,它控制整個計算機的運作並進行運算,要想讓乙個cpu工作,就必須提供指令和資料。指令和資料在儲存器中存放,也就是平時所說的...