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,LSL#3 ;將寄存器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 中的位 0、1、和 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 位[31:24]為條件標志位域,用f表示; 2 位[23:16]為狀態位域,用s表示; 3 位[15:8]為擴展位域,用x表示; 4 位[7:0]為控制位域,用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,LSL#2]! ;將存儲器地址為R1+R2×4的字數據讀入寄存器R0,并將新地址R1+R2×4寫入R1。 8 LDR R0,[R1],R2,LSL#2 ;將存儲器地址為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?;指定應用程序的結尾
未完待續~
轉載請注明出處!感謝GISPALAB實驗室的老師和同學們的幫助和支持~
總結
以上是生活随笔為你收集整理的ARMv8 汇编指令集查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.1对 特征归一化 的一些理解
- 下一篇: 优酷土豆资深工程师:MySQL高可用之M