第6章匯編偽指令與偽操作1簡化_第1頁
第6章匯編偽指令與偽操作1簡化_第2頁
第6章匯編偽指令與偽操作1簡化_第3頁
第6章匯編偽指令與偽操作1簡化_第4頁
第6章匯編偽指令與偽操作1簡化_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

付費下載

VIP免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1TM第第6章章 ARM匯編偽指令與偽操作匯編偽指令與偽操作本章將詳細介紹進行匯編語言程序本章將詳細介紹進行匯編語言程序設計時所用的設計時所用的ARM/Thumb匯編語匯編語言偽指令、由言偽指令、由ARM公司推出的開公司推出的開發(fā)工具所支持的偽操作以及發(fā)工具所支持的偽操作以及GNU ARM開發(fā)工具所支持的偽操作。開發(fā)工具所支持的偽操作。 2TM2內容提要內容提要61 匯編語言偽指令匯編語言偽指令62 ARM匯編語言偽操作匯編語言偽操作63 ARM匯編偽操作匯編偽操作64 GNU ARM匯編偽操作匯編偽操作3TM361 匯編語言偽指令匯編語言偽指令n偽指令是偽指令是ARM處理器支持的匯編語言程序

2、里處理器支持的匯編語言程序里的特殊助記符,它不在處理器運行期間由機的特殊助記符,它不在處理器運行期間由機器執(zhí)行器執(zhí)行,只是在匯編時將被合適的機器指令代只是在匯編時將被合適的機器指令代替成替成ARM或或Thumb指令指令,從而實現(xiàn)真正的指從而實現(xiàn)真正的指令操作。令操作。 4TM46.1.1 ARM匯編語言偽指令匯編語言偽指令 1大范圍地址讀取偽指令大范圍地址讀取偽指令LDRLDR偽指令將一個偽指令將一個32位的常數(shù)或者一個地址值位的常數(shù)或者一個地址值讀取到寄存器中,可以看作是加載寄存器的讀取到寄存器中,可以看作是加載寄存器的內容。內容。LDRcond register , = expressio

3、n 5TM56.1.1 ARM匯編語言偽指令匯編語言偽指令n如果加載的常數(shù)符合如果加載的常數(shù)符合MOV或或MVN指令立即數(shù)指令立即數(shù)的要求,則用的要求,則用MOV或或MVN指令替代指令替代LDR偽指偽指令。令。n如果加載的常數(shù)不符合如果加載的常數(shù)不符合MOV或或MVN指令立即指令立即數(shù)的要求,匯編器將常量放入內存文字池,數(shù)的要求,匯編器將常量放入內存文字池,并使用一條程序相對偏移的并使用一條程序相對偏移的LDR指令從內存指令從內存文字池讀出常量。文字池讀出常量。 6TM66.1.1 ARM匯編語言偽指令匯編語言偽指令n例:偽指令語句:例:偽指令語句:nLDR R0,=0 x0AA00;R00

4、counter SETA counter-1WEND33TM336.3.3 匯編代碼控制偽操作匯編代碼控制偽操作3. MACRO宏定義偽操作宏定義偽操作語法格式:語法格式:MACRO$labelmacroname$parameter,$ parameter程序代碼段程序代碼段MEND其中:其中:$label在宏指令被展開時,標號被替換成用在宏指令被展開時,標號被替換成用戶定義的符號戶定義的符號$parameter為宏的參數(shù)列表,當宏被展開為宏的參數(shù)列表,當宏被展開時被替換為相應的值。時被替換為相應的值。功能:將一段程序代碼定義成一個宏。功能:將一段程序代碼定義成一個宏。34TM346.3.3

5、匯編代碼控制偽操作匯編代碼控制偽操作3. MACRO宏定義偽操作宏定義偽操作宏在調用時被替換展開,沒有其他的附加操作。宏在調用時被替換展開,沒有其他的附加操作。宏多用于所定義的程序代碼量較小,而需要傳送參數(shù)宏多用于所定義的程序代碼量較小,而需要傳送參數(shù)比較多的場合。相對子程序調用而言,能有效提高比較多的場合。相對子程序調用而言,能有效提高處理速度。處理速度。如果變量在宏定義中被定義,則該變量只在該宏定義如果變量在宏定義中被定義,則該變量只在該宏定義體中有效。體中有效。35TM356.3.3 匯編代碼控制偽操作匯編代碼控制偽操作3. MACRO宏定義偽操作宏定義偽操作例例6-30 (驗證驗證)在

6、在ARM和和Thumb代碼中,測試并跳轉代碼中,測試并跳轉操作需要執(zhí)行兩條操作需要執(zhí)行兩條ARM指令。可以定義一個與下面類指令??梢远x一個與下面類似的宏來實現(xiàn)相應的操作:似的宏來實現(xiàn)相應的操作:MACRO$label TestAndBranch $dest,$reg,$cc$label CMP $reg,#0B$cc $destMEND36TM366.3.3 匯編代碼控制偽操作匯編代碼控制偽操作3. MACRO宏定義偽操作宏定義偽操作例例6-30 (續(xù))(續(xù)) 宏調用:宏調用:test TestAndBranch NonZero,R0,NE.NonZero替換后將變成:替換后將變成:test

7、 CMP R0,#0BNE NonZeroNonZero 37TM376.3.4 匯編信息報告控制偽操作匯編信息報告控制偽操作 n信息報告?zhèn)尾僮饔糜诔绦騾R編指示,主要是信息報告?zhèn)尾僮饔糜诔绦騾R編指示,主要是在程序調試階段使用。這類偽操作分為錯誤在程序調試階段使用。這類偽操作分為錯誤信息報告?zhèn)尾僮鳌⒃\斷信息報告?zhèn)尾僮?、列信息報告?zhèn)尾僮鳌⒃\斷信息報告?zhèn)尾僮?、列表選項設置偽操作、插入文件標題偽操作表選項設置偽操作、插入文件標題偽操作 38TM386.3.4 匯編信息報告控制偽操作匯編信息報告控制偽操作1、錯誤信息報告、錯誤信息報告ASSERT 語法格式語法格式:ASSERT logical_expr

8、ession其中:其中:logical_expression用于表示的條件的邏輯表達式。用于表示的條件的邏輯表達式。功能:用于保證源程序被匯編時滿足相關的條件。如功能:用于保證源程序被匯編時滿足相關的條件。如果匯編時邏輯表達式果匯編時邏輯表達式logical_expression不成立,不成立,ASSERT將報告錯誤信息。將報告錯誤信息。39TM396.3.4 匯編信息報告控制偽操作匯編信息報告控制偽操作2、診斷信息報告、診斷信息報告INFOINFO numeric_expression, string_expression其中:其中:numeric_expression數(shù)字表達式。如果數(shù)字表

9、達式。如果numeric_expression為為0,則在第二遍掃描時,偽,則在第二遍掃描時,偽操作打印操作打印string_expression的內容;如果的內容;如果numeric_expression的值不為的值不為0,則在匯編處理中,則在匯編處理中,第一遍掃描時,偽操作打印,第一遍掃描時,偽操作打印string-expression的的內容,并終止匯編。內容,并終止匯編。40TM406.3.4 匯編信息報告控制偽操作匯編信息報告控制偽操作3、列表選項設置、列表選項設置OPT OPT為編譯列表選項設置偽操作,用于在源程序為編譯列表選項設置偽操作,用于在源程序中設置匯編列表選項。中設置匯編

10、列表選項。語法格式語法格式:OPT n其中:其中:n是是OPT 指令設置選項編號。教材中表指令設置選項編號。教材中表6-5列列出了有效的選項編號及其含義。出了有效的選項編號及其含義。41TM416.3.4 匯編信息報告控制偽操作匯編信息報告控制偽操作4、插入文件標題偽操作、插入文件標題偽操作TTL與與SUBT語法格式語法格式:TTL titleSUBT subtitle其中:其中:title 為所插入的列表文件的標題;為所插入的列表文件的標題;subtitle為所插入的列表文件的子標題。為所插入的列表文件的子標題。功能:功能:TTL/SUBT在列表文件顯示一個標題在列表文件顯示一個標題/子標題

11、。如果子標題。如果要在列表文件的第一頁顯示標題要在列表文件的第一頁顯示標題/子標題,子標題,TTL/SUBT要要放在源程序的第一行。放在源程序的第一行。42TM426.3.5 指令集類型標識偽操作指令集類型標識偽操作 n指令集類型標識偽操作用來告訴編譯器所處指令集類型標識偽操作用來告訴編譯器所處理的是理的是32位的位的ARM指令還是指令還是16位的位的Thumb指令,實現(xiàn)這一操作的操作符有指令,實現(xiàn)這一操作的操作符有ARM、CODE32、THUMB、CODE16 43TM43n指令集類型標識偽操作指令集類型標識偽操作 6.3.5 指令集類型標識偽操作指令集類型標識偽操作 例:例:AREA AR

12、MThumb,CODE,READONLYENTRYCODE32startADR R0,into_thumb+1BX R0CODE16into_thumbMOVS R0,#1044TM446.3.6 文件包含偽操作文件包含偽操作 文件包含偽操作包括兩類:文件包含偽操作包括兩類:一類是將一個源文件包含到當前源文件中,并一類是將一個源文件包含到當前源文件中,并將被包含的文件在其當前位置進行匯編處理將被包含的文件在其當前位置進行匯編處理;另一類是也將一個源文件包含到當前源文件中另一類是也將一個源文件包含到當前源文件中,但被包含文件不進行匯編處理。,但被包含文件不進行匯編處理。 45TM456.3.6

13、文件包含偽操作文件包含偽操作1. 文件包含文件包含GET 或或 INCLUDE語法格式語法格式:GET filenameINCLUDE filename其中:其中:filename 是要在匯編中包含的文件名稱。匯編程序接是要在匯編中包含的文件名稱。匯編程序接受受 UNIX 或或 MS-DOS格式的路徑名。格式的路徑名。功能:將一個源文件包含到當前源文件并進行匯編處功能:將一個源文件包含到當前源文件并進行匯編處理。理。例:例: AREA Example, CODE, READONLYGET include_s.sGET d:testinclude_s.s46TM466.3.6 文件包含偽操作文件

14、包含偽操作2、文件原樣包含、文件原樣包含INCBIN 語法格式語法格式:INCBIN filename其中:其中:filename 是要在匯編中包含的文件名稱。是要在匯編中包含的文件名稱。 匯編程序匯編程序接受接受 UNIX 或或 MS-DOS格式的路徑名。格式的路徑名。功能:將一個文件包含到當前源文件中,該文件按原功能:將一個文件包含到當前源文件中,該文件按原樣包含,不進行匯編處理。通常用于將目標文件或數(shù)樣包含,不進行匯編處理。通常用于將目標文件或數(shù)據(jù)文件包含到當前源文件中。據(jù)文件包含到當前源文件中。例:例: INCBIN a1.datINCBIN a2.o47TM476.3.7 其他類型偽

15、操作其他類型偽操作 n對齊方式設置對齊方式設置ALIGNALIGNn段屬性定義偽操作段屬性定義偽操作AREA AREA n源程序結尾標識源程序結尾標識END END n聲明程序的入口點聲明程序的入口點ENTRYENTRY n定義常量或標號名稱定義常量或標號名稱EQU EQU n聲明全局標號聲明全局標號EXPORTEXPORT或或GLOBAL GLOBAL n將符號導出到目標文件將符號導出到目標文件EXPORTAS EXPORTAS n外部符號聲明外部符號聲明IMPORT IMPORT 和和 EXTERN EXTERN n保留局部符號保留局部符號KEEP KEEP n禁止使用浮點指令禁止使用浮點

16、指令NOFP NOFP n指定段的相關性指定段的相關性REQUIRE REQUIRE n堆棧八字節(jié)對齊堆棧八字節(jié)對齊REQUIRE8 REQUIRE8 和和 PRESERVE8 PRESERVE8 n局部變量范圍定義局部變量范圍定義ROUT ROUT 48TM486.3.7 其他類型偽操作其他類型偽操作1. 對齊方式設置對齊方式設置ALIGN 對齊方式設置對齊方式設置ALIGN 偽操作通過用零或偽操作通過用零或 NOP 指指令進行填充來使當前位置與指定的邊界對齊。令進行填充來使當前位置與指定的邊界對齊。語法格式語法格式:ALIGN expr,offset,pad , padsize expr:

17、 用于指定對齊方式,值為用于指定對齊方式,值為2的的n次冪,次冪,0n 31;offset: 表示偏移量,可以是任何數(shù)值表達式;表示偏移量,可以是任何數(shù)值表達式;pad: 數(shù)值表達式,用于對齊時填充的內容;數(shù)值表達式,用于對齊時填充的內容;padsize: 可以為可以為1、2、4,用于指定,用于指定pad的類型(字的類型(字節(jié)節(jié)/半字半字/ 字)字)49TM496.3.7 其他類型偽操作其他類型偽操作1. 對齊方式設置對齊方式設置ALIGN 使用場景:使用場景:ADR偽指令用于偽指令用于Thumb代碼時只能加載字對齊的地代碼時只能加載字對齊的地址,但址,但Thumb代碼內的標簽可能不是字對齊的

18、,此代碼內的標簽可能不是字對齊的,此時須使用時須使用ALIGN 4來保證代碼內地址為來保證代碼內地址為4字節(jié)對齊;字節(jié)對齊;使用使用ALIGN可確??纱_保ARM處理器高速緩存的使用效率。處理器高速緩存的使用效率。例如使用例如使用ALIGN 16來確保在來確保在16字節(jié)邊界上對齊函數(shù)字節(jié)邊界上對齊函數(shù)入口點;入口點;LDRD和和STRD雙字數(shù)據(jù)傳送必須是雙字數(shù)據(jù)傳送必須是8字節(jié)對齊的,此字節(jié)對齊的,此時就在內存分配指令(如時就在內存分配指令(如DCQ)前使用)前使用ALIGN 8.50TM506.3.7 其他類型偽操作其他類型偽操作2. 段屬性定義偽操作段屬性定義偽操作AREA 匯編程序采用分段

19、設計,段屬性定義偽操作匯編程序采用分段設計,段屬性定義偽操作AREA用于定義一個代碼段或數(shù)據(jù)段,用于定義一個代碼段或數(shù)據(jù)段,AREA 偽操作偽操作指示匯編器匯編新的代碼段或數(shù)據(jù)段。段是不可分的指示匯編器匯編新的代碼段或數(shù)據(jù)段。段是不可分的已命名獨立代碼或數(shù)據(jù)塊,它們由鏈接器處理。已命名獨立代碼或數(shù)據(jù)塊,它們由鏈接器處理。語法格式語法格式:AREA sectionname,attr,attr.51TM516.3.7 其他類型偽操作其他類型偽操作2. 段屬性定義偽操作段屬性定義偽操作AREA sectionname: 段名。如果以數(shù)字開始必須包含在段名。如果以數(shù)字開始必須包含在“|”內內;attr

20、:段屬性,常用的選項如下:段屬性,常用的選項如下:1)ALIGN=expr:規(guī)定段為:規(guī)定段為2expr字節(jié)對齊,取值字節(jié)對齊,取值231;2)CODE:指定該段為代碼段,此時:指定該段為代碼段,此時READONLY為為默認屬性;默認屬性;3)DATA:定義數(shù)據(jù)段,默認屬性為:定義數(shù)據(jù)段,默認屬性為READWRITE;4)READONLY:指定該段只讀;:指定該段只讀;5)READWRITE:指定該段可讀可寫。:指定該段可讀可寫。52TM526.3.7 其他類型偽操作其他類型偽操作2. 段屬性定義偽操作段屬性定義偽操作AREA 注意事項:注意事項:一組匯編代碼必須有一個一組匯編代碼必須有一個A

21、REA指令;指令;可以在多個可以在多個AREA指令中使用相同的名稱,名稱相同指令中使用相同的名稱,名稱相同的所有區(qū)域都放在相同的的所有區(qū)域都放在相同的ELF段中。段中。通常對代碼和數(shù)據(jù)使用不同的通常對代碼和數(shù)據(jù)使用不同的ELF段。段。53TM536.3.7 其他類型偽操作其他類型偽操作3、源程序結尾標識、源程序結尾標識ENDEND 偽操作通知匯編程序它已到達源文件的末尾。偽操作通知匯編程序它已到達源文件的末尾。語法格式語法格式:END54TM546.3.7 其他類型偽操作其他類型偽操作4、聲明程序的入口點、聲明程序的入口點ENTRY ENTRY 偽操作聲明程序的入口點。偽操作聲明程序的入口點。

22、語法格式語法格式: ENTRY注意:注意:必須為一個程序指定至少一個必須為一個程序指定至少一個ENTRY點;點;一個源文件內不能使用多個一個源文件內不能使用多個ENTRY指令;指令;并非每個源文件都必須包含并非每個源文件都必須包含ENTRY指令。指令。例:例: AREA ARMex,CODE,READONLYENTRYMOV R0,#155TM556.3.7 其他類型偽操作其他類型偽操作5、定義常量或標號名稱、定義常量或標號名稱EQU 功能:為數(shù)值常量、標號指定一個符號名稱。功能:為數(shù)值常量、標號指定一個符號名稱。語法格式語法格式:name EQU expr, type其中:其中:name:是

23、要為數(shù)值指定的符號名稱。:是要為數(shù)值指定的符號名稱。expr:可以是一個寄存器相對的地址、程序相對的地:可以是一個寄存器相對的地址、程序相對的地址、絕對地址或址、絕對地址或 32 位整型常數(shù)。位整型常數(shù)。type : 可選項,值為可選項,值為CODE32或或CODE16,僅當,僅當expr為絕對地址時使用。為絕對地址時使用。56TM566.3.7 其他類型偽操作其他類型偽操作5、定義常量或標號名稱、定義常量或標號名稱EQU 例:例:Sub1EQU 0 x100Test EQU label+8IRQ_vEQU 0 x18,CODE3257TM576.3.7 其他類型偽操作其他類型偽操作6. 聲明全局標號聲明全局標號EXPORT或或GLOBAL EXPORT 指令聲明一個全局的符號,可由鏈接指令聲明一個全局的符號,可由鏈接器用于解析不同的對象和庫文件中的符號引用。器用于解析不同的對象和庫文件中的符號引用。 GLOBAL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論