資料介紹
ARM源程序文件(即源文件)有特定的文件格式和語(yǔ)法規(guī)則,可以使用任意文本編輯器編寫(xiě)程序代碼。一般地,ARM源程序文件名的后綴如表10.1所示。
表10.1 ARM源程序文件名后綴
程 序文 件 名
匯編*.S
引入文件*.INC
C程序*.C
頭文件*.H
在一個(gè)項(xiàng)目中,至少要有一個(gè)匯編源文件,可以有多個(gè)匯編源文件或多個(gè)C程序,或者C程序文件和匯編文件兩者的組合。
ARM匯編語(yǔ)言語(yǔ)句格式如下所示。
{label}{instruction/directive/pseudo-instruction}{;comment}
注意所有指令均不能頂格寫(xiě),要用空格(space)或TAB開(kāi)頭。
其中instruction即ARM指令集中的匯編指令。Directive為ARM匯編器所支持的偽操作。pseudo-instruction為ARM匯編器所支持的偽操作。下面章節(jié)分別介紹偽操作和偽指令。
10.1 ARM匯編器所支持的偽操作
在ARM匯編語(yǔ)言程序里,有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記符不同,沒(méi)有相對(duì)應(yīng)的操作碼,通常稱(chēng)這些特殊指令助記符為偽操作標(biāo)識(shí)符(directive),它們所完成的操作稱(chēng)為偽操作。偽操作在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,這些偽操作僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽操作的使命就完成。
在ARM的匯編程序中,偽操作主要有符號(hào)定義偽操作、數(shù)據(jù)定義偽操作、匯編控制偽操作、宏指令等。
10.1.1 符號(hào)定義(Symbol Definition)偽操作
符號(hào)定義偽操作用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。常見(jiàn)的符號(hào)定義偽操作有如下幾種。
· 用于定義全局變量的GBLA、GBLL和GBLS。
· 用于定義局部變量的LCLA、LCLL和LCLS。
· 用于對(duì)變量賦值的SETA、SETL、SETS。
· 為通用寄存器列表定義名稱(chēng)的RLIST。
· 為協(xié)處理器寄存器定義別名的CN。
· 為協(xié)處理器定義別名的CP。
· 為VFP寄存器定義名稱(chēng)的DN和SN。
· 為FPA浮點(diǎn)指針寄存器定義名稱(chēng)的FPA。
1.全局變量定義偽操作GBLA、GBLL和GBLS
(1)語(yǔ)法格式
GBLA、GBLL和GBLS偽操作用于定義一個(gè)ARM程序中的全局變量并將其初始化。其中:
GBLA偽操作用于定義一個(gè)全局的數(shù)字變量并初始化為0。
GBLL偽操作用于定義一個(gè)全局的邏輯變量并初始化為F(假)。
GBLS偽操作用于定義一個(gè)全局的字符串變量并初始化為空。
由于以上3條偽指令用于定義全局變量,因此在整個(gè)程序范圍內(nèi)變量名必須惟一。
語(yǔ)法格式如下。
《gblx》 《variable》
?、?《gblx》
取值為GBLA、GBLL、GBLS之一。
?、?《variable》
定義的全局變量名,在其作用范圍內(nèi)必須惟一。全局變量的作用范圍為包含該變量的源程序。
?。?)使用說(shuō)明
如果用這些偽操作重新聲明已經(jīng)聲明過(guò)的變量,變量的值將被初始化成后一次聲明語(yǔ)句中的值。
(3)示例
?、?使用偽操作聲明全局變量。
GBLA Test1 ;定義一個(gè)全局的數(shù)字變量,變量名為T(mén)est1
Test1 SETA 0xaa ;將該變量賦值為0xaa
GBLL Test2 ;定義一個(gè)全局的邏輯變量,變量名為T(mén)est2
Test2 SETL {TRUE} ;將該變量賦值為真
GBLS Test3 ;定義一個(gè)全局的字符串變量,變量名為T(mén)est3
Test3 SETS “Testing” ;將該變量賦值為“Testing”
?、?聲明變量objectsize并設(shè)置其值為0xff,為“SPACE”操作做準(zhǔn)備。
GBLA objectsize
Objectsize SETA oxff
SPACE objectsize
③ 下面的例子顯示如何使用匯編命令設(shè)置變量的值。具體做法是使用“-pd”選項(xiàng)。
Armasm -pd “objectsize SETA oxff” -o objectfile sourcefile
2.局部變量定義偽操作LCLA、LCLL和LCLS
?。?)語(yǔ)法格式
LCLA、LCLL和LCLS偽指令用于定義一個(gè)ARM程序中的局部變量并將其初始化。其中:
LCLA偽操作用于定義一個(gè)局部的數(shù)字變量并初始化為0。
LCLL偽操作用于定義一個(gè)局部的邏輯變量并初始化為F(假)。
LCLS偽操作用于定義一個(gè)局部的字符串變量并初始化為空。
以上三條偽操作用于聲明局部變量,在其作用范圍內(nèi)變量名必須惟一。
語(yǔ)法格式如下。
《lclx》 《variable》
① 《gblx》
取值為L(zhǎng)CLA、LCLL、LCLS之一。
?、?《variable》
所定義的局部變量名,在其作用范圍內(nèi)必須惟一。局部變量作用范圍為包含該局部變量的宏。
?。?)使用說(shuō)明
如果用這些偽操作重新聲明已經(jīng)聲明過(guò)的變量,則變量的值將被初始化成后一次聲明語(yǔ)句中的值。
?。?)示例
?、?使用偽操作聲明局部變量。
LCLA Test4 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est4
Test3 SETA 0xaa ;將該變量賦值為0xaa
LCLL Test5 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est5
Test4 SETL {TRUE} ;將該變量賦值為真
LCLS Test6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6 SETS “Testing” ;將該變量賦值為“Testing”
② 下面的例子定義一個(gè)宏,顯示了局部變量的作用范圍。
MACRO ;聲明一個(gè)宏
$label message $a ;宏原型
LCLS err ;聲明局部字符串變量
$label
INFO 0,“err”:CC::STR:$a
MEND ;宏結(jié)束,局部變量不再起作用
3.變量賦值偽操作SETA、SETL和SETS
(1)語(yǔ)法格式
偽指令SETA、SETL和SETS用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
SETA偽操作用于給一個(gè)數(shù)學(xué)變量賦值;
SETL偽操作用于給一個(gè)邏輯變量賦值;
SETS偽操作用于給一個(gè)字符串變量賦值;
語(yǔ)法格式如下。
Variable 《setx》 expr
?、?Variable
變量名為已經(jīng)定義過(guò)的全局變量或局部變量,表達(dá)式為將要賦給變量的值。
② 《setx》
取值為SETA、SETL、SETS之一。
③ expr
數(shù)學(xué)、邏輯或字符串表達(dá)式,也就是將要賦予變量的值。
(2)使用說(shuō)明
在向變量賦值前必須先聲明變量。
也可以在匯編指令中預(yù)定義變量,如:
“Armasm --pd ”objectsize SETA oxff“ --o objectfile sourcefile”
?。?)示例
?、?為預(yù)先定義的變量賦值。
LCLA Test3 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est3
Test3 SETA 0xaa ;將該變量賦值為0xaa
LCLL Test4 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est4
Test4 SETL {TRUE} ;將該變量賦值為真
LCLS Test6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6 SETS “Testing” ;將該變量賦值為“Testing”
?、?使用變量賦值偽操作,定義一些程序相關(guān)內(nèi)容。
GBLA versionNumber
VersionNumber SETA 21
GBLL Debug
Debug SETL {TRUE}
GBLS versionString
VersionString SETS “version 1.0”
4.通用寄存器列表定義偽操作RLIST
(1)語(yǔ)法格式
RLIST偽操作可用于對(duì)一個(gè)通用寄存器列表定義名稱(chēng),使用該偽操作定義的名稱(chēng)可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問(wèn)次序根據(jù)寄存器的編號(hào)由低到高,與列表中的寄存器排列次序無(wú)關(guān)。
語(yǔ)法格式如下。
Name RLIST {list-of-registers}
?、?Name
寄存器列表的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或協(xié)處理器名稱(chēng)相同。
② list-of-registers
通用寄存器列表。列表中的寄存器用“,”隔開(kāi),如果是編號(hào)連續(xù)的通用寄存器可以用“-”指定寄存器范圍。具體用法參見(jiàn)程序示例。
?。?)使用說(shuō)明
在使用ARM匯編編譯器編譯源文件時(shí),可以使用“-checkreg”選項(xiàng)來(lái)指定匯編器進(jìn)行寄存器檢查。如果匯編器檢測(cè)到寄存器列表中的寄存器編號(hào)非升序排列,將給出編譯警告。
?。?)示例
?、?將寄存器列表名稱(chēng)定義為RegList,可在ARM指令LDM/STM中通過(guò)該名稱(chēng)訪問(wèn)寄存器列表。
RegList RLIST {R0-R5,R8,R10} ;
?、?使用“-”在寄存器列表中,指定寄存器范圍。
Context RLIST {r0-r6,r8,r10-r12,r15} ;
5.協(xié)處理器寄存器名稱(chēng)定義偽操作CN
?。?)語(yǔ)法格式
CN偽操作為協(xié)處理器寄存器定義名稱(chēng)。
語(yǔ)法格式如下。
Name CN expr
?、?Name
定義的協(xié)處理器寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或協(xié)處理器名稱(chēng)相同。
② expr
協(xié)處理器寄存器編號(hào)。
?。?)使用說(shuō)明
協(xié)處理器寄存器編號(hào)的數(shù)值范圍為0~15。避免使用不同的名稱(chēng)定義同一物理寄存器。
注意協(xié)處理器寄存器的名稱(chēng)不能被定義為c0~c15,這些名稱(chēng)已經(jīng)被匯編器預(yù)定義。
?。?)示例
將協(xié)處理器寄存器6命名為Power。
Power CN 6
6.協(xié)處理器名稱(chēng)定義偽操作CP
?。?)語(yǔ)法格式
CP偽操作為指定的協(xié)處理器定義名稱(chēng)。
語(yǔ)法格式如下。
Name CP expr
?、?Name
定義的協(xié)處理器名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
② expr
協(xié)處理器編號(hào)。
?。?)使用說(shuō)明
協(xié)處理器編號(hào)范圍為0~15。
使用CP偽操作為協(xié)處理器定義一個(gè)方便記憶的名稱(chēng),可以使程序員更高效地編寫(xiě)代碼。
注意協(xié)處理器寄存器的稱(chēng)不能被定義為p0~p15,這些名稱(chēng)已經(jīng)被匯編器預(yù)定義。
?。?)示例
將協(xié)處理器6命名為Dmu。
Dmu CP 6
7.VFP寄存器名稱(chēng)定義偽操作DN/SN
?。?)語(yǔ)法格式
DN偽操作為雙精度(double-precision)VFP寄存器定義名稱(chēng)。D0~D15是匯編器預(yù)先定義的,用戶不能使用。
SN偽操作為單精度(single-precision)VFP寄存器定義名稱(chēng)。S0~S31是匯編器預(yù)先定義的,用戶不能使用。
語(yǔ)法格式如下。
Name DN expr
Name SN expr
?、?Name
指定的VFP寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
?、?expr
指定VFP寄存器編號(hào)。對(duì)于雙精度寄存器編號(hào)范圍為0~15;對(duì)于單精度寄存器編號(hào)范圍為0~31。
?。?)示例
?、?將VFP雙精度寄存器6定義為energy。
energy DN 6
② 將VFP單精度寄存器16定義為mass。
mass SN 16
8.浮點(diǎn)寄存器名稱(chēng)定義偽操作FN
?。?)語(yǔ)法格式
FN為一個(gè)FPA浮點(diǎn)寄存器定義名稱(chēng)。F0~F7是匯編器預(yù)先定義的,用戶不能使用。
注意FPA的使用在ARM公司新發(fā)布的編譯器RVCT中已不再支持。
語(yǔ)法格式如下。
Name FN expr
① Name
指定的浮點(diǎn)寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
② expr
指定浮點(diǎn)寄存器編號(hào)。編號(hào)范圍為0~7。
?。?)示例
為浮點(diǎn)寄存器6指定名稱(chēng)為Energy。
Energy FN 6
?
表10.1 ARM源程序文件名后綴
程 序文 件 名
匯編*.S
引入文件*.INC
C程序*.C
頭文件*.H
在一個(gè)項(xiàng)目中,至少要有一個(gè)匯編源文件,可以有多個(gè)匯編源文件或多個(gè)C程序,或者C程序文件和匯編文件兩者的組合。
ARM匯編語(yǔ)言語(yǔ)句格式如下所示。
{label}{instruction/directive/pseudo-instruction}{;comment}
注意所有指令均不能頂格寫(xiě),要用空格(space)或TAB開(kāi)頭。
其中instruction即ARM指令集中的匯編指令。Directive為ARM匯編器所支持的偽操作。pseudo-instruction為ARM匯編器所支持的偽操作。下面章節(jié)分別介紹偽操作和偽指令。
10.1 ARM匯編器所支持的偽操作
在ARM匯編語(yǔ)言程序里,有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記符不同,沒(méi)有相對(duì)應(yīng)的操作碼,通常稱(chēng)這些特殊指令助記符為偽操作標(biāo)識(shí)符(directive),它們所完成的操作稱(chēng)為偽操作。偽操作在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,這些偽操作僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽操作的使命就完成。
在ARM的匯編程序中,偽操作主要有符號(hào)定義偽操作、數(shù)據(jù)定義偽操作、匯編控制偽操作、宏指令等。
10.1.1 符號(hào)定義(Symbol Definition)偽操作
符號(hào)定義偽操作用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。常見(jiàn)的符號(hào)定義偽操作有如下幾種。
· 用于定義全局變量的GBLA、GBLL和GBLS。
· 用于定義局部變量的LCLA、LCLL和LCLS。
· 用于對(duì)變量賦值的SETA、SETL、SETS。
· 為通用寄存器列表定義名稱(chēng)的RLIST。
· 為協(xié)處理器寄存器定義別名的CN。
· 為協(xié)處理器定義別名的CP。
· 為VFP寄存器定義名稱(chēng)的DN和SN。
· 為FPA浮點(diǎn)指針寄存器定義名稱(chēng)的FPA。
1.全局變量定義偽操作GBLA、GBLL和GBLS
(1)語(yǔ)法格式
GBLA、GBLL和GBLS偽操作用于定義一個(gè)ARM程序中的全局變量并將其初始化。其中:
GBLA偽操作用于定義一個(gè)全局的數(shù)字變量并初始化為0。
GBLL偽操作用于定義一個(gè)全局的邏輯變量并初始化為F(假)。
GBLS偽操作用于定義一個(gè)全局的字符串變量并初始化為空。
由于以上3條偽指令用于定義全局變量,因此在整個(gè)程序范圍內(nèi)變量名必須惟一。
語(yǔ)法格式如下。
《gblx》 《variable》
?、?《gblx》
取值為GBLA、GBLL、GBLS之一。
?、?《variable》
定義的全局變量名,在其作用范圍內(nèi)必須惟一。全局變量的作用范圍為包含該變量的源程序。
?。?)使用說(shuō)明
如果用這些偽操作重新聲明已經(jīng)聲明過(guò)的變量,變量的值將被初始化成后一次聲明語(yǔ)句中的值。
(3)示例
?、?使用偽操作聲明全局變量。
GBLA Test1 ;定義一個(gè)全局的數(shù)字變量,變量名為T(mén)est1
Test1 SETA 0xaa ;將該變量賦值為0xaa
GBLL Test2 ;定義一個(gè)全局的邏輯變量,變量名為T(mén)est2
Test2 SETL {TRUE} ;將該變量賦值為真
GBLS Test3 ;定義一個(gè)全局的字符串變量,變量名為T(mén)est3
Test3 SETS “Testing” ;將該變量賦值為“Testing”
?、?聲明變量objectsize并設(shè)置其值為0xff,為“SPACE”操作做準(zhǔn)備。
GBLA objectsize
Objectsize SETA oxff
SPACE objectsize
③ 下面的例子顯示如何使用匯編命令設(shè)置變量的值。具體做法是使用“-pd”選項(xiàng)。
Armasm -pd “objectsize SETA oxff” -o objectfile sourcefile
2.局部變量定義偽操作LCLA、LCLL和LCLS
?。?)語(yǔ)法格式
LCLA、LCLL和LCLS偽指令用于定義一個(gè)ARM程序中的局部變量并將其初始化。其中:
LCLA偽操作用于定義一個(gè)局部的數(shù)字變量并初始化為0。
LCLL偽操作用于定義一個(gè)局部的邏輯變量并初始化為F(假)。
LCLS偽操作用于定義一個(gè)局部的字符串變量并初始化為空。
以上三條偽操作用于聲明局部變量,在其作用范圍內(nèi)變量名必須惟一。
語(yǔ)法格式如下。
《lclx》 《variable》
① 《gblx》
取值為L(zhǎng)CLA、LCLL、LCLS之一。
?、?《variable》
所定義的局部變量名,在其作用范圍內(nèi)必須惟一。局部變量作用范圍為包含該局部變量的宏。
?。?)使用說(shuō)明
如果用這些偽操作重新聲明已經(jīng)聲明過(guò)的變量,則變量的值將被初始化成后一次聲明語(yǔ)句中的值。
?。?)示例
?、?使用偽操作聲明局部變量。
LCLA Test4 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est4
Test3 SETA 0xaa ;將該變量賦值為0xaa
LCLL Test5 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est5
Test4 SETL {TRUE} ;將該變量賦值為真
LCLS Test6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6 SETS “Testing” ;將該變量賦值為“Testing”
② 下面的例子定義一個(gè)宏,顯示了局部變量的作用范圍。
MACRO ;聲明一個(gè)宏
$label message $a ;宏原型
LCLS err ;聲明局部字符串變量
$label
INFO 0,“err”:CC::STR:$a
MEND ;宏結(jié)束,局部變量不再起作用
3.變量賦值偽操作SETA、SETL和SETS
(1)語(yǔ)法格式
偽指令SETA、SETL和SETS用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
SETA偽操作用于給一個(gè)數(shù)學(xué)變量賦值;
SETL偽操作用于給一個(gè)邏輯變量賦值;
SETS偽操作用于給一個(gè)字符串變量賦值;
語(yǔ)法格式如下。
Variable 《setx》 expr
?、?Variable
變量名為已經(jīng)定義過(guò)的全局變量或局部變量,表達(dá)式為將要賦給變量的值。
② 《setx》
取值為SETA、SETL、SETS之一。
③ expr
數(shù)學(xué)、邏輯或字符串表達(dá)式,也就是將要賦予變量的值。
(2)使用說(shuō)明
在向變量賦值前必須先聲明變量。
也可以在匯編指令中預(yù)定義變量,如:
“Armasm --pd ”objectsize SETA oxff“ --o objectfile sourcefile”
?。?)示例
?、?為預(yù)先定義的變量賦值。
LCLA Test3 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est3
Test3 SETA 0xaa ;將該變量賦值為0xaa
LCLL Test4 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est4
Test4 SETL {TRUE} ;將該變量賦值為真
LCLS Test6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6 SETS “Testing” ;將該變量賦值為“Testing”
?、?使用變量賦值偽操作,定義一些程序相關(guān)內(nèi)容。
GBLA versionNumber
VersionNumber SETA 21
GBLL Debug
Debug SETL {TRUE}
GBLS versionString
VersionString SETS “version 1.0”
4.通用寄存器列表定義偽操作RLIST
(1)語(yǔ)法格式
RLIST偽操作可用于對(duì)一個(gè)通用寄存器列表定義名稱(chēng),使用該偽操作定義的名稱(chēng)可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問(wèn)次序根據(jù)寄存器的編號(hào)由低到高,與列表中的寄存器排列次序無(wú)關(guān)。
語(yǔ)法格式如下。
Name RLIST {list-of-registers}
?、?Name
寄存器列表的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或協(xié)處理器名稱(chēng)相同。
② list-of-registers
通用寄存器列表。列表中的寄存器用“,”隔開(kāi),如果是編號(hào)連續(xù)的通用寄存器可以用“-”指定寄存器范圍。具體用法參見(jiàn)程序示例。
?。?)使用說(shuō)明
在使用ARM匯編編譯器編譯源文件時(shí),可以使用“-checkreg”選項(xiàng)來(lái)指定匯編器進(jìn)行寄存器檢查。如果匯編器檢測(cè)到寄存器列表中的寄存器編號(hào)非升序排列,將給出編譯警告。
?。?)示例
?、?將寄存器列表名稱(chēng)定義為RegList,可在ARM指令LDM/STM中通過(guò)該名稱(chēng)訪問(wèn)寄存器列表。
RegList RLIST {R0-R5,R8,R10} ;
?、?使用“-”在寄存器列表中,指定寄存器范圍。
Context RLIST {r0-r6,r8,r10-r12,r15} ;
5.協(xié)處理器寄存器名稱(chēng)定義偽操作CN
?。?)語(yǔ)法格式
CN偽操作為協(xié)處理器寄存器定義名稱(chēng)。
語(yǔ)法格式如下。
Name CN expr
?、?Name
定義的協(xié)處理器寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或協(xié)處理器名稱(chēng)相同。
② expr
協(xié)處理器寄存器編號(hào)。
?。?)使用說(shuō)明
協(xié)處理器寄存器編號(hào)的數(shù)值范圍為0~15。避免使用不同的名稱(chēng)定義同一物理寄存器。
注意協(xié)處理器寄存器的名稱(chēng)不能被定義為c0~c15,這些名稱(chēng)已經(jīng)被匯編器預(yù)定義。
?。?)示例
將協(xié)處理器寄存器6命名為Power。
Power CN 6
6.協(xié)處理器名稱(chēng)定義偽操作CP
?。?)語(yǔ)法格式
CP偽操作為指定的協(xié)處理器定義名稱(chēng)。
語(yǔ)法格式如下。
Name CP expr
?、?Name
定義的協(xié)處理器名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
② expr
協(xié)處理器編號(hào)。
?。?)使用說(shuō)明
協(xié)處理器編號(hào)范圍為0~15。
使用CP偽操作為協(xié)處理器定義一個(gè)方便記憶的名稱(chēng),可以使程序員更高效地編寫(xiě)代碼。
注意協(xié)處理器寄存器的稱(chēng)不能被定義為p0~p15,這些名稱(chēng)已經(jīng)被匯編器預(yù)定義。
?。?)示例
將協(xié)處理器6命名為Dmu。
Dmu CP 6
7.VFP寄存器名稱(chēng)定義偽操作DN/SN
?。?)語(yǔ)法格式
DN偽操作為雙精度(double-precision)VFP寄存器定義名稱(chēng)。D0~D15是匯編器預(yù)先定義的,用戶不能使用。
SN偽操作為單精度(single-precision)VFP寄存器定義名稱(chēng)。S0~S31是匯編器預(yù)先定義的,用戶不能使用。
語(yǔ)法格式如下。
Name DN expr
Name SN expr
?、?Name
指定的VFP寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
?、?expr
指定VFP寄存器編號(hào)。對(duì)于雙精度寄存器編號(hào)范圍為0~15;對(duì)于單精度寄存器編號(hào)范圍為0~31。
?。?)示例
?、?將VFP雙精度寄存器6定義為energy。
energy DN 6
② 將VFP單精度寄存器16定義為mass。
mass SN 16
8.浮點(diǎn)寄存器名稱(chēng)定義偽操作FN
?。?)語(yǔ)法格式
FN為一個(gè)FPA浮點(diǎn)寄存器定義名稱(chēng)。F0~F7是匯編器預(yù)先定義的,用戶不能使用。
注意FPA的使用在ARM公司新發(fā)布的編譯器RVCT中已不再支持。
語(yǔ)法格式如下。
Name FN expr
① Name
指定的浮點(diǎn)寄存器的名稱(chēng)。
注意該名稱(chēng)不能和已經(jīng)定義寄存器或其他協(xié)處理器名稱(chēng)相同。
② expr
指定浮點(diǎn)寄存器編號(hào)。編號(hào)范圍為0~7。
?。?)示例
為浮點(diǎn)寄存器6指定名稱(chēng)為Energy。
Energy FN 6
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- MPASM匯編器至MPLAB XC8 PIC匯編器移植指南
- ARM匯編語(yǔ)言的源程序免費(fèi)下載 16次下載
- 51匯編器實(shí)現(xiàn)過(guò)程 5次下載
- masm版本20125匯編器軟件下載 0次下載
- ARM匯編編譯器的使用 5次下載
- ARM匯編程序設(shè)計(jì)之匯編語(yǔ)言文件格式 7次下載
- ARM匯編器所支持的偽指令淺析 2次下載
- ARM IAR匯編器參考指南 16次下載
- 宏匯編器及相關(guān)應(yīng)用程序 51次下載
- 源碼公開(kāi)的MCS-51單片機(jī)的宏匯編器
- 開(kāi)放式匯編器系統(tǒng)的設(shè)計(jì)
- PIC全系列匯編器(MPASM)(軟件)
- Linux 下51 匯編器的設(shè)計(jì)及實(shí)現(xiàn)
- Linux下51匯編器的設(shè)計(jì)及實(shí)現(xiàn)
- 開(kāi)放式匯編器系統(tǒng)的設(shè)計(jì)
- 講講ARM指令集格式以及常用的ARM匯編指令 4056次閱讀
- 集成開(kāi)發(fā)環(huán)境STM32CubeIDE下查看匯編代碼的相關(guān)配置操作 3689次閱讀
- 零基礎(chǔ)學(xué)ARM:匯編偽指令、lds詳解 2935次閱讀
- 米爾科技Keil C51 官方開(kāi)發(fā)工具介紹 3379次閱讀
- 米爾科技Keil C166 開(kāi)發(fā)工具介紹 1993次閱讀
- 米爾科技Keil C251 開(kāi)發(fā)工具 介紹 4103次閱讀
- 米爾科技ARM RVDS 4.1 官方開(kāi)發(fā)工具介紹 2459次閱讀
- ARM體系結(jié)構(gòu)所支持的異常和具體含義 3987次閱讀
- ARM架構(gòu)和總線協(xié)議如何支持Linux原子操作? 6744次閱讀
- 什么叫arm架構(gòu)?ARM的技術(shù)實(shí)現(xiàn) 2w次閱讀
- 反匯編器軟件設(shè)計(jì)分析和具體實(shí)現(xiàn) 1385次閱讀
- 學(xué)習(xí)ARM + Linux之前要講解用ADS或RealViewMDK去調(diào)試ARM開(kāi)發(fā)板的原因 5923次閱讀
- 分享一些單片機(jī)匯編語(yǔ)言常見(jiàn)的語(yǔ)法和程序錯(cuò)誤 7944次閱讀
- arm的匯編指令精選合輯 2094次閱讀
- 單片機(jī)編程之匯編語(yǔ)言基礎(chǔ)-常用指令和程序模式 1.5w次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費(fèi)
- 89天練會(huì)電子電路識(shí)圖
- 5.91 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專(zhuān)業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論