RM新时代网站-首页

電子發(fā)燒友App

硬聲App

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

ARM匯編程序設計之匯編語言文件格式

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

資料介紹

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

評論

查看更多

下載排行

本周

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

本月

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

總榜

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