日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

经常使用ARM汇编指令

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经常使用ARM汇编指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一面學習,一面總結,一面記錄。

以下是整理在網上找到的一些資料,簡單整理記錄一下,方便以后查閱。


ARM處理器的指令集能夠分為跳轉指令、數據處理指令、程序狀態寄存器(PSR)處理指令、載入/存儲指令、協處理器指令和異常產生指令6大指令。


一、跳轉指令


跳轉指令用于實現程序流程的跳轉,在ARM程序中有下面兩種方法能夠實現程序流程的跳轉。
Ⅰ.使用專門的跳轉指令。

Ⅱ.直接向程序計數器PC寫入跳轉地址值。通過向程序計數器PC寫入跳轉地址值,能夠實如今4GB的地址空間中的隨意跳轉,在跳轉之前結合使用MOV LR,PC等類似指令,能夠保存將來的返回地址值。從而實如今4GB連續的線性地址空間的子程序調用。


ARM指令集中的跳轉指令能夠完畢從當前指令向前或向后的32MB的地址空間的跳轉,包含下面4條指令:


1、B指令


B指令的格式為:
B{條件} 目標地址
B指令是最簡單的跳轉指令。一旦遇到一個B指令。ARM處理器將馬上跳轉到給定的目標地址,從那里繼續運行。注意存儲在跳轉指令中的實際值是相對當前PC 值的一個偏移量,而不是一個絕對地址,它的值由匯編器來計算(參考尋址方式中的相對尋址)。它是24位有符號數,左移兩位后有符號擴展為32 位,表示的有效偏移為26 位(前后32MB的地址空間)。下面指令:
B??? Label???????????? ;程序無條件跳轉到標號Label處運行
CMP R1,#0????? ;當CPSR寄存器中的Z條件碼置位時,程序跳轉到標號Label處運行

BEQ Label??????


2、BL指令


BL指令的格式為:
BL{條件} 目標地址
BL是還有一個跳轉指令,但跳轉之前。會在寄存器R14中保存PC的當前內容,因此。能夠通過將R14的內容又一次載入到PC中,來返回到跳轉指令之后的那個 指令處運行。

該指令是實現子程序調用的一個基本但經常使用的手段。
以 下指令:
BL?? Label???????? ;當程序無條件跳轉到標號Label處運行時,同一時候將當前的 PC值保存到

;R14(LR)中


3、BLX指令


BLX指令的格式為:
BLX 目標地址

BLX指令從ARM指令集跳轉到指令中所指定的目標地址,并將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同一時候將PC的當前內容保存到寄存 器R14中。因此,當子程序使用Thumb指令集。而調用者使用ARM指令集時,能夠通過BLX指令實現子程序的調用和處理器工作狀態的切換。

同一時候,子程 序的返回能夠通過將寄存器R14值拷貝到PC中來完畢。


4、BX指令


BX指令的格式為:
BX{條件} 目標地址
BX指令跳轉到指令中所指定的目標地址。目標地址處的指令既能夠是ARM指令,也能夠是Thumb指令。

二、數據處理指令


數據處理指令可分為數據傳送指令、算術邏輯運算指令 和比較指令等。


數據傳送指令用于在寄存器和存儲器之間進行數據的雙向傳輸。
算術邏輯運算指令完畢經常使用的算術與邏輯的運算,該類指令不但將運算結果保存在目的寄存器中,同一時候更新CPSR中的對應條件標志位。
比較指令不保存運算結果。僅僅更新CPSR中對應的條件標志位。

數據處理指令共下面16條。


1、MOV指令(傳送)


MOV指令的格式為:
MOV{條件}{S} 目的寄存器。源操作數
MOV指令可完畢從還有一個寄存器、被移位的寄存器或將一個馬上數載入到目的寄存器。當中S選項決定指令的操作是否影響CPSR中條件標志位的值,當沒有S 時指令不更新CPSR中條件標志位的值。
指令演示樣例:
MOV R1。R0??????????????????? ;將寄存器R0的值傳送到寄存器R1
MOV PC。R14????????????????? ;將寄存器R14的值傳送到 PC,經常使用于子程序返回

MOV R1。R0。LSL#3????;將寄存器R0的值左移3位后傳送到R1


2、MVN指令(求反)


MVN指令的格式為:
MVN{條件}{S} 目的寄存器。源操作數
MVN指令可完畢從還有一個寄存器、被移位的寄存器、或將一個馬上數載入到目的寄存器。與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值 傳送到目的寄存器中。

當中S決定指令的操作是否影響CPSR中條件標志位的值。當沒有S時指令不更新CPSR中條件標志位的值。
指令演示樣例:

MVN R0,#0????????????。將 馬上數0取反傳送到寄存器R0中,完畢后R0=-1


3、CMP指令(比較)


CMP指令的格式為:
CMP{條件} 操作數1,操作數2
CMP指令用于把一個寄存器的內容和還有一個寄存器的內容或馬上數進行比較。同一時候更新CPSR中條件標志位的值。該指令進行一次減法運算。但不存儲結果,僅僅 更改條件標志位。 標志位表示的是操作數1與操作數2的關系(大、小、相等),比如,當操作數1大于操作操作數2,則此后的有GT后綴的指令將能夠運行。
指令演示樣例:
CMP?? R1,R0???????;將寄存器R1的值與寄存器R0的值相減,并依據 結果設置CPSR的標
。志位

CMP R1,#100???;將寄存器R1的值與馬上數100相減。并根 據結果設置CPSR的標志位


4、CMN指令(負數比較)


CMN指令的格式為:
CMN{條件} 操作數1,操作數2
CMN指令用于把一個寄存器的內容和還有一個寄存器的內容或馬上數取反后進行比較,同一時候更新CPSR中條件標志位的值。該指令實際完畢操作數1和操作數2相 加。并依據結果更改條件標志位。
指令演示樣例:
CMN?? R1。R0?????;將寄存器R1的值與寄存器R0的值相加。并依據 結果設置CPSR
。的標志位

CMN R1。#100??;將寄存器R1的值與馬上數100相加。并依據 結果設置CPSR的標志位


5、TST指令(測試)


TST指令的格式為:
TST{條件} 操作數1,操作數2
TST指令用于把一個寄存器的內容和還有一個寄存器的內容或馬上數進行按位的與運算,并依據運算結果更新CPSR中條件標志位的值。操作數1是要測試的數 據。而操作數2是一個位掩碼。該指令一般用來檢測是否設置了特定的位。


指令演示樣例:
TST?? R1。#%1????????????。用于測試在寄存器R1中是否設置了最低位(%表 示二進制數)
TST R1,#0xffe?????????? ;將寄存器R1的值與馬上數0xffe按位與。并依據 結果設置CPSR

;的標志位


6、TEQ指令(測試相等)


TEQ指令的格式為:
TEQ{條件} 操作數1,操作數2
TEQ指令用于把一個寄存器的內容和還有一個寄存器的內容或馬上數進行按位的異或運算,并依據運算結果更新CPSR中條件標志位的值。該指令通經常使用于比較操作數1和操作數2是否相等。
指令演示樣例:
TEQ?? R1。R2????????? ;將寄存器R1的值與寄存器R2的值按位異或。并依據結果 設置CPSR

;的標志位


7、ADD指令(相加)


ADD指令的格式為:
ADD{條件}{S} 目的寄存器,操作數1。操作數2
ADD指令用于把兩個操作數相加,并將結果存放到目的寄存器中。

操作數1應是一個寄存器。操作數2能夠是一個寄存器。被移位的寄存器,或一個馬上數。
指令演示樣例:
ADD???? R0,R1,R2????????????????? 。 R0 = R1 + R2
ADD???? R0,R1,#256??????????????? ; R0 = R1 + 256

ADD???? R0,R2。R3。LSL#1?????? 。 R0 = R2 + (R3 << 1)


8、ADC指令(帶進位相加)


ADC指令的格式為:
ADC{條件}{S} 目的寄存器,操作數1,操作數2
ADC指令用于把兩個操作數相加,再加上CPSR中的C條件標志位的值,并將結果存放到目的寄存器中。它使用一個進位標志位。這樣就能夠做比32位大的數 的加法,注意不要忘記設置S后綴來更改進位標志。操作數1應是一個寄存器。操作數2能夠是一 個寄存器,被移位的寄存器,或一個馬上數。
下面指令序列完畢兩個128位數的加法。第一個數由高到低存放在寄存器R7~R4。第二個數由高到低存放在寄存器R11~R8,運算結果由高到低存放在寄 存器R3~R0:
ADDS??? R0,R4。R8????????? 。 加低端的字
ADCS??? R1,R5,R9????????? ; 加第二個字,帶進位
ADCS??? R2,R6。R10??????? 。 加第三個字,帶進位

ADC????? R3,R7。R11??????? ; 加第四個字,帶進位


9、SUB指令(相減)


SUB指令的格式為:
SUB{條件}{S} 目的寄存器。操作數1。操作數2
SUB指令用于把操作數1減去操作數2,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2能夠是一個寄存器,被移位的寄存器,或一個馬上 數。該指令可用于有符號數或無符號數的減法運算。


指令演示樣例:
SUB???? R0,R1,R2???????????????? ; R0 = R1 - R2
SUB???? R0,R1,#256??????????? ; R0 = R1 - 256

SUB???? R0,R2,R3,LSL#1????? ; R0 = R2 - (R3 << 1)


10、~~~~C指令


~~~~C指令的格式為:
~~~~C{條件}{S} 目的寄存器,操作數1。操作數2
~~~~C指令用于把操作數1減去操作數2,再減去CPSR中的C條件標志位的反碼,并將結果存放到目的寄存器中。操作數1應是一個寄存器。操作數2能夠 是一個寄存器。被移位的寄存器。或一個馬上數。該指令使用進位標志來表示借位,這樣就能夠做大于32位的減法,注意不要忘記設置S后綴來更改進位標志。該指令可用于有符號數或無符號數的減法運算。
指令演示樣例:

SUBS??? R0,R1,R2??????? ;R0 = R1 - R2 - 。C,并依據結果設置CPSR的進位標志位


11、R~~~~指令


R~~~~指令的格式為:
R~~~~{條件}{S} 目的寄存器。操作數1。操作數2
R~~~~指令稱為逆向減法指令,用于把操作數2減去操作數1,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2能夠是一個寄存器,被移位 的寄存器。或一個馬上數。該指令可用于有符號數或無符號數的減法運算。


指令演示樣例:
R~~~~???? R0。R1,R2???????????????????????? ; R0 = R2 – R1
R~~~~???? R0。R1,#256???????????????????? 。 R0 = 256 – R1

R~~~~???? R0。R2,R3。LSL#1?????????? 。 R0 = (R3 << 1) - R2


12、RSC指令(反向帶進位減)


RSC指令的格式為:
RSC{條件}{S} 目的寄存器,操作數1,操作數2
RSC指令用于把 操作數2減去操作數1,再減去CPSR中的C條件標志位的反碼,并將結果存放到目的寄存器中。

操作數1應是一個寄存器,操作數2能夠是一個寄存器。被移位 的寄存器,或一個馬上數。

該指令使用進位標志來表示借位,這樣就能夠做大于32位的減法。注意不要忘記設置S后綴來更改進位標志。該指令可用于有符號數或 無符號數的減法運算。


指令演示樣例:

RSC???? R0,R1,R2?????????? ;R0 = R2 – R1 - !

C


13、AND指令(邏輯位 與)


AND指令的格式為:
AND{條件}{S} 目的寄存器。操作數1,操作數2
AND指令用于在兩個操作數上進行邏輯與運算。并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2能夠是一個寄存器。被移位的寄存器,或一個 馬上數。

該指令經常使用于屏蔽操作數1的某些位。


指令演示樣例:

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


14、ORR指令(邏輯位 或)


ORR指令的格式為:
ORR{條件}{S} 目的寄存器,操作數1,操作數2
ORR指令用于在兩個操作數上進行邏輯或運算,并把結果放置到目的寄存器中。操作數1應是一個寄存器。操作數2能夠是一個寄存器,被移位的寄存器。或一個 馬上數。該指令經常使用于設置操作數1的某些位。
指令演示樣例:

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


15、EOR指令(邏輯位 異或)


EOR指令的格式為:
EOR{條件}{S} 目的寄存器。操作數1,操作數2
EOR指令用于在兩個操作數上進行邏輯異或運算,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2能夠是一個寄存器。被移位的寄存器,或一 個馬上數。

該指令經常使用于反轉操作數1的某些位。
指令演示樣例:

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


16、BIC指令(位清零)


BIC指令的格式為:
BIC{條件}{S} 目的寄存器。操作數1。操作數2
BIC指令用于清除操作數1的某些位,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2能夠是一個寄存器。被移位的寄存器,或一個馬上數。

操作數2為32位的掩碼。假設在掩碼中設置了某一位。則清除這一位。未設置的掩碼位保持不 變。
指令演示樣例:
BIC R0。R0。#%1011??? ;該指令清除R0中的位 0、1、和 3,其余的位保持不變。

三、乘法指令與乘加指令


ARM 微處理器支持的乘法指令與乘加指令共同擁有6條,可分為運算結果為32位和運算結果為64位兩類,與前面的數據處理指令不同,指令中的全部操作數、目的寄存器 必須為通用寄存器,不能對操作數使用馬上數或被移位的寄存器,同一時候,目的寄存器和操作數1必須是不同的寄存器。

乘法指令與乘加指令共同擁有下面6條:


1、MUL指令(相乘)


MUL指令的格式為:
MUL{條件}{S} 目的寄存器。操作數1,操作數2
MUL指令完畢將操作數1與操作數2的乘法運算,并把結果放置到目的寄存器中。同一時候能夠依據運算結果設置CPSR中對應的條件標志位。

當中。操作數1和操 作數2均為32位的有符號數或無符號數。


指令演示樣例:
MUL R0,R1。R2??????????? ;R0 = R1 × R2

MULS R0,R1。R2?????? ???? ;R0 = R1 × R2,同一時候設置CPSR中的相關條件標志位


2、MLA指令(帶累加的相乘)


MLA指令的格式為:
MLA{條件}{S} 目的寄存器。操作數1。操作數2,操作數3
MLA指令完畢將操作數1與操作數2的乘法運算,再將乘積加上操作數3,并把結果放置到目的寄存器中,同一時候能夠依據運算結果設置CPSR中對應的條件標志 位。當中,操作數1和操作數2均為32位的有符號數或無符號數。


指令演示樣例:
MLA?? R0,R1,R2,R3??????????? ;R0 = R1 × R2 + R3

MLAS R0,R1。R2。R3??????????? ;R0 = R1 × R2 + R3。同一時候設置CPSR中的相關條件標志位


3、SMULL指令


SMULL指令的格式為:
SMULL{條件}{S}?? 目的寄存器Low,目的寄存器High,操作數1,操作數2
SMULL指令完畢將操作數1與操作數2的乘法運算,并把結果的低32位放置到目的寄存器Low中,結果的高32位放置到目的寄存器High中。同一時候能夠 依據運算結果設置CPSR中對應的條件標志位。當中,操作數1和操作數2均為32位的有符號數。
指令演示樣例:
SMULL?? R0,R1,R2,R3???? 。R0 = (R2 × R3)的低32位

??????????????????????????????????????????????? 。R1 = (R2 × R3)的高32位


4、SMLAL指令


SMLAL指令的格式為:
SMLAL{條件}{S}?? 目的寄存器Low,目的寄存器High。操作數1,操作數2
SMLAL指令完畢將操作數1與操作數2的乘法運算,并把結果的 低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同 時能夠依據運算結果設置CPSR中對應的條件標志位。當中,操作數1和操作數2均為32位的有符號數。
對于目的寄存器Low,在指令運行前存放64位加數的低32位,指令運行后存放結果的低32位;對于目的寄存器High,在指令運行前存放64位加數的高32位,指令運行后存放結果的高32位。


指令演示樣例:
SMLAL?? R0,R1。R2,R3?????? ;R0 = (R2 × R3)的低32位 + R0

???????????????????????????????????????????????? ;R1 = (R2 × R3)的高32位 + R1


5、UMULL指令


UMULL指令的格式為:
UMULL{條件}{S}?? 目的寄存器Low。目的寄存器High。操作數1,操作數2
UMULL指令完畢將操作數1與操作數2的乘法運算。并把結果的低32位放置到目的寄存器Low中。結果的高32位放置到目的寄存器High中,同一時候能夠 依據運算結果設置CPSR中對應的條件標志位。當中。操作數1和操作數2均為32位的無符號數。
指令演示樣例:
UMULL?? R0,R1,R2。R3?????? 。R0 = (R2 × R3)的低32位

???????????????????????????????????????????????? 。R1 = (R2 × R3)的高32位


6、UMLAL指令


UMLAL指令的格式為:
UMLAL{條件}{S}?? 目的寄存器Low,目的寄存器High,操作數1。操作數2
UMLAL指令完畢將操作數1與操作數2的乘法運算,并把結果的 低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High 中,同 時能夠依據運算結果設置CPSR中對應的條件標志位。當中。操作數1和操作數2均為32位的無符號數。


對于目的寄存器Low。在指令運行前存放64位加數的低32位,指令運行后存放結果的低32位。對于目的寄存器High,在指令運行前存放64位加數的高32位。指令運行后存放結果的高32位。
指令演示樣例:
UMLAL?? R0,R1,R2。R3???????? ?? ;R0 = (R2 × R3)的低32位 + R0

?????????????????????????????????????????????????????? 。R1 = (R2 × R3)的高32位 + R1


四、程序狀態寄存器訪問指令


1、MRS指令


MRS指令的格式為:
MRS{條件}??? 通用寄存器 程序狀態寄存器(CPSR或SPSR)
MRS指令用于將程序狀態寄存器的內容傳送到通用寄存器中。該指令一般用在下面兩種情況:
Ⅰ.當須要改變程序狀態寄存器的內容時。可用MRS將程序狀態寄存器的內容讀入通用寄存器。改動后再寫回程序狀態寄存器。
Ⅱ.當在異常處理或進程切換時,須要保存程序狀態寄存器的值,可先用該指令讀出程序狀態寄存器的值。然后保存。
指令演示樣例:
MRS R0。CPSR???????????????????????? ;傳送CPSR的內容到R0

MRS R0,SPSR???????????????????????? 。傳送 SPSR的內容到R0


2、MSR指令


MSR指令的格式為:
MSR{條件}??? 程序狀態寄存器(CPSR或SPSR)_<域>。操作數
MSR指令用于將操作數的內容傳送到程序狀態寄存器的特定域中。當中。操作數能夠為通用寄存器或馬上數。

<域>用于設置程序狀態寄存器中須要 操作的位,32位的程序狀態寄存器可分為4個域:
位[31:24]為條件位域。用f表示;
位[23:16]為狀態位域。用s表示。
位[15:8] 為擴展位域,用x表示。
位[7:0]??? 為控制位域,用c表示;
該指令通經常使用于恢復或改變程序狀態寄存器的內容,在使用時,一般要在MSR指令中指明將要操作的域。
指令演示樣例:
MSR CPSR,R0??????? ;傳送R0的內容到CPSR
MSR SPSR,R0??????? 。傳送R0的內容到SPSR

MSR CPSR_c,R0???? ;傳送R0的內容到SPSR。但只改動CPSR中的控制位域


五、載入/存儲指令。ARM微處理器支持載入/存儲指令用于在寄存器和存儲器之間傳送數據,載入指令用于將存儲器中的數據傳送到寄存器,存儲 指令則完畢相反的操作。經常使用的載入存儲指令例如以下:


1、LDR指令


LDR指令的格式為:

LDR{條件} 目的寄存器,<存儲器地址>
LDR指令用于從存儲器中將一個32位的字數據傳送到目的寄存器中。該指令通經常使用于從存儲器中讀取32位的字數據到通用寄存器,然后對數據進行處理。

當程序計數器PC作為 目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址。從而能夠實現程序流程的跳轉。該指令在程序設計 中比較經常使用,且尋址方式靈活多樣,請讀者認真掌握。


指令演示樣例:
LDR R0,[R1]??????????????? 。將存儲器地址為R1的字數據讀入寄存器R0。
LDR R0,[R1,R2]?????? ;將存儲器地址為R1+R2的字數據讀入寄存器R0。
LDR R0,[R1,#8]??????? ;將存儲器地址為R1+8的字數據讀入寄存器R0。
LDR R0,[R1,R2] !

??? ;將存儲器地址為R1+R2的字數據讀入寄存器R0,并將新地 址
;R1+R2寫入R1。


LDR R0,[R1,#8] !

?? ;將存儲器地址為R1+8的字數據讀入寄存器R0。并將新地址 R1
。+8寫入R1。


LDR R0,[R1]。R2??????? ;將存儲器地址為R1的字數據讀入寄存器R0,并將新地址 R1+
;R2寫入R1。
LDR R0,[R1。R2。LSL#2]! ;將存儲器地址為R1+R2×4的字數據讀入寄存器R0,并
;將新地址R1+R2×4寫入R1。


LDR R0。[R1],R2,LSL#2????? ;將存儲器地址為R1的字數據讀入 寄存器R0。并將新地

。址R1+R2×4寫入R1。


2、LDRB指令


LDRB指令的格式為:
LDR{條件}B 目的寄存器,<存儲器地址>
LDRB指令用于從存儲器中將一個8位的字節數據傳送到目的寄存器中。同一時候將寄存器的高24位清零。 該指令通經常使用于從存儲器中讀取8位的字節數據到通用寄存器,然后對數據進行處理。

當程序計數器PC作為目的寄存器時。指令從存儲器中讀取的字數據被當作目 的地址,從而能夠實現程序流程的跳轉。
指令演示樣例:
LDRB R0,[R1]???? 。將存儲器地址為R1的字節數據讀入寄存器 R0,并將R0的高24
。位清零。


LDRB R0。[R1,#8]?????? ;將存儲器地址為R1+8的字節數據讀入寄存器R0,并將 R0的

;高24位清零。


3、LDRH指令


LDRH指令的格式為:
LDR{條件}H 目的寄存器。<存儲器地址>
LDRH指令用于從存儲器中將一個16位的半字數據傳送到目的寄存器中,同一時候將寄存器的高16位清零。 該指令通經常使用于從存儲器中讀取16位的半字數據到通用寄存器,然后對數據進行處理。當程序計數器PC作為目的寄存器時。指令從存儲器中讀取的字數據被當作 目的地址,從而能夠實現程序流程的跳轉。
指令演示樣例:
LDRH?? R0。[R1]???????????? 。將存儲器地址為R1的半字數據讀入寄存器 R0,并將R0的高
;16位清零。
LDRH R0,[R1。#8]???? 。將存儲器地址為R1+8的半字數據讀入寄存器R0,并將R0 的
。高16位清零。


LDRH R0。[R1,R2]???? ;將存儲器地址為R1+R2的半字數據讀入寄存器R0。并將 R0的

;高16位清零。


4、STR指令


STR指令的格式為:
STR{條件} 源寄存器,<存儲器地址>
STR指令用于從源寄存器中將一個32位的字數據傳送到存儲器中。 該指令在程序設計中比較經常使用。且尋址方式靈活多樣。使用方式可參考指令LDR。
指令演示樣例:
STR R0。[R1],#8?????????? ;將R0中的字數據寫入以R1為地址的存儲器中。并 將新地址
。R1+8寫入R1。

STR R0,[R1,#8]????????? ;將R0中的字數據寫入以R1+8為地址的存儲器中。


5、STRB指令


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


指令演示樣例:
STRB??? R0。[R1]???????????? 。將寄存器R0中的字節數據寫入以R1為地 址的存儲器中。


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


6、STRH指令


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


指令演示樣例:
STRH?? R0,[R1]??????????? 。將寄存器R0中的半字數據寫入以R1為地址的 存儲器中。

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



六、批量數據載入/存儲指令。


ARM微處理器所支持批量數據載入/存儲指令能夠一次在一片連續的存儲器單元和多個寄存器之間傳送數據,批量載入指令 用于將一片連續的存儲器中的數據傳送到多個寄存器。批量數據存儲指令則完畢相反的操作。

經常使用的載入存儲指令例如以下:LDM(或STM)指令

LDM(或STM)指令的格式為:
LDM(或STM){條件}{類型} 基址寄存器{!}。寄存器列表{∧}
LDM(或STM)指令用于從由基址寄存器所指示的一片連續存儲器到寄存器列表所指示的多個寄存器之間傳送數據,該指令的常見用途是將多個寄存器的內容入棧或出棧。當中。{類型}為 下面幾種情況:
IA??? 每次傳送后地址加1;
IB????? 每次傳送前地址加1。
DA?? 每次傳送后地址減1;
DB?? 每次傳送前地址減1;
FD?? 滿遞減堆棧;
ED?? 空遞減堆棧。
FA?? 滿遞增堆棧;
EA?? 空遞增堆棧;
{!}為可選后綴,若選用該后綴,則當數據 傳送完成之后。將最后的地址寫入基址寄存器,否則基址寄存器的內容不改變。
基址寄存器不同意為R15,寄存器列表能夠為R0~R15的隨意組合。
{∧}為可選后綴,當指令為LDM且寄存器列表中包括R15。選用該后綴時表示:除了正常的數據傳送之外,還將SPSR拷貝到CPSR。

同一時候,該后綴還表 示傳入或傳出的是用戶模式下的寄存器,而不是當前模式下的寄存器。
指令演示樣例:
STMFD R13!,{R0,R4-R12,LR}??????? ;將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧。


LDMFD R13!, {R0,R4-R12。PC}?????? ;將堆棧內容恢復到寄存器(R0,R4到R12,LR)。

七、數據交換指令


1、SWP指令


SWP指令的格式為:
SWP{條件} 目的寄存器,源寄存器1,[源寄存器2]
SWP指令用于將源寄存器2所指向的存儲器中的字數據傳送到目的寄存器中,同一時候將源寄存器1中的字數據傳送到源寄存器2所指向的存儲器中。

顯然,當源寄存 器1和目的寄存器為同一個寄存器時。指令交換該寄存器和存儲器的內容。
指令演示樣例:
SWP?? R0,R1,[R2]???? 。將R2所指向的存儲器中的字數據傳送到R0,同一時候將R1 中的字數據傳送到R2所指向的存儲單元。

SWP?? R0,R0,[R1]???? ;該指令完畢將R1所指向的存儲器中的字數 據與R0中的數據交換。


2、SWPB指令


SWPB指令的格式為:
SWP{條件}B 目的寄存器,源寄存器1,[源寄存器2]
SWPB指令用于將源寄存器2所指向的存儲器中的字節數據傳送到目的寄存器中,目的寄存器的高24清零,同一時候將源寄存 器1中的字節數據傳送到源寄存器2所指向的存儲器中。

顯然。當源寄存器1和目的寄存器為同一個寄存器時。指令交換該寄存器和存儲器的內容。


指令演示樣例:
SWPB?? R0,R1,[R2]?????? 。將R2所指向的存儲器中的字節數據傳送到 R0。R0的高24位清零。同一時候將R1中的低8位數據傳送到R2所指向的存儲單元。

SWPB?? R0,R0,[R1]????? ;該指令完畢將R1所指向的存儲器中的 字節數據與R0中的低8位數據交換。


八、移位指令


1、LSL(或ASL)


LSL(或ASL)的格式為:
通用寄存器。LSL(或ASL) 操作數?????
LSL(或ASL)可完畢對通用寄存器中的內容進行邏輯(或算術)的左移操作。按操作數所指定的數量向左移位,低位用零來填充。

當中,操作數能夠是通用寄存器,也能夠是馬上數(0~31)。


操作演示樣例

MOV?? R0, R1, LSL #2????????? ;將R1中的內容左移兩位后傳送到R0 中。


2、LSR


LSR的格式為:
通用寄存器,LSR 操作數?????
LSR可完畢對通用寄存器中的內容進行右移的操作。按操作數所指定的數量向右移位。左端用零來填充。當中,操作數能夠 是通用寄存器,也能夠是馬上數(0~31)。


操作演示樣例:

MOV?? R0, R1, LSR #2???????? ;將R1中的內容右移兩位后傳送到R0 中,左端用零來填充。


3、ASR


ASR的格式為:
通用寄存器。ASR 操作數?????
ASR可完畢對通用寄存器中的內容進行右移的操作。按操作數所指定的數量向右移位,左端用第31位的值來填充。

當中。操作數能夠是通用寄存器。也能夠是立 即數(0~31)。
操作演示樣例:

MOV??? R0, R1, ASR #2??????? 。將R1中的內容右移兩位后傳送到R0 中,左端用第31位的值來填充。


4、ROR


ROR的格式為:
通用寄存器,ROR 操作數?????
ROR可完畢對通用寄存器中的內容進行循環右移的操作,按操作數所指定的數量向右循環移位,左端用右端移出的位來填充。當中。操作數能夠是通用寄存器。也 能夠是馬上數(0~31)。顯然,當進行32位的循環右移操作時,通用寄存器中的值不改變。


操作演示樣例:

MOV??? R0, R1, ROR #2?????? 。將R1中的內容循環右移兩位后傳送到R0 中。


5、RRX


RRX的格式為:
通用寄存器。RRX 操作數?????
RRX可完畢對通用寄存器中的內容進行帶擴展的循環右移的操作。按操作數所指定的數量向右循環移位,左端用進位標志位C來填充。當中。操作數能夠是通用寄 存器,也能夠是馬上數(0~31)。


操作演示樣例:
MOV?? R0, R1, RRX #2???????? 。將R1中的內容進行帶擴展的循環右移兩位 后傳送到R0中。


?

九、協處理器指令


1、CDP指令


CDP指令的格式為:
CDP{條件} 協處理器編碼。協處理器操作碼1,目的寄存器。源寄存器1,源寄存器2,協處理器操作碼2。


CDP指令用于ARM處理器通知ARM協處理器運行特定的操作,若協處理器不能成功完畢特定的操作,則產生沒有定義指令異常。當中協處理器操作碼1和協處理 器操作碼2為協處理器將要運行的操作。目的寄存器和源寄存器均為協處理器的寄存器,指令不涉及ARM處理器的寄存器和存儲器。
指令演示樣例:

CDP?? P3,2。C12,C10,C3,4?? 。該指令完畢協處理器P3的初始化


2、LDC指令


LDC指令的格式為:
LDC{條件}{L} 協處理器編碼,目的寄存器,[源寄存器]
LDC指令用于將源寄存器所指向的存儲器中的字數據傳送到目的寄存器中。若協處理器不能成功完畢傳送操作,則產生沒有定義指令異常。

當中,{L}選項表示指 令為長讀取操作,如用于雙精度數據的傳輸。
指令演示樣例:

LDC?? P3。C4,[R0]??????? ;將ARM處理器的寄存器R0所指向的存儲器中的字數 據傳送到協處理器P3的寄存器C4中。


3、STC指令


STC指令的格式為:
STC{條件}{L} 協處理器編碼,源寄存器。[目的寄存器]
STC指令用于將源寄存器中的字數據傳送到目的寄存器所指向的存儲器中,若協處理器不能成功完畢傳送操作,則產生沒有定義指令異常。當中,{L}選項表示指 令為長讀取操作,如用于雙精度數據的傳輸。
指令演示樣例:

STC?? P3,C4,[R0]???? 。將協處理器P3的寄存器C4中的字數據傳送到ARM處理 器的寄存器R0所指向的存儲器中。


4、MCR指令


MCR指令的格式為:


MCR{條件} 協處理器編碼,協處理器操作碼1,源寄存器,目的寄存器1,目的寄存器2。協處理器操作碼2。
MCR指令用于將ARM處理器寄存器中的數據傳送到協處理器寄存器中,若協處理器不能成功完畢操作,則產生沒有定義指令異常。當中協處理器操作碼1和協處理 器操作碼2為協處理器將要運行的操作,源寄存器為ARM處理器的寄存器。目的寄存器1和目的寄存器2均為協處理器的寄 存器。
指令演示樣例:

MCR?? P3。3,R0。C4,C5。6???? ;將ARM處理器寄存器R0中的數據傳送到協處 理器P3的寄存器C4和C5中。


5、MRC指令


MRC指令的格式為:
MRC{條件} 協處理器編碼。協處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協處理器操作碼2。
MRC指令用于將協處理器寄存器中的數據傳送到ARM處理器寄存器中,若協處理器不能成功完畢操作。則產生沒有定義指令異常。當中協處理器操作碼1和協處理 器操作碼2為協處理器將要運行的操作,目的寄存器為ARM處理器的寄存器,源寄存器1和源寄存器2均為協處理器的寄存器。
指令演示樣例:

MRC?? P3。3,R0,C4,C5,6???? ;該指令將協處理器P3的寄存器中的數據傳送到 ARM處理器寄存器中。


十、異常產生指令


1、SWI指令


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


指令演示樣例:

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


2、BKPT指令


BKPT指令的格式為:
BKPT?? 16位的馬上數
BKPT指令產生軟件斷點中斷,可用于程序的調試。

ARM匯編偽指令


在ARM匯編語言程序里,有一些特殊指令助記符,這些助記符與指令系統的助記符不同。沒有相相應的操作碼。通常稱這些特殊指令助記符為偽指令。他們所完畢 的操作稱為偽操作。

偽指令在源程序中的作用是為完畢匯編程序作各種準備工作的,這些偽指令僅在匯編過程中起作用。一旦匯編結束,偽指令的使命就完 成。

?????

?????? 在ARM 的匯編程序中。有例如以下幾種偽指令:符號定義偽指令、數據定義偽指令、匯編控制偽指令、宏指令以及其它偽指令。


一、符號定義(Symbol Definition)偽指令????


符號定義偽指令用于定義ARM 匯編程序中的變量、對變量賦值以及定義寄存器的別名等操作。

????
常見的符號定義偽指令有例如以下幾種:???
??? — 用于定義全局變量的GBLA 、GBLL 和GBLS 。

???
??? — 用于定義局部變量的LCLA 、LCLL 和LCLS 。???
??? — 用于對變量賦值的SETA 、SETL 、SETS 。???

??? — 為通用寄存器列表定義名稱的RLIST 。????


1、GBLA、GBLL 和GBLS???
??? 語法格式:???
??? GBLA (GBLL 或GBLS )全局變量名???
??? GBLA 、GBLL 和GBLS 偽指令用于定義一個ARM 程序中的全局變量,并將其初始化。當中:???
??? GBLA 偽指令用于定義一個全局的數字變量,并初始化為0 ;???
??? GBLL 偽指令用于定義一個全局的邏輯變量。并初始化為F(假);???
??? GBLS 偽指令用于定義一個全局的字符串變量,并初始化為空;???
??? 因為以上三條偽指令用于定義全局變量。因此在整個程序范圍內變量名必須唯一。???
??? 使用演示樣例:???
??? GBLA Test1 ;?????????? 定義一個全局的數字變量。變量名為 Test1。???
??? Test1 SETA 0xaa 。?? 將該變量賦值為0xaa。???
??? GBLL Test2 ;??????????? 定義一個全局的邏輯變量,變量名為 Test2。

???
??? Test2 SETL {TRUE} ;將該變量賦值為真。

???
??? GBLS Test3 ;???????????? 定義一個全局的字符串變量,變量名為 Test3。???
??? Test3 SETS “Testing” 。將該變量賦值為"Testing”。

??

2、LCLA、LCLL 和LCLS???
??? 語法格式:???
??? LCLA (LCLL 或 LCLS )局部變量名???
??? LCLA 、LCLL 和LCLS 偽指令用于定義一個ARM 程序中的局部變量,并將其初始化。當中:???
??? LCLA偽指令用于定義一個局部的數字變量。并初始化為0 ;???
??? LCLL偽指令用于定義一個局部的邏輯變量。并初始化為F(假);???
??? LCLS偽指令用于定義一個局部的字符串變量,并初始化為空;???
??? 以上三條偽指令用于聲明局部變量。在其作用范圍內變量名必須唯一。???
??? 使用演示樣例:???
??? LCLA Test4 ;??????????? 聲明一個局部的數字變 量,變量名為Test4。??
??? Test3 SETA 0xaa 。?? 將該變量賦值為0xaa。

???
?? LCLL Test5 ;???????????? 聲明一個局部的邏輯變 量,變量名為Test5。???
??? Test4 SETL {TRUE} ;將該變量賦值為真。

???
??? LCLS Test6 。???????????? 定義一個局部的字 符串變量,變量名為Test6。???
??? Test6 SETS “Testing” 。將該變量賦值為 "Testing”。???

3、SETA、SETL 和SETS???
??? 語法格式:???
??? 變量名 SETA (SETL 或 SETS )表達式???
??? 偽指令 SETA 、SETL 、SETS 用于給一個已經定義的全局變量或局部變量賦值。???
??? SETA偽指令用于給一個數學變量賦值;???
??? SETL偽指令用于給一個邏輯變量賦值;???
??? SETS偽指令用于給一個字符串變量賦值;???
??? 當中,變量名為已經定義過的全局變量或局部變量,表達式為將要賦給變量的值。

???
??? 使用演示樣例:???
??? LCLA Test3 。???????????? 聲明一個局部的數字變量,變量名為 Test3。???
??? Test3 SETA 0xaa 。??? 將該變量賦值為0xaa。???
??? LCLL Test4 ;???????????? 聲明一個局部的邏輯變量。變量名為 Test4。???
??? Test4 SETL {TRUE} ;將該變量賦值為真。

???

4 、RLIST???
??? 語法格式:???
??? 名稱 RLIST { 寄存器列表 }???
??? RLIST偽指令可用于對一個通用寄存器列表定義名稱,使用該偽指令定義的名稱可在ARM 指令 LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問次序為依據寄存器的編號由低到高。而與列表中的寄存器排列次序無關。

???
??? 使用演示樣例:???

??? RegList RLIST {R0-R5 。R8 ,R10} 。將寄存器列表名稱定義為 RegList 。可在ARM指令LDM/STM中通過該名稱訪問寄存器列表。???


二、數據定義(Data Definition)偽指令????


數據定義偽指令一般用于為特定的數據分配存儲單元,同一時候可完畢已分配存儲單元的初始化。????
常見的數據定義偽指令有例如以下幾種:???
??? — DCB 用于分配一片連續的字節存儲單元并用指定的數據初始化。

???
??? — DCW(DCWU)用于分配一片連續的半字存儲單元并用指定的數據初始化。

???
??? — DCD (DCDU)用于分配一片連續的字存儲單元并用指定的數據初始化。???
??? — DCFD(DCFDU)用于為雙精度的浮點數分配一片連續的字存儲單元并用指定的數據初始化。???
??? — DCFS(DCFSU)用于為單精度的浮點數分配一片連續的字存儲單元并用指定的數據初始化。???
??? — DCQ(DCQU)用于分配一片以8字節為單位的連續的存儲單元并用指定的數據初始化。

???
??? — SPACE 用于分配一片連續的存儲單元。???
??? — MAP 用于定義一個結構化的內存表首地址。???

??? — FIELD 用于定義一個結構化的內存表的數據域。???


1、DCB???
??? 語法格式:???
??? 標號 DCB 表達式???
??? DCB偽指令用于分配一片連續的字節存儲單元并用偽指令中指定的表達式初始化。當中,表達式能夠為0~255的數字或字符串。

DCB 也可用“=”取代。???
??? 使用演示樣例:???
??? Str DCB “This is a test” ;分配一片連續的字節存儲單元并初始化。
???
2、DCW(或DCWU)???
??? 語法格式:
??? 標號 DCW (或DCWU) 表達式???
??? DCW(或DCWU)偽指令用于分配一片連續的半字存儲單元并用偽指令中指定的表達式初始化。???
??? 當中。表達式能夠為程序標號或數字表達式。??
??? 用DCW分配的字存儲單元是半字對齊的。而用DCWU分配的字存儲單元并不嚴格半字對齊。

???
??? 使用演示樣例:???
??? DataTest DCW 1 ,2 。3 。分配一片連續的半字存儲單元并初始化。????

3、DCD(或DCDU)???
??? 語法格式:???
??? 標號 DCD(或DCDU) 表達式???
??? DCD(或DCDU)偽指令用于分配一片連續的字存儲單元并用偽指令中指定的表達式初始化。當中。表達式能夠為程序標號或數字表達式。DCD也可 用"&” 取代。???
??? 用DCD分配的字存儲單元是字對齊的。而用DCDU分配的字存儲單元并不嚴格字對齊。

???
??? 使用演示樣例:???
??? DataTest DCD 4 ,5 ,6 。分配一片連續的字存儲單元并初始化。


???
4、DCFD(或DCFDU)???
??? 語法格式:???
??? 標號 DCFD(或DCFDU) 表達式???
??? DCFD(或DCFDU)偽指令用于為雙精度的浮點數分配一片連續的字存儲單元并用偽指令中指定的表達式初始化。每一個雙精度的浮點數占領兩個字單元。

用 DCFD分配的字存儲單元是字對齊的。而用DCFDU分配的字存儲單元并不嚴格字對齊。???
??? 使用演示樣例:?????? FDataTest DCFD 2E115 ,-5E7 ;分配一片連續的字存儲單元并初始化 為指定的雙精度數。????

5、DCFS(或DCFSU)???
??? 語法格式:???
??? 標號 DCFS(或DCFSU) 表達式???
??? DCFS(或DCFSU)偽指令用于為單精度的浮點數分配一片連續的字存儲單元并用偽指令中指定的表達式初始化。每一個單精度的浮點數占領一個字單元。用 DCFS分配的字存儲單元是字對齊的。而用DCFSU分配的字存儲單元并不嚴格字對齊。

???
??? 使用演示樣例:???
??? FDataTest DCFS 2E5 ,-5E -7 。分配一片連續的字存儲單元并初始化為 指定的單精度數。????

6、DCQ(或DCQU)???
??? 語法格式:???
??? 標號 DCQ(或DCQU) 表達式???
??? DCQ(或DCQU)偽指令用于分配一片以8個字節(雙字)為單位的連續存儲區域并用偽指令中指定的表達式 初始化。 用DCQ分配的存儲單元是字對齊的,而用DCQU 分配的存儲單元并不嚴格字對齊。

???
??? 使用演示樣例:???
??? DataTest DCQ 100 ;分配一片連續的存儲單元并初始化為指定的值。
???
7、SPACE ??
??? 語法格式:???
??? 標號 SPACE 表達式???
??? SPACE偽指令用于分配一片連續的存儲區域并初始化為0 。當中,表達式為要分配的字節數。???
??? SPACE也可用“ % ”取代。???
??? 使用演示樣例:???
??? DataSpace SPACE 100 ;分配連續100字節的存儲單元并初始化為0 。

????

8、MAP???
??? 語法格式:???
??? MAP 表達式 { 。基址寄存器 }???
??? MAP偽指令用于定義一個結構化的內存表的首地址。MAP也可用“^” 取代。

???
??? 表達式能夠為程序中的標號或數學表達式,基址寄存器為可選項,當基址寄存器選項不存在時,表達式的值即為內存表的首地址。當該選項存在時。內存表的首地址 為表達式的值與基址寄存器的和。

???
??? MAP偽指令通常與FIELD偽指令配合使用來定義結構化的內存表。???
??? 使用演示樣例:???
??? MAP 0x100 ,R0 。定義結構化內存表首地址的值為0x100+R0 。
???
9、FILED???
??? 語法格式:???
??? 標號 FIELD 表達式???
??? FIELD偽指令用于定義一個結構化內存表中的數據域。FILED 也可用“#” 取代。

???
??? 表達式的值為當前數據域在內存表中所占的字節數。

???
??? FIELD偽指令常與MAP偽指令配合使用來定義結構化的內存表。MAP偽指令定義內存表的首地址,FIELD偽指令定義內存表中的各個數據域,并能夠為 每一個數據域指定一個標號供其它的指令引用。

???
??? 注意MAP和FIELD偽指令僅用于定義數據結構。并不實際分配存儲單元。

???
??? 使用演示樣例:???
??? MAP 0x100 。 定義結構化內存表首地址的值為0x100。???
??? A FIELD 16 。 定義A的長度為16字節。位置為0x100。???
??? B FIELD 32 ; 定義B的長度為32字節,位置為0x110。???
??? S FIELD 256 ;定義S的長度為256字節,位置為0x130。???
三、匯編控制(Assembly Control)偽指令????
匯編控制偽指令用于控制匯編程序的運行流程,經常使用的匯編控制偽指令包含下面幾條:???
??? — IF 、ELSE 、ENDIF???
??? — WHILE 、WEND???
??? — MACRO 、MEND???

??? — MEXIT


1、IF、ELSE、ENDIF???
??? 語法格式:???
??? IF 邏輯表達式???
??? 指令序列 1???
??? ELSE???
??? 指令序列 2???
??? ENDIF???
??? IF 、ELSE 、ENDIF偽指令能依據條件的成立與否決定是否運行某個指令序列。

當IF后面的邏輯表達式為真。則運行指令序列1 。否則運行指令序列2 。當中。ELSE及指令序列2能夠沒有,此時。當IF后面的邏輯表達式為真。則運行指令序列1 ,否則繼續運行后面的指令。???
??? IF 、ELSE 、ENDIF偽指令能夠嵌套使用。

???
??? 使用演示樣例:???
??? GBLL Test 。聲明一個全局的邏輯變量,變量名為Test???
??? IF Test = TRUE???
??? 指令序列 1???
??? ELSE???
??? 指令序列 2???
??? ENDIF????

2、WHILE、WEND???
??? 語法格式:???
??? WHILE 邏輯表達式???
??? 指令序列???
??? WEND???
??? WHILE 、WEND偽指令能依據條件的成立與否決定是否循環運行某個指令序列。當WHILE后面的邏輯表達式為真,則運行指令序列,該指令序列運行完成后。再推斷 邏輯表達式的值,若為真則繼續運行。一直到邏輯表達式的值為假。???
??? WHILE 、WEND偽指令能夠嵌套使用。???
??? 使用演示樣例:???
??? GBLA Counter ;?? 聲明一個全局的數學變量。變量名為Counter???
??? Counter SETA 3 。由變量Counter 控制循環次數???
??? ……???
??? WHILE Counter < 10???
??? 指令序列???

??? WEND????


3、MACRO、MEND???
??? 語法格式:???
??? $ 標號 宏名 $ 參數 1 。$ 參數 2 ,……???
??? 指令序列???
??? MEND???
??? MACRO 、MEND偽指令能夠將一段代碼定義為一個總體,稱為宏指令。然后就能夠在程序中通過宏指令多次調用該段代碼。當中,$標號在宏指令被展開時,標號會被替 換為用戶定義的符號。宏指令能夠使用一個或多個參數,當宏指令被展開時。這些參數被對應的值替換。???
??? 宏指令的使用方式和功能與子程序有些相似,子程序能夠提供模塊化的程序設計、節省存儲空間并提高執行速度。但在使用子程序結構時須要保護現場,從而添加了 系統的開銷。因此,在代碼較短且須要傳遞的參數較多時。能夠使用宏指令取代子程序。???
??? 包括在MACRO和MEND之間的指令序列稱為宏定義體,在宏定義體的第一行應聲明宏的原型(包括宏名、所需的參數),然后就能夠在匯編程序中通過宏名來 調用該指令序列。在源程序被編譯時,匯編器將宏調用展開,用宏定義中的指令序列取代程序中的宏調用,并將實際參數的值傳遞給宏定義中的形式參數。???
??? MACRO、MEND偽指令能夠嵌套使用。???

4、MEXIT???
??? 語法格式:???
??? MEXIT???

??? MEXIT用于從宏定義中跳轉出去。

??


四、其它經常使用的偽指令????


另一些其它的偽指令,在匯編程序中常常會被使用,包含下面幾條:????
??? — AREA
??? — ALIGN???
??? — CODE16 、CODE32???
??? — ENTRY???
??? — END???
??? — EQU???
??? — EXPORT(或GLOBAL )???
??? — IMPORT???
??? — EXTERN???
??? — GET(或INCLUDE )???
??? — INCBIN???
??? — RN???

??? — ROUT????


1、AREA???
??? 語法格式:???
??? AREA 段名 屬性1 ,屬性2 。……???
??? AREA偽指令用于定義一個代碼段或數據段。當中。段名若以數字開頭,則該段名需用“|”括起來,如:|1_test| 。

???
??? 屬性字段表示該代碼段(或數據段)的相關屬性,多個屬性用逗號分隔。經常使用的屬性例如以下:???
??? — CODE 屬性:用于定義代碼段,默覺得READONLY 。???
??? — DATA 屬性:用于定義數據段,默覺得READWRITE 。???
??? — READONLY 屬性:指定本段為僅僅讀,代碼段默覺得READONLY 。???
??? — READWRITE 屬性:指定本段為可讀可寫。數據段的默認屬性為READWRITE 。???
??? — ALIGN 屬性:使用方式為ALIGN表達式。在默認時,ELF(可運行連接文件)的代碼段和數據段是按字對齊的,表達式的取值范圍為0~31,對應的對齊方式為2 表達式次方。

???
??? — COMMON 屬性:該屬性定義一個通用的段。不包括不論什么的用戶代碼和數據。

各源文件里同名的COMMON段共享同一段存儲單元。


??? 一個匯編語言程序至少要包括一個段,當程序太長時,也能夠將程序分為多個代碼段和數據段。???
??? 使用演示樣例:???
AREA Init ,CODE ,READONLY ;?? 該偽指令定義了一個代碼段,段 名為Init ,屬性為僅僅讀。????

2、ALIGN???
??? 語法格式:???
??? ALIGN { 表達式 { 。偏移量 }}???
??? ALIGN偽指令可通過加入填充字節的方式,使當前位置滿足一定的對齊方式。當中。表達式的值用于指定對齊方式,可能的取值為2的冪。如1 、2 、4 、8 、16 等。

若未指定表達式。則將當前位置對齊到下一個字的位置。

偏移量也為一個數字表達式,若使用該字段,則當前位置的對齊方式為:2的表達式次冪+偏移 量。

???
??? 使用演示樣例:???
??? AREA Init 。CODE ,READONLY ,ALIEN=3 ;指定后面的指令為8 字節對齊。

???
??? 指令序列???
??? END????

3、CODE16、CODE32???
??? 語法格式:???
??? CODE16(或CODE32)???
??? CODE16偽指令通知編譯器,其后的指令序列為16位的Thumb指令。

???
??? CODE32偽指令通知編譯器。其后的指令序列為32位的ARM指令。

???
??? 若在匯編源程序中同一時候包括ARM指令和Thumb指令時,可用CODE16偽指令通知編譯器其后的指令序列為16位的Thumb指令。CODE32偽指令 通知編譯器其后的指令序列為32位的ARM指令。因此。在使用ARM指令和Thumb指令混合編程的代碼里,可用這兩條偽指令進行切換,但注意他們僅僅通知 編譯器其后指令的類型,并不能對處理器進行狀態的切換。???
??? 使用演示樣例:???
??? AREA Init 。CODE ,READONLY?????? ……???
??? CODE32 ;??????????????????? 通知編譯器其后的指令為32位的 ARM指令???
??? LDR R0 。=NEXT+1 ;將跳轉地址放入寄存器R0???
??? BX R0 。???????????????????????? 程序跳轉到新的位置運行, 并將處理器切換到Thumb工作狀態???
??? ……???
??? CODE16 ;???????????????????? 通知編譯器其后的指令為16位的 Thumb指令???
??? NEXT LDR R3,=0x3FF???
??? ……???
??? END 。
???
4、ENTRY???
??? 語法格式:???
??? ENTRY???
??? ENTRY偽指令用于指定匯編程序的入口點。

在一個完整的匯編程序中至少要有一個ENTRY(也能夠有多個,當有多個ENTRY時。程序的真正入口點由鏈 接器指定)。但在一個源文件中最多僅僅能有一個ENTRY(能夠沒有)。???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? ENTRY ; 指定應用程序的入口點???
??? ……????
5、END???
??? 語法格式:???
??? END???
??? END偽指令用于通知編譯器已經到了源程序的結尾。???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? ……??
??? END ;指定應用程序的結尾???

6、EQU???
??? 語法格式:???
??? 名稱 EQU 表達式 { ,類型 }???
??? EQU偽指令用于為程序中的常量、標號等定義一個等效的字符名稱,類似于C語言中的#define 。當中EQU可用“*”取代。名稱為EQU偽指令定義的字符名稱。當表達式為32位的常量時,能夠指定 表達式的數據類型,能夠有下面三種類型:???
??? CODE16 、CODE32 和DATA???
??? 使用演示樣例:???
??? Test EQU 50 。?????????????????????? 定義標號Test 的值為50。???
??? Addr EQU 0x55 ,CODE32 。 定義Addr的值為0x55 。且該處為32位的ARM指令。

????

7、EXPORT(或GLOBAL)???
??? 語法格式:???
??? EXPORT 標號 {[WEAK]}???
??? EXPORT偽指令用于在程序中聲明一個全局的標號,該標號可在其它的文件里引用。EXPORT 可用GLOBAL取代。標號在程序中區分大寫和小寫。[WEAK] 選項聲明其它的同名標號優先于該標號被引用。

???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? EXPORT Stest 。聲明一個可全局引用的標號Stest???

??? END????


8、IMPORT???
??? 語法格式:???
??? IMPORT 標號 {[WEAK]}???
??? IMPORT偽指令用于通知編譯器要使用的標號在其它的源文件里定義,但要在當前源文件里引用,并且不管當前源文件是否引用該標號。該標號均會被增加到當前源文件的符號表中。標 號在程序中區分大寫和小寫,[WEAK] 選項表示當全部的源文件都未定義這樣一個標號時。編譯器也不給出錯誤信息。在多數情況下將該標號置為0 ,若該標號為B或BL指令引用,則將B或BL指令置為NOP操作。???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? IMPORT Main ;通知編譯器當前文件要引用標號Main。但Main在其它源文件里定 義。


??? END????

9、EXTERN???
??? 語法格式:???
??? EXTERN 標號 {[WEAK]}???
??? EXTERN偽指令用于通知編譯器要使用的標號在其它的源文件里定義,但要在當前源文件里引用,假設當前源文件實際并未引用該標號,該 標號就不會被增加到當前源文件的符號表中。標號在程序中區分大寫和小寫, [WEAK] 選項表示當全部的源文件都未定義這樣一個標號時。編譯器也不給出錯誤信息。在多數情況下將該標號置為0 ,若該標號為B或BL指令引用,則將B或BL指令置為NOP操作。???
??? 使用演示樣例:???
??? AREA Init 。CODE 。READONLY???
??? EXTERN Main ;通知編譯器當前文件要引用標號Main,但Main在其它源文件里定 義。

???
??? END????

10、GET(或INCLUDE)???
??? 語法格式:???
??? GET 文件名稱???
??? GET偽指令用于將一個源文件包括到當前的源文件里。并將被包括的源文件在當前位置進行匯編處理。可 以使用INCLUDE取代GET。???
??? 匯編程序中經常使用的方法是在某源文件里定義一些宏指令。用EQU定義常量的符號名稱,用MAP和FIELD定義結構化的數據類型,然后用GET偽指令將這個 源文件包括到其它的源文件里。

用法與C 語言中的"include” 相似。

???
??? GET偽指令僅僅能用于包括源文件。包括目標文件須要使用INCBIN偽指令???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? GET a1.s 。??????? 通知編譯器當前源文件包括源文件a1.s???
??? GET C:\a2.s ; 通知編譯器當前源文件包括源文件C:\a2.s

??? END????


11、INCBIN???
??? 語法格式:???
??? INCBIN 文件名稱???
??? INCBIN偽指令用于將一個目標文件或數據文件包括到當前的源文件里,被包括的文件不作不論什么變動的存放在當前文件里,編譯器從其后開始繼續處理。???
??? 使用演示樣例:???
??? AREA Init ,CODE ,READONLY???
??? INCBIN a1.dat ;???? 通知編譯器當前源文件包括文件a1.dat???
??? INCBIN C:\a2.txt ;通知編譯器當前源文件包括文件C:\a2.txt??
??? END????

12、RN???
??? 語法格式:???
??? 名稱 RN 表達式???
??? RN偽指令用于給一個寄存器定義一個別名。採用這樣的方式能夠方便程序猿記憶該寄存器的功能。當中,名稱為給寄存器定義的別名,表達式為寄存器的編碼。??
??? 使用演示樣例:???
??? Temp RN R0 ;將R0定義一個別名Temp????

13、ROUT??
??? 語法格式:???
??? {名稱} ROUT???
??? ROUT偽指令用于給一個局部變量定義作用范圍。

在程序中未使用該偽指令時,局部 變量的作用范圍為所在的AREA,而使用ROUT后,局部變量的作為范圍為當前ROUT和下一個ROUT之間。
?
?3. BNE 與? BEQ
TST???? R0, #0X8
BNE??? SuspendUp 。BNE指令是“不相等(或不為0)跳轉指令”:
LDR?? R1,#0x00000000
先進行and運算。假設R0的第四位不為1,則結果為零。則設置zero=1(繼續以下的LDR指令);
否則。假設R0的第四位為1。zero=0(跳到SuspendUp處運行)。
tst 和bne連用: 先是用tst進行位與運算。然后將位與的結果與0比較,假設不為0,則跳到bne緊跟著的標記(如bne sleep,則跳到sleep處)。


tst 和beq連用: 先是用tst進行位與運算。然后將位與的結果與0比較。假設為0,則跳到beq緊跟著的標記(如bne AAAA,則跳到AAAA處)。


轉載于:https://www.cnblogs.com/mengfanrong/p/5239930.html

總結

以上是生活随笔為你收集整理的经常使用ARM汇编指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩高清av| 99久热 | 97超碰在线久草超碰在线观看 | 99精品视频免费全部在线 | 日本中文字幕影院 | 免费在线精品视频 | 免费开视频| 涩涩伊人 | 日韩欧美一区视频 | 草久在线 | 在线播放精品一区二区三区 | 91久久丝袜国产露脸动漫 | 狠狠狠色丁香婷婷综合激情 | 99re8这里有精品热视频免费 | 一区二区三区视频网站 | 黄网在线免费观看 | 国产资源精品在线观看 | 中文字幕欧美激情 | 99视频在线免费 | 808电影免费观看三年 | 天天插天天操天天干 | 99热国产在线 | 国产色女 | 亚洲成aⅴ人片久久青草影院 | 伊人久久婷婷 | 免费在线观看国产精品 | 久久精品国产精品亚洲 | 国产精品久久久久久久久久久久 | 久久精品视频18 | 97免费 | 亚洲成人av在线播放 | 久久草 | 免费高清无人区完整版 | 最新国产精品久久精品 | 日本中文字幕免费观看 | 久久福利综合 | 1000部国产精品成人观看 | 久久久久一区二区三区四区 | 成人观看视频 | 天天操综| 天天综合区| 27xxoo无遮挡动态视频 | 精品一区欧美 | 激情丁香综合 | 九九热精 | 91九色porny蝌蚪主页 | 91色一区二区三区 | 亚洲国产成人精品在线观看 | 亚洲最新在线 | 国产真实在线 | 国产成人精品一区二区三区福利 | 一级c片| 久草精品在线播放 | 婷婷综合视频 | 99久久精品午夜一区二区小说 | 狠狠干狠狠艹 | 69亚洲视频 | 午夜骚影 | 久黄色| av午夜电影| 久久精品人人做人人综合老师 | 日韩久久精品 | 国产成人三级在线播放 | 国产精品一区久久久久 | 国产在线观看免费观看 | 久久精品99精品国产香蕉 | 99久久日韩精品免费热麻豆美女 | 国产xxxxx在线观看 | 97超碰人人澡人人 | 久久久久久久久久久免费视频 | 97爱爱爱| 九九视频免费在线观看 | 在线你懂的视频 | 婷婷色伊人| 国产xxxx性hd极品 | 亚洲婷婷网 | 九九在线视频免费观看 | 亚洲视频,欧洲视频 | 国产高清中文字幕 | 九色91av| 二区三区在线视频 | 97色综合 | 在线观看视频日韩 | 日韩啪啪小视频 | 激情五月在线视频 | 国产私拍在线 | 欧美aa一级 | 欧美日韩免费在线视频 | 亚洲免费激情 | 久久99精品国产一区二区三区 | 中文字幕中文字幕在线一区 | 亚洲在线网址 | 亚洲韩国一区二区三区 | 日本午夜在线亚洲.国产 | 五月婷婷综合激情网 | 国产区精品区 | 最新高清无码专区 | 国产精品视频最多的网站 | 在线免费中文字幕 | 国产精品爽爽久久久久久蜜臀 | 国产精品久久久免费 | 精品国内自产拍在线观看视频 | 国产人成在线视频 | 天天拍天天操 | 日韩大片在线免费观看 | 免费手机黄色网址 | 日韩专区在线观看 | 91看片淫黄大片在线播放 | 综合激情婷婷 | 国产精品久久久久久久久软件 | 国产一级一级国产 | 欧美另类交人妖 | 国产中文在线视频 | 香蕉网在线观看 | 婷婷六月天天 | 精品视频在线视频 | 国产一区二区在线免费视频 | 激情五月***国产精品 | 国产最顶级的黄色片在线免费观看 | 天天操天天干天天爱 | 久久中文字幕导航 | 91大神在线观看视频 | 香蕉网在线观看 | 天天艹日日干 | 久久精品亚洲一区二区三区观看模式 | 成人h动漫在线看 | 国产精品a级 | 黄色软件在线看 | 精品视频久久 | .国产精品成人自产拍在线观看6 | 精品一区二区三区久久久 | 国产日产精品久久久久快鸭 | 亚洲日韩中文字幕 | 日批视频在线观看免费 | 亚洲激情 在线 | 天天操 夜夜操 | 成人免费xxx在线观看 | 亚洲成av人片在线观看www | 国产视频不卡一区 | 午夜三级毛片 | 男女啪啪视屏 | 久草视频在线资源站 | 免费黄色网址网站 | 日本在线观看一区二区 | 日韩欧美一区二区不卡 | 狠狠色丁香婷综合久久 | 国产又粗又长的视频 | 国产精品1024 | 久久国产麻豆 | 九九热有精品 | 日韩精品第一区 | 国产一区二区在线看 | 一区二区三区久久 | 国产不卡在线播放 | 国产精品自在欧美一区 | 日韩精品在线视频 | 超碰99在线 | 日韩免费视频观看 | 四虎永久免费在线观看 | 男女视频91 | 狠狠色香婷婷久久亚洲精品 | 国产高清视频在线免费观看 | 黄网站色成年免费观看 | 中文字幕精品一区二区精品 | 国产永久免费高清在线观看视频 | 国产一级片免费播放 | 天天干天天插 | 九九在线视频免费观看 | 日韩一区在线播放 | 久久视频在线观看免费 | 久久久久久久久毛片精品 | 激情xxxx| 国产日产精品久久久久快鸭 | 九九综合九九综合 | 三级av中文字幕 | 久久99视频免费观看 | 欧美另类交在线观看 | 狠狠狠色丁香综合久久天下网 | 欧美日韩高清一区二区三区 | 欧美激情综合网 | 五月黄色 | 久久在线观看视频 | 久久情侣偷拍 | 在线播放视频一区 | 天天摸日日摸人人看 | 国产精品aⅴ | 中文字幕在线视频一区二区三区 | 一区二区三区电影在线播 | 主播av在线| 狠狠狠色丁香婷婷综合久久88 | 丁香 婷婷 激情 | 成人av影视观看 | 亚洲国产中文字幕在线观看 | 久久免费的视频 | 在线精品观看 | 色婷婷狠狠18 | 久久韩国免费视频 | 久久99视频免费观看 | 亚洲精品小视频 | 激情文学丁香 | 亚洲精品视频在线播放 | 日本中文字幕观看 | 丁香六月伊人 | 精品亚洲一区二区 | 久久香蕉电影网 | 国内精品久久久久久久久久久久 | 亚洲精品tv久久久久久久久久 | 992tv又爽又黄的免费视频 | 四虎小视频 | 成人免费视频视频在线观看 免费 | 欧美美女一级片 | 黄色日本免费 | 一本一本久久a久久精品牛牛影视 | 99热最新精品 | 五月天婷婷综合 | 久久www免费人成看片高清 | 69av视频在线| 免费的黄色的网站 | 亚洲va欧美va人人爽春色影视 | 99九九热只有国产精品 | 午夜精品一区二区三区可下载 | 婷婷六月天综合 | 成年人在线观看网站 | 香蕉91视频 | 精品一区二区在线看 | 99在线热播精品免费 | 成人久久久久久久久久 | 夜夜骑日日操 | 97在线观看视频 | 天天干干 | 亚洲精品影视在线观看 | 日本天天操 | 在线直播av| 亚洲国产精品成人av | 超碰在线色 | 久久久一本精品99久久精品66 | 久热这里有精品 | 欧美一区二区三区不卡 | 玖玖在线播放 | 免费看片网址 | 免费在线观看的av网站 | 人人澡人摸人人添学生av | 不卡电影一区二区三区 | freejavvideo日本免费 | 九九久久免费视频 | 日本深夜福利视频 | 午夜视频一区二区三区 | av中文字幕av | 国内精品在线观看视频 | 亚洲人成人99网站 | 超碰人人99 | 97视频总站 | 黄色在线免费观看网址 | 蜜桃av人人夜夜澡人人爽 | 狠狠操.com | 久久伦理 | 精品久久精品久久 | 中文字幕乱偷在线 | 国产精品黄 | 毛片基地黄久久久久久天堂 | 久久超| 久久精品美女视频网站 | 免费男女网站 | 国产精品国内免费一区二区三区 | 久久视频免费在线观看 | 日本中文字幕视频 | 五月丁香 | 毛片在线播放网址 | 国产手机视频在线观看 | 日韩r级在线 | 日韩a在线看 | 国产日产精品久久久久快鸭 | 在线视频 区| 精品久久久久久亚洲 | 亚洲天堂香蕉 | 国产专区视频 | 国产在线色 | 精品一区二区三区在线播放 | 国产视频亚洲精品 | 青青久草在线 | 国产精品色婷婷 | 四虎永久网站 | 国产日韩中文字幕 | 精品国产人成亚洲区 | 日韩aⅴ视频 | 亚洲 欧美 精品 | 中文字幕区 | 久久精品成人欧美大片古装 | 欧美在线观看视频一区二区三区 | 三级黄色网址 | 亚洲精品免费观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲视频在线观看免费 | 日韩大片在线观看 | 色偷偷男人的天堂av | 亚欧洲精品视频在线观看 | 国产精品激情偷乱一区二区∴ | 91在线影院 | 中文国产成人精品久久一 | 波多野结衣视频在线 | 国产精品久久久久久久久久久久冷 | www.色在线| 中文字幕在线观看免费高清电影 | 久草青青在线观看 | av 在线观看| 日本在线观看一区二区三区 | 久久久国产精品一区二区中文 | www.黄色片.com| av网址最新 | 欧美日韩国产综合一区二区 | 久久国产乱| 亚洲aⅴ一区二区三区 | 亚洲欧美成人 | 日本久久电影网 | 久久9999久久免费精品国产 | 日本成址在线观看 | 国产v在线播放 | 日韩av在线免费看 | 手机在线看a | 国产一级免费观看 | 久久爱影视i | 天堂中文在线视频 | 久久国产精品免费观看 | 久久久久这里只有精品 | 黄网站app在线观看免费视频 | 国产精久久 | 久久久99久久 | 国产三级视频在线 | 亚洲免费精彩视频 | 99精品国产兔费观看久久99 | 久久精品人人做人人综合老师 | 曰韩精品 | 97超碰人| 久久久久成人精品亚洲国产 | 欧亚日韩精品一区二区在线 | 久久久久欠精品国产毛片国产毛生 | 欧美高清视频不卡网 | 天天操综合网站 | 久久九九久久精品 | 黄色一级免费网站 | 成人aⅴ视频 | 97在线观看免费高清完整版在线观看 | 天天干,天天射,天天操,天天摸 | 黄色a级片在线观看 | 在线视频日韩一区 | 亚洲精品黄色在线观看 | 国产精品久久99精品毛片三a | 一本一本久久a久久 | 久久草网站 | 精品在线观看国产 | 激情婷婷久久 | 五月天电影免费在线观看一区 | 中日韩欧美精彩视频 | 精品视频123区在线观看 | 日本久久久久久久久久 | 亚洲精品欧洲精品 | 在线观看视频国产 | 免费网站看av片 | 亚洲视频在线视频 | www狠狠操| 久久色视频 | 久久国产99| 免费网站看v片在线a | 国产一区欧美在线 | 欧美一区二区三区在线看 | 国产一级片免费播放 | 日日躁夜夜躁xxxxaaaa | 婷婷久草| 黄色中文字幕 | 亚洲精品在线观看视频 | 国产精品久久片 | 欧美天天综合 | 国产精品毛片一区 | 亚洲综合激情五月 | 国产精品久久久久久久久搜平片 | 成人精品一区二区三区电影免费 | 亚洲精品高清视频在线观看 | 好看的国产精品视频 | 国产不卡一二三区 | 日韩欧美精品在线视频 | 亚洲 欧美 成人 | 亚洲成a人片77777潘金莲 | 久久情爱 | 蜜桃麻豆www久久囤产精品 | 国产精品国内免费一区二区三区 | 九九热免费观看 | 亚洲乱亚洲乱亚洲 | 欧美精品生活片 | 久久久www成人免费精品张筱雨 | 成人午夜精品福利免费 | 久草视频在线资源 | 国产一级片一区二区三区 | 婷婷激情站 | 亚州天堂 | 欧美91片| 91资源在线播放 | 国产精品久久久久一区二区三区 | 97福利在线| av超碰在线| 91av官网| 黄色av成人在线观看 | 91视频免费国产 | 丰满少妇一级 | 韩国一区视频 | 视频在线日韩 | 狠狠色丁香九九婷婷综合五月 | 亚洲成人av片在线观看 | 成人午夜网 | 在线免费观看麻豆视频 | 婷婷视频在线 | 精品国产一区二区三区男人吃奶 | 久久国产精品一区二区三区四区 | 久久国产综合视频 | 日韩试看| 亚洲国产美女精品久久久久∴ | 丁香久久激情 | 天天插伊人 | 亚洲精品大片www | 亚洲第一区在线观看 | 成 人 免费 黄 色 视频 | 黄色网址av| 久久电影网站中文字幕 | 日韩电影精品 | 久久久久国产视频 | 欧美日韩一区二区三区视频 | 国产精品刺激对白麻豆99 | 亚洲最新视频在线播放 | 天天射天天爱天天干 | 国产亚洲精品久久网站 | 久久免费黄色 | 91精品国自产在线偷拍蜜桃 | 欧美美女视频在线观看 | 日韩在线视频免费看 | 97精产国品一二三产区在线 | 亚洲激情在线视频 | 中文字幕av一区二区三区四区 | 韩国一区二区三区视频 | 韩国精品在线观看 | 久久爱影视i | 女人18片毛片90分钟 | 久草久| 婷婷伊人综合亚洲综合网 | 免费观看一区 | 免费黄a| 婷婷电影在线观看 | 欧美日韩高清一区二区三区 | 欧美成人基地 | 在线看日韩av| 天天干天天操天天干 | 成人在线免费小视频 | 日日草天天草 | 麻豆你懂的 | 欧美在线18| 国产成人精品久久久 | 97超碰国产精品 | 日韩欧美电影 | 日韩av网页| 亚洲黄色在线观看 | 亚洲电影一区二区 | 国产人成看黄久久久久久久久 | 亚洲一区二区观看 | 色综合久久88色综合天天免费 | 五月天婷婷免费视频 | 精品视频资源站 | 国产午夜精品久久 | 狠狠操狠狠操 | 国产精品不卡在线播放 | 丝袜网站在线观看 | 亚洲精选国产 | 久久精品视频在线免费观看 | 日韩黄色一区 | 人人添人人澡人人澡人人人爽 | 丁香综合av | 国产剧在线观看片 | 在线看国产视频 | 少妇性bbb搡bbb爽爽爽欧美 | 一区二区三区高清在线观看 | 久草免费在线视频观看 | av片中文| 天天色棕合合合合合合 | 中文字幕在线视频国产 | 日本精品在线视频 | 91精品在线播放 | 一区二区三区国 | 一区二区三区四区精品视频 | 韩国av一区二区三区在线观看 | 狠狠狠色丁香婷婷综合激情 | 99精品乱码国产在线观看 | 亚洲欧美成人综合 | 狠狠干网站| 久久99精品久久久久蜜臀 | 欧美美女视频在线观看 | 国产98色在线 | 日韩 | 黄色的网站免费看 | 一区二区av | 97天堂| 国内久久久久久 | 国产午夜三级一区二区三 | 狠狠操天天操 | 国产精品久久久久久久久久久杏吧 | 国产精品99久久免费观看 | 在线精品一区二区 | 亚洲精品视频 | 黄色av一级 | 日日操日日插 | 黄网站app在线观看免费视频 | 久久福利剧场 | 91精品国产综合久久久久久久 | 精品亚洲在线 | 蜜臀aⅴ国产精品久久久国产 | 五月天婷婷免费视频 | 欧美一区二区在线刺激视频 | 成年人视频在线免费 | 一级黄色电影网站 | 色播99 | 免费黄a| 亚洲精品在 | 日韩 国产 | 精品国产免费一区二区三区五区 | 日韩国产欧美在线视频 | 狠狠色丁香婷婷综合橹88 | 91色国产| 在线视频第一页 | 国产伦精品一区二区三区无广告 | 亚洲三级影院 | 国产亚洲情侣一区二区无 | 亚洲精品国产品国语在线 | 欧美日韩后 | 精品国产一区二区三区免费 | 国产精品一区二区三区在线免费观看 | 国产资源免费在线观看 | www.日韩免费 | av在线免费网站 | 久久的色 | 手机成人av | 免费在线国产视频 | 国产精品福利久久久 | 国产精品美女www爽爽爽视频 | 公开超碰在线 | 性色视频在线 | 五月开心婷婷网 | 国产视频2区 | 精品福利在线视频 | 日韩精品一区二区电影 | 久久免费视频在线观看 | 中文字幕免费不卡视频 | 免费av试看 | 毛片www| 亚洲人成免费网站 | 97超碰超碰久久福利超碰 | www.神马久久 | 亚洲精品视频第一页 | 久久大香线蕉app | 午夜久久福利视频 | 久久久久久久久久久久久久免费看 | 日韩成人精品一区二区 | 国产精品美女毛片真酒店 | 国产精品入口66mio女同 | 91九色视频在线 | 国产精品欧美精品 | 日韩欧美一区视频 | 99免在线观看免费视频高清 | 在线观看免费视频 | 日韩一区二区三区观看 | 激情欧美丁香 | 国产成人福利在线 | 久久久网址 | 中文字幕 91 | 天天干天天弄 | 国产视频在线一区二区 | 超碰在线94 | 黄色软件网站在线观看 | 久久免费视频国产 | 六月激情丁香 | 亚洲经典在线 | 中文字幕在线第一页 | 女人18片 | 国产一级免费在线 | 特级毛片aaa | 综合久久一本 | 99视频在线 | 午夜视频一区二区三区 | 欧美日韩免费在线视频 | 日韩一区二区免费视频 | 91亚洲在线观看 | 国产午夜精品一区二区三区在线观看 | 丁香 久久 综合 | 日韩欧美视频免费观看 | 国产精品久久久久久久久久尿 | 一区二区三区免费在线播放 | 97精品国产| 一区免费视频 | 国产理论影院 | 欧美成人黄色片 | 成人一级在线观看 | 欧洲视频一区 | japanesefreesexvideo高潮 | 日韩欧美高清免费 | 99视频精品免费观看, | 亚洲欧美在线视频免费 | 国产精品久久久久婷婷二区次 | 911av视频 | 国产美女视频网站 | 在线观看免费一区 | 日韩免费av网址 | 日本中文字幕视频 | 91亚洲精品国产 | 成年人在线看视频 | 午夜美女福利 | 久久www免费人成看片高清 | a资源在线| 综合国产在线 | 久久99精品久久久久久久久久久久 | 久久精品视频4 | 亚洲成人网av | 久久国产精品99久久久久久老狼 | 午夜精品久久久久久久99 | 婷婷九九| 美女黄网久久 | 最近中文字幕免费av | 亚洲激情视频在线观看 | 日日精品| 欧美日韩国产一区二区三区 | 91九色精品女同系列 | 日韩电影一区二区在线观看 | 日韩精品一区二区在线视频 | 日韩小视频网站 | 久久麻豆视频 | 色在线免费| 亚洲成人免费在线 | 丁香婷婷网 | 国产中文字幕大全 | 久久精品久久99精品久久 | 美女免费视频观看网站 | 在线色资源 | 丁香综合激情 | 超碰在线人人97 | 成人一区二区在线 | 91精品国产九九九久久久亚洲 | 日本一区二区高清不卡 | 亚洲欧美国内爽妇网 | 国产欧美在线一区 | 奇米网在线观看 | 久久超级碰视频 | 香蕉在线播放 | 超碰99在线 | 亚洲精品动漫成人3d无尽在线 | av在线播放国产 | 韩国av免费观看 | 日韩精品影视 | 久久国产精品99国产 | 亚洲欧美色婷婷 | 精品福利网 | 免费看的黄色录像 | 久久在现 | 国产区欧美 | 久久久久久97三级 | 午夜精品一区二区三区在线视频 | 91精品国产一区二区在线观看 | 一本一本久久a久久精品综合小说 | 中文字幕影视 | 欧美激情xxxx性bbbb | 丁香资源影视免费观看 | 色中色综合 | 韩日电影在线观看 | 日韩在线视频不卡 | 国产精品99久久久 | 亚洲少妇自拍 | 在线电影 你懂得 | 国产+日韩欧美 | 精品国产视频在线观看 | 手机成人免费视频 | 精品国产免费观看 | 探花系列在线 | 国产不卡精品 | 五月激情丁香图片 | 不卡电影免费在线播放一区 | 18+视频网站链接 | 日本少妇久久久 | 在线韩国电影免费观影完整版 | 精品久久久久一区二区国产 | 久草久热 | 97av精品 | 在线视频app | 成人午夜剧场在线观看 | 国产中文字幕在线看 | 91成人在线看 | 久久久久久久久久国产精品 | 日韩色高清 | 国产精品久久久久久久久久白浆 | 国产成人亚洲精品自产在线 | 天堂在线一区二区三区 | 亚洲国产中文在线观看 | 一区二区三区中文字幕在线 | 久久调教视频 | 亚洲欧美日韩中文在线 | 免费网站在线 | 国产精品麻豆一区二区三区 | 深夜激情影院 | 国产成人在线观看免费 | 日本护士三级少妇三级999 | 又爽又黄又刺激的视频 | 日操操 | 香蕉视频导航 | 日韩精品视频免费看 | 国外成人在线视频网站 | 黄色日本免费 | 国产高清视频免费观看 | 国产精品亚洲精品 | 国产精品破处视频 | 成人免费视频在线观看 | av在线中文 | 97精产国品一二三产区在线 | 99在线观看视频网站 | 亚洲涩涩涩 | 黄色不卡av| 天天草天天色 | 91在线欧美 | 色狠狠狠| 久久激情视频 久久 | 久久国产成人午夜av影院潦草 | a黄色| 99色在线观看视频 | 国产视频 久久久 | 欧美另类重口 | 久久精视频 | 93久久精品日日躁夜夜躁欧美 | 国产中文字幕视频在线 | 在线播放国产一区二区三区 | 国产三级国产精品国产专区50 | 欧美九九视频 | 亚洲五月花| 久久精品视频免费观看 | 国产视频一二区 | 91亚色免费视频 | 久久久综合香蕉尹人综合网 | 黄色官网在线观看 | 亚洲精品五月 | 99久久99视频 | 国产日产精品一区二区三区四区的观看方式 | 超碰公开在线观看 | 国产aaa免费视频 | 中文字幕欲求不满 | 美女视频免费一区二区 | 又色又爽又黄 | 久久精品一区二区三区中文字幕 | 中文字幕在线色 | 久久精品视频在线观看免费 | 在线观看视频亚洲 | 国产精品久久久久久久毛片 | 国产精品一区二区久久久久 | 国产亚洲精品久久 | 国产原厂视频在线观看 | 蜜臀一区二区三区精品免费视频 | 色综合狠狠干 | 黄色在线观看网站 | 亚洲精品一区二区三区高潮 | 五月开心婷婷 | 狠狠操狠狠 | 激情综合五月天 | a视频在线观看 | 日韩com| 国产亚洲视频在线 | 欧美激情精品一区 | 色中文字幕在线观看 | 黄网站免费大全入口 | 国产精品午夜在线 | 欧美日韩国产在线观看 | 懂色av一区二区三区蜜臀 | 91精品国产福利在线观看 | 国产成人精品一区二三区 | 91自拍成人| 丁香国产视频 | 国产v欧美| 亚洲国产网址 | aa一级片| 在线观看精品国产 | 夜色在线资源 | 中文字幕电影高清在线观看 | 久久伊人精品一区二区三区 | 久久国产精品视频观看 | 色开心 | 久久精国产| 亚洲激情中文 | 免费亚洲视频在线观看 | 69精品在线 | 免费日韩一区二区 | 欧美电影在线观看 | 欧美孕妇与黑人孕交 | 亚洲精品视频在线免费 | 国产不卡在线看 | 国产日韩精品在线观看 | 成人在线观看免费视频 | 一级做a视频 | 日韩免费一区二区在线观看 | 久草在线费播放视频 | 996久久国产精品线观看 | 一级黄色av | 亚洲aⅴ在线观看 | 精品免费视频 | 日韩中文字幕免费 | 91精品免费在线观看 | 国产精品一区二区久久精品爱微奶 | 欧美a级一区二区 | 欧美一级片在线 | 国产成人精品一区二区三区 | 久久激五月天综合精品 | 91成年人在线观看 | 精品国产亚洲在线 | 99人成在线观看视频 | 五月天丁香视频 | 久久r精品 | 国产精品一区二区精品视频免费看 | 午夜精品一区二区三区视频免费看 | 天天操天天色天天 | 国产精品久久久久免费观看 | 99久久久国产精品美女 | 国产字幕在线观看 | 99久久久国产精品免费观看 | 91色吧| 久久开心激情 | 欧美精品三级 | 国产精品久久久久久一二三四五 | 免费v片| 久久夜视频 | 国产精品每日更新 | 激情综合五月天 | 日韩久久激情 | 免费看黄在线 | 日韩免费看的电影 | 99在线视频免费观看 | 亚洲激情在线观看 | 国产精品久久久一区二区 | 亚洲视频网站在线观看 | 日韩爱爱网站 | 亚洲国产精品一区二区久久,亚洲午夜 | 99色在线观看| 日韩在线在线 | 麻豆视频入口 | 婷婷丁香激情网 | 国产一级不卡视频 | 亚洲视频高清 | www视频在线免费观看 | 日日摸日日添日日躁av | 国产91综合一区在线观看 | 一色屋精品视频在线观看 | 丁香六月久久综合狠狠色 | 国产精品原创av片国产免费 | 亚洲极色 | 99视频国产在线 | 欧美激情视频一二三区 | 亚洲国产精品一区二区尤物区 | 欧美综合在线视频 | 国产精品成人免费 | 久草在线手机视频 | 色瓜| 欧美91精品久久久久国产性生爱 | 亚洲狠狠丁香婷婷综合久久久 | 狠狠色丁香久久婷婷综合五月 | 亚州五月| 丰满少妇高潮在线观看 | 国产精品v欧美精品v日韩 | 精品国产精品久久 | 国内久久久 | 成年人av在线播放 | 欧美久久久一区二区三区 | 国产精品久久久久久久久岛 | 激情五月网站 | 午夜国产在线观看 | 在线观看一区视频 | 日韩久久久久久 | 日韩高清dvd | 亚洲精品日韩在线观看 | 99国内精品 | 日日综合网 | 五月激情婷婷丁香 | 国内揄拍国内精品 | 最近日本韩国中文字幕 | av成人免费网站 | 欧美aaaxxxx做受视频 | 99 久久久久 | 808电影免费观看三年 | 久久国产色 | 免费欧美 | 久草综合在线 | 成人av电影免费在线观看 | 国产精品精品久久久久久 | 国产99在线 | 国产精品一区二区三区免费看 | 黄色com| 国产成人性色生活片 | 国产乱码精品一区二区蜜臀 | 五月婷婷中文 | 又长又大又黑又粗欧美 | 成人av中文字幕 | 中文字幕免费在线 | 天堂av网站| 日本韩国精品一区二区在线观看 | 免费福利在线 | 国产污视频在线观看 | 天堂网在线视频 | 日韩欧美一区二区在线播放 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩精品视频免费专区在线播放 | 久久国产色 | 国产亚洲人| 在线一区二区三区 | 91久久偷偷做嫩草影院 | 精品视频专区 | 欧美成人高清 | 中文字幕一区二区三区四区视频 | 免费网站在线观看人 | 麻豆91精品视频 | 成人福利在线播放 | 免费在线黄 | 一级淫片在线观看 | 91麻豆精品久久久久久 | 久久久亚洲精华液 | 国产一区视频在线观看免费 | 97狠狠操| av福利电影 | 在线播放国产一区二区三区 | 三级黄色免费 | 国产中文字幕一区二区 | 国产精品女同一区二区三区久久夜 | 国产精品乱码一区二区视频 | 成人网在线免费视频 | 一本一本久久a久久精品牛牛影视 | 激情综合狠狠 | 日韩免费视频线观看 | 日韩精品免费专区 | 免费av电影网站 | 日韩av中文 | 五月天色综合 | 国产精品一区二区视频 | 亚洲乱亚洲乱亚洲 | 国产黄色一级大片 | 国产日产在线观看 | 中文字幕一区二区三区在线播放 | 国内精品久久久久影院男同志 | 国产婷婷vvvv激情久 | 天天干天天做 | 人人爽人人插 | 五月激情站 | 精品免费观看视频 | 欧美日产在线观看 | 黄色小视频在线观看免费 | 久久婷婷一区 | 亚洲在线黄色 | 欧洲一区二区三区精品 | 在线影视 一区 二区 三区 | 久草在线视频国产 | 五月婷在线播放 | 奇米网777 | 日韩精品一区在线观看 | 欧美性生活免费看 | 嫩草伊人久久精品少妇av | 色狠狠综合天天综合综合 | 国产香蕉视频在线播放 | 日日婷婷夜日日天干 | 国产九色在线播放九色 | 夜夜躁狠狠躁日日躁视频黑人 | 国产成人久久精品一区二区三区 | 久久久久久久久久免费视频 | 国产精品电影一区二区 | 国内精品视频免费 | 久久视频免费看 | 久久精品成人 | 天天操天天舔天天干 | 蜜臀av性久久久久蜜臀av | 国产又粗又猛又爽 | 黄色a一级视频 | 久久艹人人 | 亚洲国产精品人久久电影 | 国产精品 欧美 日韩 | 久久99精品久久只有精品 | 久久精品麻豆 | 亚洲aⅴ久久精品 | 91新人在线观看 | 国内视频在线观看 | 久久精品精品电影网 | 波多野结衣在线视频免费观看 | 久久国产99 | 美女视频黄是免费的 | 欧美一区二区精美视频 | 国产对白av | 亚洲精品视频在 | 麻豆果冻剧传媒在线播放 | 日韩av电影中文字幕 | 三级av在线播放 | 国产精品毛片一区二区 | 香蕉视频18 | 亚洲综合在线一区二区三区 | 国产美女被啪进深处喷白浆视频 | 国产视频1 | 午夜精品一区二区三区在线 | 97天堂网 | 精品美女久久 |