ARMv8 彙編指令集查詢

轉載地址:https://blog.csdn.net/qq_40531974/article/details/83897559

一.彙編數據處理指令

1.數據傳送指令

【MOV指令】:它的傳送指令只能是把一個寄存器的值(要能用立即數表示)賦給另一個寄存器,或者將一個常量賦給寄存器,將後邊的量賦給前邊的量。

MOV指令的格式爲:MOV{條件}{S} 目的寄存器,源操作數
複製代碼
MOV指令中,條件缺省時指令無條件執行;S選項決定指令的操作是否影響CPSR中條件標誌位的值,當沒有S時指令不更新CPSR中條件標誌位的值。

指令示例:

1 MOV R1,R0   ;將寄存器R0的值傳送到寄存器R1
2 MOV PC,R14   ;將寄存器R14的值傳送到PC,常用於子程序返回
3 MOV R1,R0,LSL3 ;將寄存器R0的值左移3位後傳送到R1(即乘8)
4 MOVS PC, R14      ;將寄存器R14的值傳送到PC中,返回到調用代碼並恢復標誌位

除了MOV指令外,還有數據取反傳送指令MVN。 【MVN指令】

MVN指令的格式爲:
MVN{條件}{S} 目的寄存器,源操作數
複製代碼
MVN指令可完成從另一個寄存器、被移位的寄存器、或將一個立即數加載到目的寄存器。與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。其中S決定指令的操作是否影響CPSR中條件標誌位的值,當沒有S時指令不更新CPSR中條件標誌位的值。

MVN R0,#0   ;將立即數0取反傳送到寄存器R0中,完成後R0=-1(有符號位取反)

2.算術運算指令

(1)【加法指令】:ADD

ADD指令的格式爲:
ADD{條件}{S} 目的寄存器,操作數1,操作數2
複製代碼
ADD指令用於把兩個操作數相加,並將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。

指令示例:

1 ADD  R0,R1,R2           ; R0 = R1 + R2
2 ADD  R0,R1,#256            ; R0 = R1 + 256
3 ADD  R0,R2,R3,LSL#1      ; R0 = R2 + (R3 << 1)

(2)【帶進位的加法指令】:ADC
ADC指令的格式爲:
ADC{條件}{S} 目的寄存器,操作數1,操作數2

ADC指令用於把兩個操作數相加,再加上CPSR中的C條件標誌位的值,並將結果存放到目的寄存器中。
它使用一個進位標誌位,這樣就可以做比32位大的數的加法,注意不要忘記設置S後綴來更改進位標誌。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。
以下指令序列完成兩個128位數(此處應爲兩個四字數相加)的加法,第一個數由高到低存放在寄存器R7~R4,第二個數由高到低存放在寄存器R11~R8,運算結果由高到低存放在寄存器R3~R0:

1 ADDS  R0,R4,R8          ; 加低端的字,R0=R4+R8
2 ADCS  R1,R5,R9            ; 加第二個字,帶進位,R1=R5+R9
3 ADCS  R2,R6,R10       ; 加第三個字,帶進位,R2=R6+R10
4 ADC  R3,R7,R11       ; 加第四個字,帶進位,R3=R7+R11

(3)【減法指令】:SUB
SUB指令的格式爲:
SUB{條件}{S} 目的寄存器,操作數1,操作數2

SUB指令用於把操作數1減去操作數2,並將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令可用於有符號數或無符號數的減法運算。
指令示例:

1 SUB  R0,R1,R2           ; R0 = R1 - R2
2 SUB  R0,R1,#256            ; R0 = R1 - 256
3 SUB  R0,R2,R3,LSL#1      ; R0 = R2 - (R3 << 1)

(4)【帶借位減法指令】:SBC
SBC指令的格式爲:
SBC{條件}{S} 目的寄存器,操作數1,操作數2

BC指令用於把操作數1減去操作數2,再減去CPSR中的C條件標誌位的反碼,並將結果存放到目的寄存器中。
操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。
該指令使用進位標誌來表示借位,這樣就可以做大於32位的減法,注意不要忘記設置S後綴來更改進位標誌。該指令可用於有符號數或無符號數的減法運算。
指令示例:

SUBS  R0,R1,R2           ;R0 = R1 - R2 - !C,並根據結果設置CPSR的進位標誌位

3.比較指令
(1)【直接比較指令】:CMP
CMP指令的格式爲:
CMP{條件} 操作數1,操作數2

CMP指令用於把一個寄存器的內容和另一個寄存器的內容或立即數進行比較,同時更新CPSR中條件標誌位的值。
該指令進行一次減法運算,但不存儲結果,只更改條件標誌位。標誌位表示的是操作數1與操作數2的關係(大、小、相等),例如,當操作數1大於操作操作數2,則此後的有GT 後綴的指令將可以執行。
指令示例:

1 CMP R1,R0   ;將寄存器R1的值與寄存器R0的值相減,並根據結果設置CPSR的標誌位
2 CMP R1,#100  ;將寄存器R1的值與立即數100相減,並根據結果設置CPSR的標誌位

(2)【負數比較指令】:CMN
CMN指令的格式爲:
CMN{條件} 操作數1,操作數2

CMN指令用於把一個寄存器的內容和另一個寄存器的內容或立即數取反後進行比較,同時更新CPSR中條件標誌位的值。
該指令實際完成操作數1和操作數2相加,並根據結果更改條件標誌位。
指令示例:

1 CMN R1,R0   ;將寄存器R1的值與寄存器R0的值相加,並根據結果設置CPSR的標誌位
2 CMN R1,#100  ;將寄存器R1的值與立即數100相加,並根據結果設置CPSR的標誌位

4.邏輯運算指令
(1)【邏輯與指令】:AND
AND指令的格式爲:
AND{條件}{S} 目的寄存器,操作數1,操作數2

AND指令用於在兩個操作數上進行邏輯與運算,並把結果放置到目的寄存器中。
操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用於屏蔽操作數1的某些位。
指令示例:

AND  R0,R0,#3           ; 該指令保持R0的0、1位,其餘位清零。

(2)【邏輯或指令】:ORR
ORR指令的格式爲:
ORR{條件}{S} 目的寄存器,操作數1,操作數2

ORR指令用於在兩個操作數上進行邏輯或運算,並把結果放置到目的寄存器中。
操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用於設置操作數1的某些位。
指令示例:

ORR  R0,R0,#3           ; 該指令設置R0的0、1位,其餘位保持不變。

(3)【邏輯異或指令】:EOR
EOR指令的格式爲:
EOR{條件}{S} 目的寄存器,操作數1,操作數2

EOR指令用於在兩個操作數上進行邏輯異或運算,並把結果放置到目的寄存器中。
操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用於反轉操作數1的某些位。
指令示例:

EOR  R0,R0,#3           ; 該指令反轉R0的0、1位,其餘位保持不變。

(4)【位清零指令】:BIC
BIC指令的格式爲:
BIC{條件}{S} 目的寄存器,操作數1,操作數2

BIC指令用於清除操作數1的某些位,並把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。
操作數2爲32位的掩碼,如果在掩碼中設置了某一位,則清除這一位。未設置的掩碼位保持不變。
指令示例:

BIC  R0,R0,#%1011         ; 該指令清除 R0 中的位 01、和 3,其餘的位保持不變。

5.測試指令
(1)【位測試指令】:TST
TST指令的格式爲:
TST{條件} 操作數1,操作數2
TST指令用於把一個寄存器的內容和另一個寄存器的內容或立即數進行按位的與運算,並根據運算結果更新CPSR中條件標誌位的值。
操作數1是要測試的數據,而操作數2是一個位掩碼,該指令一般用來檢測是否設置了特定的位。
指令示例:

1 TST R1,#%1  ;用於測試在寄存器R1中是否設置了最低位(%表示二進制數)
2 TST R1,#0xffe  ;將寄存器R1的值與立即數0xffe按位與,並根據結果設置CPSR的標誌位

(2)【位測試指令】:TEQ
TEQ指令的格式爲:
TEQ{條件} 操作數1,操作數2
TEQ指令用於把一個寄存器的內容和另一個寄存器的內容或立即數進行按位的異或運算,並根據運算結果更新CPSR中條件標誌位的值。該指令通常用於比較操作數1和操作數2是否相等。
指令示例:

TEQ R1,R2  ;將寄存器R1的值與寄存器R2的值按位異或,並根據結果設置CPSR的標誌位

6.乘法指令

二.彙編轉移指令
【跳轉指令】
跳轉指令用於實現程序流程的跳轉,在ARM程序中有兩種方法可以實現程序流程的跳轉:
— 使用專門的跳轉指令。
— 直接向程序計數器PC寫入跳轉地址值。
通過向程序計數器PC寫入跳轉地址值,可以實現在4GB的地址空間中的任意跳轉,在跳轉之前結合使用MOV LR,PC等類似指令,可以保存將來的返回地址值,從而實現在4GB連續的線性地址空間的子程序調用。
ARM指令集中的跳轉指令可以完成從當前指令向前或向後的32MB的地址空間的跳轉,包括以下4條指令:

1 — B 跳轉指令
2 — BL 帶返回的跳轉指令
3 — BLX 帶返回和狀態切換的跳轉指令
4 — BX 帶狀態切換的跳轉指令

1、【B指令】
B指令的格式爲:
B{條件} 目標地址
B指令是最簡單的跳轉指令。一旦遇到一個 B 指令,ARM 處理器將立即跳轉到給定的目標地址,從那裏繼續執行。注意存儲在跳轉指令中的實際值是相對當前PC值的一個偏移量,而不是一個絕對地址,它的值由彙編器來計算(參考尋址方式中的相對尋址)。
它是 24 位有符號數,左移兩位後有符號擴展爲 32 位,表示的有效偏移爲 26 位(前後32MB的地址空間)。以下指令:

1 B  Label  ;程序無條件跳轉到標號Label處執行
2 CMP R1,#0  ;當CPSR寄存器中的Z條件碼置位時,程序跳轉到標號Label處執行
3 BEQ Label  

2、【BL指令】
BL指令的格式爲:
BL{條件} 目標地址
BL 是另一個跳轉指令,但跳轉之前,會在寄存器R14中保存PC的當前內容,因此,可以通過將R14 的內容重新加載到PC中,來返回到跳轉指令之後的那個指令處執行。
該指令是實現子程序調用的一個基本但常用的手段。以下指令:

BL Label  ;當程序無條件跳轉到標號Label處執行時,同時將當前的PC值保存到R14中

3、【BLX指令】
BLX指令的格式爲:
BLX 目標地址
BLX指令從ARM指令集跳轉到指令中所指定的目標地址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同時將PC的當前內容保存到寄存器R14中。
因此,當子程序使用Thumb指令集,而調用者使用ARM指令集時,可以通過BLX指令實現子程序的調用和處理器工作狀態的切換。同時,子程序的返回可以通過將寄存器R14值複製到PC中來完成。

4、【BX指令】
BX指令的格式爲:
BX{條件} 目標地址
BX指令跳轉到指令中所指定的目標地址,目標地址處的指令既可以是ARM指令,也可以是Thumb指令。

三.彙編程序狀態寄存器訪問指令
1、【MRS指令】
MRS指令的格式爲:
MRS{條件} 通用寄存器,程序狀態寄存器(CPSR或SPSR)
MRS指令用於將程序狀態寄存器的內容傳送到通用寄存器中。該指令一般用在以下幾種情況:
- 當需要改變程序狀態寄存器的內容時,可用MRS將程序狀態寄存器的內容讀入通用寄存器,修改後再寫回程序狀態寄存器。
- 當在異常處理或進程切換時,需要保存程序狀態寄存器的值,可先用該指令讀出程序狀態寄存器的值,然後保存。
指令示例:

1 MRS R0,CPSR   ;傳送CPSR的內容到R0
2 MRS R0,SPSR   ;傳送SPSR的內容到R0

2、【MSR指令】
MSR指令的格式爲:
MSR{條件} 程序狀態寄存器(CPSR或SPSR)_<域>,操作數
MSR指令用於將操作數的內容傳送到程序狀態寄存器的特定域中。其中,操作數可以爲通用寄存器或立即數。<域>用於設置程序狀態寄存器中需要操作的位,32位的程序狀態寄存器可分爲4個域:

1 位[3124]爲條件標誌位域,用f表示;
2 位[2316]爲狀態位域,用s表示;
3 位[158]爲擴展位域,用x表示;
4 位[70]爲控制位域,用c表示;

該指令通常用於恢復或改變程序狀態寄存器的內容,在使用時,一般要在MSR指令中指明將要操作的域。
指令示例:

1 MSR CPSR,R0   ;傳送R0的內容到CPSR
2 MSR SPSR,R0   ;傳送R0的內容到SPSR
3 MSR CPSR_c,R0  ;傳送R0的內容到SPSR,但僅僅修改CPSR中的控制位域

四.彙編加載/存儲指令
ARM微處理器支持加載/存儲指令用於在寄存器和存儲器之間傳送數據,加載指令用於將存儲器中的數據傳送到寄存器,存儲指令則完成相反的操作。常用的加載存儲指令如下:

1、【LDR指令】
LDR指令的格式爲:
LDR{條件} 目的寄存器,<存儲器地址>
LDR指令用於從存儲器中將一個32位的字數據傳送到目的寄存器中。該指令通常用於從存儲器中讀取32位的字數據到通用寄存器,然後對數據進行處理。
當程序計數器PC作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。

1 LDR  R0,[R1]             ;將存儲器地址爲R1的字數據讀入寄存器R0。
2 LDR  R0,[R1,R2]        ;將存儲器地址爲R1+R2的字數據讀入寄存器R0。
3 LDR  R0,[R1,#8]        ;將存儲器地址爲R1+8的字數據讀入寄存器R0。
4 LDR  R0,[R1,R2] !       ;將存儲器地址爲R1+R2的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。
5 LDR  R0,[R1,#8] !       ;將存儲器地址爲R1+8的字數據讀入寄存器R0,並將新地址R1+8寫入R1。
6 LDR  R0,[R1],R2        ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。
7 LDR  R0,[R1,R2,LSL2]! ;將存儲器地址爲R1+R2×4的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。
8 LDR  R0,[R1],R2,LSL2  ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。

2、【LDRB指令】
LDRB指令的格式爲:
LDR{條件}B 目的寄存器,<存儲器地址>
LDRB指令用於從存儲器中將一個8位的字節數據傳送到目的寄存器中,同時將寄存器的高24位清零。
該指令通常用於從存儲器中讀取8位的字節數據到通用寄存器,然後對數據進行處理。當程序計數器PC作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。
指令示例:

1 LDRB  R0,[R1]      ;將存儲器地址爲R1的字節數據讀入寄存器R0,並將R0的高24位清零。
2 LDRB  R0,[R1,#8]     ;將存儲器地址爲R1+8的字節數據讀入寄存器R0,並將R0的高24位清零。

3、【LDRH指令】
LDRH指令的格式爲:
LDR{條件}H 目的寄存器,<存儲器地址>
LDRH指令用於從存儲器中將一個16位的半字數據傳送到目的寄存器中,同時將寄存器的高16位清零。
該指令通常用於從存儲器中讀取16位的半字數據到通用寄存器,然後對數據進行處理。當程序計數器PC作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。
指令示例:

1 LDRH  R0,[R1]      ;將存儲器地址爲R1的半字數據讀入寄存器R0,並將R0的高16位清零。
2 LDRH  R0,[R1,#8]     ;將存儲器地址爲R1+8的半字數據讀入寄存器R0,並將R0的高16位清零。
3 LDRH  R0,[R1,R2]     ;將存儲器地址爲R1+R2的半字數據讀入寄存器R0,並將R0的高16位清零。

4、【STR指令】
STR指令的格式爲:
STR{條件} 源寄存器,<存儲器地址>
STR指令用於從源寄存器中將一個32位的字數據傳送到存儲器中。該指令在程序設計中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。
指令示例:

1 STR R0,[R1],#8 ;將R0中的字數據寫入以R1爲地址的存儲器中,並將新地址R1+8寫入R1。
2 STR R0,[R1,#8] ;將R0中的字數據寫入以R1+8爲地址的存儲器中。

5、【STRB指令】
STRB指令的格式爲:
STR{條件}B 源寄存器,<存儲器地址>
STRB指令用於從源寄存器中將一個8位的字節數據傳送到存儲器中。該字節數據爲源寄存器中的低8位。
指令示例:

1 STRB  R0,[R1]      ;將寄存器R0中的字節數據寫入以R1爲地址的存儲器中。
2 STRB  R0,[R1,#8]     ;將寄存器R0中的字節數據寫入以R1+8爲地址的存儲器中。

6、【STRH指令】
STRH指令的格式爲:
STR{條件}H 源寄存器,<存儲器地址>
STRH指令用於從源寄存器中將一個16位的半字數據傳送到存儲器中。該半字數據爲源寄存器中的低16位。
指令示例:

1 STRH  R0,[R1]      ;將寄存器R0中的半字數據寫入以R1爲地址的存儲器中。
2 STRH  R0,[R1,#8]     ;將寄存器R0中的半字數據寫入以R1+8爲地址的存儲器中。

7、【批量數據加載/存儲指令指令】
ARM微處理器所支持批量數據加載/存儲指令可以一次在一片連續的存儲器單元和多個寄存器之間傳送數據,批量加載指令用於將一片連續的存儲器中的數據傳送到多個寄存器,批量數據存儲指令則完成相反的操作。常用的加載存儲指令如下:

1  — LDM  批量數據加載指令
2 — STM  批量數據存儲指令

【LDM(或STM)指令】
LDM(或STM)指令的格式爲:

LDM(或STM){條件}{類型} 基址寄存器{!},寄存器列表{∧}

LDM(或STM)指令用於從由基址寄存器所指示的一片連續存儲器到寄存器列表所指示的多個寄存器之間傳送數據,該指令的常見用途是將多個寄存器的內容入棧或出棧。其中,{類型}爲以下幾種情況:

1 IA 每次傳送後地址加1;
2 IB 每次傳送前地址加1;
3 DA 每次傳送後地址減1;
4 DB 每次傳送前地址減1;
5 FD 滿遞減堆棧;
6 ED 空遞減堆棧;
7 FA 滿遞增堆棧;
8 EA 空遞增堆棧;

{!}爲可選後綴,若選用該後綴,則當數據傳送完畢之後,將最後的地址寫入基址寄存器,否則基址寄存器的內容不改變。
基址寄存器不允許爲R15,寄存器列表可以爲R0~R15的任意組合。
{∧}爲可選後綴,當指令爲LDM且寄存器列表中包含R15,選用該後綴時表示:除了正常的數據傳送之外,還將SPSR複製到CPSR。
同時,該後綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當前模式下的寄存器。
指令示例:

1 STMFD  R13!,{R0,R4-R12,LR}  ;將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧。
2 LDMFD  R13!,{R0,R4-R12,PC}  ;將堆棧內容恢復到寄存器(R0,R4到R12,LR)。

五.彙編異常產生指令
1、【SWI指令】
SWI指令的格式爲:

SWI{條件} 24位的立即數

SWI指令用於產生軟件中斷,以便用戶程序能調用操作系統的系統例程。操作系統在SWI的異常處理程序中提供相應的系統服務,指令中24位的立即數指定用戶程序調用系統例程的類型,相關參數通過通用寄存器傳遞,當指令中24位的立即數被忽略時,用戶程序調用系統例程的類型由通用寄存器R0的內容決定,同時,參數通過其他通用寄存器傳遞。
指令示例:

SWI  0x02      ;該指令調用操作系統編號位02的系統例程。

2、【BKPT指令】
BKPT指令的格式爲:

1 BKPT   16位的立即數
2 BKPT指令產生軟件斷點中斷,可用於程序的調試。

六.彙編僞代碼

1.【AREA】一個彙編程序至少要包含一個段,當程序太長時,也可以將程序分爲多個代碼段和數據段,因此在彙編程序的開頭,我們一般的語句會用到AREA。

語法格式:AREA 段名 屬性 1 ,屬性 2 ,....  

AREA 僞指令用於定義一個代碼段或數據段。其中,段名若以數字開頭,則該段名需用 “ | ” 括起來,如 |1_test| 。
屬性字段表示該代碼段(或數據段)的相關屬性,多個屬性用逗號分隔。常用的屬性如下:

1 — CODE 屬性:用於定義代碼段,默認爲 READONLY 。            
2 — DATA 屬性:用於定義數據段,默認爲 READWRITE 。      
3 — READONLY 屬性:指定本段爲只讀,代碼段默認爲 READONLY 。          
4 — READWRITE 屬性:指定本段爲可讀可寫,數據段的默認屬性爲 READWRITE 。  
5  — ALIGN 屬性:使用方式爲ALIGN 表達式。在默認時,ELF(可執行連接文件)的代碼段和數據段是按字對齊的,表達式的取值範圍爲 0 ~31,相應的對齊方式爲2表達式次方。
6  — COMMON 屬性:該屬性定義一個通用的段,不包含任何的用戶代碼和數據。各源文件中同名的 COMMON 段共享同一段存儲單元。

使用示例:

AREA Init , CODE , READONLY ;該僞指令定義了一個代碼段,段名爲 Init ,屬性爲只讀。 

2、【ALIGN】語法格式:

ALIGN { 表達式 { ,偏移量 }}    

ALIGN 僞指令可通過添加填充字節的方式,使當前位置滿足一定的對其方式。其中,表達式的值用於指定對齊方式,可能的取值爲2的冪,如 1 、2 、4 、8 、16 等。
若未指定表達式,則將當前位置對齊到下一個字的位置。偏移量也爲一個數字表達式,若使用該字段,則當前位置的對齊方式爲:2的表達式次冪+偏移量。            
使用示例:

1 AREA Init,CODE ,READONLY,ALIEN=3;指定後面的指令爲 8 字節對齊。      
2 ....
3 ;指令序列  
4 .... 
5 END      

3、【CODE16、CODE32】            
語法格式:CODE16 (或 CODE32 )

CODE16 僞指令通知編譯器,其後的指令序列爲 16 位的 Thumb 指令。      
CODE32 僞指令通知編譯器,其後的指令序列爲 32 位的 ARM 指令。            
若在彙編源程序中同時包含 ARM 指令和 Thumb 指令時,可用 CODE16 僞指令通知編譯器其後的指令序列爲 16 位的 Thumb 指令, CODE32 僞指令通知編譯器其後的指令序列爲 32 位的 ARM 指令。
因此,在使用 ARM 指令和 Thumb 指令混合編程的代碼裏,可用這兩條僞指令進行切換,但注意他們只通知編譯器其後指令的類型,並不能對處理器進行狀態的切換。            
使用示例:

 1 AREA Init ,CODE ,READONLY            
 2 ....      
 3 CODE32 ;通知編譯器其後的指令爲 32 位的 ARM 指令            
 4 LDR R0,=NEXT+1 ;將跳轉地址放入寄存器 R0      
 5 BX R0 ;程序跳轉到新的位置執行,並將處理器切換到 Thumb 工作狀態      
 6 ....     
 7 CODE16 ;通知編譯器其後的指令爲 16 位的 Thumb 指令            
 8 NEXT LDR R3,=0x3FF            
 9 ....     
10 END ;程序結束         

4、【ENTRY】            
語法格式:ENTRY      
ENTRY 僞指令用於指定彙編程序的入口點。在一個完整的彙編程序中至少要有一個 ENTRY (也可以有多個,當有多個 ENTRY 時,程序的真正入口點由鏈接器指定),但在一個源文件裏最多隻能有一個 ENTRY (可以沒有)。            
使用示例:

1 AREA Init , CODE , READONLY            
2 ENTRY ;指定應用程序的入口點
3 .....   

5、【END】            
語法格式:END      
END 僞指令用於通知編譯器已經到了源程序的結尾。           
使用示例:

1 AREA Init , CODE , READONLY            
2 ......     
3 END ;指定應用程序的結尾

未完待續~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章