ARM指令集中提供了兩條產(chǎn)生異常的指令,通過這兩條指令可以用軟件的方法實現(xiàn)異常。表9.4總結(jié)了ARM異常產(chǎn)生指令。
Thumb指令集支持寄存器的裝載和存儲,即LDR和STR指令。8和類型的Load/Store指令在Thumb指令集中可用。這些指令使用兩種尋址模式:寄存器偏移和立即數(shù)偏移。指令所能存取的數(shù)據(jù)包括字、半字和字節(jié),同時半字和字節(jié)可以為有符號數(shù)或無符號數(shù)。
Thumb中有兩個分支跳轉(zhuǎn)指令的變體,第一個變體與ARM版本指令相似,可條件執(zhí)行,跳轉(zhuǎn)被限制在有符號8位立即數(shù)所表示的范圍內(nèi),或者是±256B。第二個變體不可條件執(zhí)行(沒有條件碼部分),但擴展了有效跳轉(zhuǎn)范圍,跳轉(zhuǎn)范圍為有符號11位立即數(shù)表示的范圍,即±2048B。
ARM匯編器支持ARM偽指令,這些偽指令在匯編階段被翻譯成ARM或者Thumb(或Thumb-2)指令(或指令序列)。ARM偽指令包含ADR、ADRL、MOV32和LDR。
程序符號。通常為地址標號(label)。在指令和偽指令中通常為標號;在一些偽操作中符號可能是變量或常數(shù)。詳見ARM偽操作一節(jié)。
所有的Thumb指令都是16位的。它們都是ARM指令重新編碼得到的,所以繼承了ARM指令集的許多特點。
Thumb指令集的多寄存器Load/Store指令是ARM指令集的多寄存器Load/Store指令的簡化形式。同ARM指令一樣,Thumb多寄存器數(shù)據(jù)傳送指令可以用于過程調(diào)用與返回以及存儲器塊拷貝。但為了編碼的緊湊性,這兩種用法由分開的指令實現(xiàn),并且這些指令也只使用單一的尋址方式。在其他方面,這些指令的性質(zhì)與等價的ARM指令相同。
Thumb異常中斷產(chǎn)生指令與ARM指令集下的異常中斷指令十分相似。同ARM指令集相同,Thumb指令集中同樣包含兩條異常中斷產(chǎn)生指令:軟件中斷指令SWI用于產(chǎn)生SWI異常中斷;斷點中斷指令BKPT主要用于產(chǎn)生軟件斷點,供調(diào)試程序使用(只在ARMv5及以上版本中使用)。
內(nèi)聯(lián)匯編和嵌入型匯編是包含在C/C++編譯器中的匯編器。使用它可以在C/C++程序中實現(xiàn)C/C++語言不能完成的一些工作。例如,在下面幾種情況中必須使用內(nèi)聯(lián)匯編或嵌入型匯編。