電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>ARM>ARM匯編程序設(shè)計(jì)之匯編語言文件格式

ARM匯編程序設(shè)計(jì)之匯編語言文件格式

2017-10-19 | rar | 0.4 MB | 次下載 | 1積分

資料介紹

 10.3.1 ARM匯編語言語句格式
  ARM(Thumb)匯編語法語句格式如下所示。
  {symbol}{instruction|directive|pseudo-instruction}{;comment}
 ?、?symbol
  程序符號。通常為地址標(biāo)號(label)。在指令和偽指令中通常為標(biāo)號;在一些偽操作中符號可能是變量或常數(shù)。詳見ARM偽操作一節(jié)。
  在書寫中,符號必須從一行的行頭開始,前面不能包含空格或制表符tab。
 ?、?instruction
  ARM或Thumb指令。
 ?、?directive
  偽操作。詳見ARM偽操作一節(jié)。
  ④ pseudo-instruction
  ARM偽指令。詳見ARM偽指令一節(jié)。
 ?、?comment
  語句注釋。注釋以分號(;)開頭,注釋的結(jié)尾即為一行的結(jié)尾。為了程序清晰易讀,注釋也可以單獨(dú)占用一行。匯編器在對程序進(jìn)行匯編時忽略注釋。
  在匯編語言程序設(shè)計(jì)中,每一條指令的助記符可以全部用大寫或全部用小寫,但不允許在一條指令中大、小寫混用。
  同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用“\”表示下一行與本行為同一條語句。
  10.3.2 ARM匯編語言中的符號
  在匯編語言程序設(shè)計(jì)中,經(jīng)常使用各種符號代替地址(addresses)、變量(variables)和常量(constants)等,以增加程序的靈活性和可讀性。盡管符號的命名由編程者決定,但并不是任意的,必須遵循以下的約定。
 ?。?)符號區(qū)分大小寫,同名的大、小寫符號會被編譯器認(rèn)為是兩個不同的符號。
 ?。?)符號在其作用范圍內(nèi)必須惟一。
 ?。?)自定義的符號名不能與系統(tǒng)的保留字相同。其中保留字包括系統(tǒng)內(nèi)部變量
 ?。╞uilt in variable)和系統(tǒng)預(yù)定義(predefined symbol)的符號。
 ?。?)符號名不應(yīng)與指令或偽指令同名。如果要使用和指令或偽指令同名的符號要用雙斜杠“||”將其括起來,如“||ASSERT||”。
  注意雖然符號被雙斜杠括起來,但雙斜杠并非符號名的一部分。
  (5)局部標(biāo)號以數(shù)字開頭,其他的符號都不能以數(shù)字開頭。
  1.變量(variable)
  程序中的變量是指其值在程序的運(yùn)行過程中可以改變的量。ARM(Thumb)匯編程序所支持的變量有三種。
  · 數(shù)字變量(numeric)。
  · 邏輯變量(logical)。
  · 字符串變量(string)。
  數(shù)字變量用于在程序的運(yùn)行中保存數(shù)字值,但注意數(shù)字值的大小不應(yīng)超出數(shù)字變量所能表示的范圍。
  邏輯變量用于在程序的運(yùn)行中保存邏輯值,邏輯值只有兩種取值情況:真({TURE})和假({FALSE})。
  字符串變量用于在程序的運(yùn)行中保存一個字符串,注意字符串的長度不應(yīng)超出字符串變量所能表示的范圍。
  在ARM(Thumb)匯編語言程序設(shè)計(jì)中,可使用GBLA、GBLL、GBLS偽指令聲明全局變量,使用LCLA、LCLL、LCLS偽指令聲明局部變量,可使用SETA、SETL和SETS對其進(jìn)行初始化。
  2.常量(constants)
  程序中的常量是指其值在程序的運(yùn)行過程中不能被改變的量。ARM(Thumb)匯編程序所支持的常量有數(shù)字常量、邏輯常量和字符串常量。
  數(shù)字常量一般為32位的整數(shù),當(dāng)作為無符號數(shù)時,其取值范圍為0~232?1,當(dāng)作為有符號數(shù)時,其取值范圍為?231~231?1。匯編器認(rèn)為?n和232?n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》?1”,對匯編器來說取值為“假({FLASE})”。
  邏輯常量只有兩種取值情況,真或假。
  字符串常量為一個固定的字符串,一般用于程序運(yùn)行時的信息提示。
  3.程序中的變量代換
  匯編語言中的變量可以作為作為一整行出現(xiàn)在匯編程序中,也可以作為行的一部分使用。
  如果在數(shù)字變量前面有一個代換操作符“$”,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并將該十六進(jìn)制的字符串代換“$”后的數(shù)字變量。
  如果在邏輯變量前面有一個代換操作符“$”,編譯器會將該邏輯變量代換為它的取值(真或假)。
  如果在字符串變量前面有一個代換操作符“$”,編譯器會將該字符串變量的值代換“$”后的字符串變量。
  如果程序中需要字符“$”,則可以用“$$”來表示。匯編器將不進(jìn)行變量替換,而是將“$$”作為“$”。
  下面的兩個例子說明了變量替換的過程。
  ; 直接的變量替換
  GBLS add4ff
  ;
  add4ff SETS “ADD r4,r4,#0xFF” ;給變量add4ff賦值
  $add4ff.00 ;引用變量
  ; codes
  ADD r4,r4,#0xFF00
  ; 有特殊符號的變量替換
  GBLS s1
  GBLS s2
  GBLS fixup
  GBLA count
  ;
  count SETA 14
  s1 SETS “a$$b$count” ;s1 =a$b0000000E
  s2 SETS “abc”
  fixup SETS “|xy$s2.z|” ;fixup= |xyabcz|
  |C$$code| MOV r4,#16 ;label= C$$code
  4.程序標(biāo)號(label)
  在ARM匯編中,標(biāo)號代表一個地址,段內(nèi)標(biāo)號的地址在匯編時確定,而段外標(biāo)號地址值在鏈接時確定。根據(jù)標(biāo)號的生成方式,程序標(biāo)號分為以下三種。
  · 程序相關(guān)標(biāo)號(Program-relative labels)。
  · 寄存器相關(guān)標(biāo)號(Register-relative labels)。
  · 絕對地址(Absolute address)。
 ?。?)程序相關(guān)標(biāo)號
  程序相關(guān)標(biāo)號指位于目標(biāo)指令前的標(biāo)號或程序中的數(shù)據(jù)定義偽操作前的標(biāo)號。這種標(biāo)號在匯編時將被處理成PC值加上或減去一個數(shù)字常量。它常用于表示跳轉(zhuǎn)指令的目標(biāo)地址或代碼段中所嵌入的少量數(shù)據(jù)。
 ?。?)寄存器相關(guān)地址
  這種標(biāo)號在匯編時將被處理成寄存器的值加上或減去一個數(shù)字常量。它常被用于訪問數(shù)據(jù)段中的數(shù)據(jù)。這種基于寄存器的標(biāo)號通常用MAP和FIELD偽操作定義,也可以用EQU偽操作定義。
  (3)絕對地址
  絕對地址是一個32位的數(shù)字量,使用它可以直接尋址整個內(nèi)存空間。
  5.局部標(biāo)號
  局部標(biāo)號是一個0~99之間的十進(jìn)制數(shù)字,可重復(fù)定義。局部標(biāo)號后面可以緊接一個通常表示該局部變量作用范圍的符號。局部變量的作用范圍為當(dāng)前段,也可以用偽操作ROUT來定義局部標(biāo)號的作用范圍。
  局部標(biāo)號在子程序或程序循環(huán)中常被用到,也可以配合宏定義偽操作(MACRO和MEND)來使程序結(jié)構(gòu)更加合理。
  在同一個段中,可以使用相同的數(shù)字命名不同的局部變量。默認(rèn)情況下,匯編器會尋址最近的變量。也可以通過匯編器命令選項(xiàng)來改變搜索順序。
  局部變量命名語法如下。
  n{routname}
  局部變量引用的語法格式如下。
  %{F|B}{A|T}n{routname}
  其中,routname為變量作用范圍名稱;%表示引用操作;F指示匯編器只向前搜索;B指示匯編器只向后搜索;A指示匯編器搜索所有宏的嵌套。T指示匯編器只搜索宏的當(dāng)前層。
  如果在引用過程中,沒有指定F和B,則匯編器先向后搜索,再向前搜索。
  如果A和T沒有指定,匯編器搜索所有從當(dāng)前層次到宏最高層次,比當(dāng)前層次低的層次不再搜索。
  如果指定了routname,匯編器向前搜索最近的ROUT操作,若routname與該ROUT偽操作定義的名稱不匹配,匯編器報(bào)告錯誤并結(jié)束匯編。
  10.3.3 匯編語言程序中的表達(dá)式和運(yùn)算符
  在匯編語言程序設(shè)計(jì)中經(jīng)常使用各種表達(dá)式,表達(dá)式一般由變量、常量、運(yùn)算符和括號構(gòu)成。常用的表達(dá)式有數(shù)字表達(dá)式、邏輯表達(dá)式和字符串表達(dá)式。
  下面分別介紹表達(dá)式中各元素。
  1.字符串表達(dá)式
  字符串表達(dá)式一般由字符串常量、字符串變量、運(yùn)算符和括號構(gòu)成。字符串由包含在雙引號內(nèi)的一系列字符組成。編譯器所支持的字符串最大長度為512字節(jié)。
  當(dāng)在字符串中包含“$”或引號時,可以用“$$”表示“$”,用兩個雙引號表示一個雙引號。
  例如:
  abc SETS “one ”“ double quote”
  def SETS “one $$ dollar symbol”
  上面的例子分別將字符串a(chǎn)bc和def賦值為“one “ double quote”和“one $ dollar symbol”。
  字符串可以通過SETA、SETL、SETS偽操作對其賦值。
  常用的與字符串表達(dá)式相關(guān)的運(yùn)算符如下。
  · LEN:計(jì)算字符串長度運(yùn)算符。
  · CHR:ASCII碼轉(zhuǎn)換運(yùn)算符。
  · STR:字符串轉(zhuǎn)換運(yùn)算符。
  · LEFT:字符串取左運(yùn)算符。
  · RIGHT:字符串取右運(yùn)算符。
  · CC:字符串連接運(yùn)算符。
  詳見后面操作符一節(jié)。
  下面的例子說明了如何使用字符串操作符給字符串變量賦值。
  improb SETS ”literal“:CC:(strvar2:LEFT:4)
  這個例子將字符串賦值為“l(fā)iteralatrv”。
  2.整數(shù)表達(dá)式
  整數(shù)表達(dá)式一般由數(shù)字常量、數(shù)字變量、數(shù)字運(yùn)算符和括號構(gòu)成。
  整數(shù)表示式可以包含寄存器相關(guān)(register-relative)或程序相關(guān)(program-relative)表達(dá)式,這些表達(dá)式在編譯時被匯編器翻譯為地址無關(guān)數(shù)字常量。
  整數(shù)表達(dá)式一般被計(jì)算為32位的整數(shù),當(dāng)此整數(shù)被定義為無符號數(shù)時,其取值范圍為0~232-1,當(dāng)被定義為有符號數(shù)時,其取值范圍為-231~231-1。匯編器認(rèn)為-n和232-n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》-1”對匯編器來說取值為“假({FLASE})”。
  下面的例子說明了在程序中,如何對整數(shù)表達(dá)式進(jìn)行操作。
  a SETA 256*256 ;將數(shù)字變量賦值為 256*256
  MOV r1,#(a*22) ;將數(shù)字表達(dá)式(a*22) 的值放入r1
  匯編語言中,整數(shù)數(shù)字量有以下幾種形式。
  · 十進(jìn)制數(shù)(decimal-digis)
  · “0x”+ 十六進(jìn)制數(shù)(0xhexadecimal-digits)
  · “&”+ 十六進(jìn)制數(shù)(&hexadecimal-digits)
  · n進(jìn)制數(shù)(n_base-n-digits)
  · 字符(character)
  其中,十進(jìn)制數(shù)(decimal-digis)可以是“0”到“9”數(shù)字的任意組合;十六進(jìn)制數(shù)(hexadecimal-digits)可以是“0”到“9”數(shù)字和字母“A”到“F”的任意組合;“n_”可以取2到9,“base-n-digits”是在n進(jìn)制下合法的任意數(shù)值;字符(character)可以是除單引號以外的所有字符。
  下面的例子說明了整數(shù)表達(dá)式的基本用法。
  a SETA 34906
  addr DCD 0xA10E
  LDR r4,=&1000000F
  DCD 2_11001010
  c3 SETA 8_74007
  DCQ 0x0123456789abcdef
  LDR r1,=‘A’ ;ARM偽指令將整數(shù)65(A的ASCII碼)存入寄存器
  ADD r3,r2,#‘\’‘ ;將整數(shù)39(字符“/”的ASCII碼)加到r2,結(jié)果存入r3
  3.浮點(diǎn)數(shù)字量表達(dá)式
  浮點(diǎn)數(shù)字量有以下幾種形式。
  · {-}digitsE{-}digits。
  · {-}{digits}.digits{E{-}digits}。
  · 0xhexdigits。
  · &hexdigits。
  其中,digits為十進(jìn)制數(shù),要在其后加上字母E(大寫或小寫)來表示其指數(shù);hexdigits為十六進(jìn)制數(shù)。
  單精度浮點(diǎn)數(shù)的表示范圍為1.17549435e?38~3.40282347e+38;雙精度浮點(diǎn)數(shù)的表示范圍為2.22507385850720138e-308~1.79769313486231571e+308。
  下面的例子說明了浮點(diǎn)數(shù)據(jù)量的基本用法。
  DCFD 1E308,-4E-100
  DCFS 1.0
  DCFD 3.725e15
  LDFS 0x7FC00000 ;
  LDFD &FFF0000000000000 ;
  4.邏輯表達(dá)式
  邏輯表達(dá)式一般由邏輯量、邏輯運(yùn)算符和括號構(gòu)成,其表達(dá)式的運(yùn)算結(jié)果為真或假。與邏輯表達(dá)式相關(guān)的運(yùn)算符有“=”、“》”、“《”、“》=”、“《= ”、“/=”、“ 《》” 運(yùn)算符和“LAND”、“LOR”、“LNOT”及“LEOR”運(yùn)算符。
  5.程序或寄存器相關(guān)表達(dá)式
  寄存器相關(guān)表達(dá)式的值等于指定寄存器的值加上或減去一個數(shù)字表達(dá)式。
  程序相關(guān)表達(dá)式的值等于程序計(jì)數(shù)器PC的值加上或減去一個數(shù)字表達(dá)式的值。此種表達(dá)式通常由程序中的標(biāo)號與一個數(shù)字表達(dá)式組成。
  下面的例子說明了程序或寄存器相關(guān)表達(dá)式的基本使用方法。
  LDR r4,=data+4*n ;n 是匯編時取值變量
  ; code
  MOV pc,lr
  data DCD value0
  ; n-1 個DCD 偽操作
  DCD valuen ;data+4*n 指向此
  ;更多DCD偽操作
  6.匯編中的操作符
 ?。?)操作符的優(yōu)先級
  在匯編語言程序設(shè)計(jì)中,表達(dá)式包含一個擴(kuò)展的操作符集,這些操作符和高級語言中的運(yùn)算符十分接近。其運(yùn)算次序遵循如下的優(yōu)先級。
 ?、?優(yōu)先級相同的雙目運(yùn)算符的運(yùn)算順序?yàn)閺淖蟮接摇?br />  ?、?相鄰的單目運(yùn)算符的運(yùn)算順序?yàn)閺挠业阶?,單目運(yùn)算符的優(yōu)先級高于其他運(yùn)算符。
 ?、?括號運(yùn)算符的優(yōu)先級最高。
  匯編語法的操作符優(yōu)先級和C語言中的不完全相同。例如在匯編中,下面的匯編語言
 ?。?+2∶SHR∶3)相當(dāng)于(1+(2∶SHR∶3)),而在C語言中,運(yùn)算則變?yōu)椋ǎ?+2)》》3)=0。類似于這樣的操作,在使用時要特別注意。
  注意為了保證表達(dá)式運(yùn)算結(jié)果的正確,建議使用“()”來避免異義。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費(fèi)下載
  2. 0.00 MB  |  1490次下載  |  免費(fèi)
  3. 2單片機(jī)典型實(shí)例介紹
  4. 18.19 MB  |  92次下載  |  1 積分
  5. 3S7-200PLC編程實(shí)例詳細(xì)資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關(guān)電源原理及各功能電路詳解
  10. 0.38 MB  |  10次下載  |  免費(fèi)
  11. 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
  12. 0.11 MB  |  4次下載  |  免費(fèi)
  13. 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
  14. 0.63 MB  |  3次下載  |  免費(fèi)
  15. 89天練會電子電路識圖
  16. 5.91 MB  |  3次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費(fèi)
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費(fèi)
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費(fèi)
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費(fèi)
  9. 5555集成電路應(yīng)用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費(fèi)
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費(fèi)
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費(fèi)
  15. 8開關(guān)電源設(shè)計(jì)實(shí)例指南
  16. 未知  |  21539次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537791次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233045次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191183次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138039次下載  |  免費(fèi)