日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM指令集总结

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM指令集总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.概念:

? ? ? 指令集指一個微處理器所有指令的集合。處理器的指令集可以分為CISC(復雜指令集)和RISC(精簡指令集),ARM處理器使用RISC。

? ? ?ARM處理器支持ARMThumb兩種指令集:ARM指令集工作在32位模式下,指令長度都是32bThumb指令集工作在16位模式下,指令長度都是16b

二.指令集種類

1.算術運算指令

1.1.ADD指令

ADD指令用與普通的加法運算。

格式:ADD{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest=op_1+op_2

ADD指令把兩個操作數op_1op_2相加的結果存放到目的寄存器dest中,操作數op_1op_2可以是寄存器或者是一個立即數。

例:

ADD ????R0R1R2 ??????????; ?R0=R1+R2

ADD ????R0R1#256 ????????; ?R0=R1+256

ADD ????R0R1R3LSL#1 ??; ?R0=R1+(R3<<1)

?

1.2.ADC指令

ADC指令用于帶進位的加法運算。

格式:ADC{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest = op_1 + op_2 + carry

ADC指令把兩個操作數op_1op_2相加的結果存放到目的寄存器dest中。ADC指令使用一個進位標志位,可以進行大于32位的加法操作。

例:

64位數結果:存放在寄存器R0R1

;兩個32位數:存放在寄存器R2R3

ADCS ???R0R2R3 ??;帶進位加,結果保存在R0R1寄存器

?

1.3.SUB指令

格式:SUB{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest=op_1-op_2

SUB指令把兩個操作數op_1op_2相減的結果存放到目的寄存器dest中,操作數op_1op_2可以是寄存器或者是一個立即數。

例:

SUB ????R0R1R2 ??????????; ?R0=R1-R2

SUB ????R0R1#256 ????????; ?R0=R1-256

SUB ????R0R1R3LSL#1 ??; ?R0=R1-(R3<<1)

?

1.4.SBC指令

格式:SBC{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest = op_1 - op_2 -! Carry

SBC指令把兩個操作數op_1op_2相減的結果存放到目的寄存器dest.SBC指令支持借位標志,故可以支持大于32位的減法操作。

?

?

?

2.邏輯運算指令

2.1.AND指令

AND指令求連個操作數的邏輯與的結果

格式:AND{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest=op_1 AND op_2

AND指令在兩個操作數op_1op_2做邏輯與操作,結果存放到目的寄存器dest中,AND指令常用于屏蔽寄存器中的某一位。op_1是寄存器,op_2可以是寄存器或者是一個立即數。

:

AND ???R0R0#3 ?????;R0的第0位和第1位保持不變,其他位清零

?

2.2.EOR

EOR指令對兩個操作數做異或運算。

格式:EOR{條件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1op_2是操作數dest=op_1 EOR op_2

EOR指令在兩個操作數op_1op_2做邏輯異或操作,結果存放到目的寄存器dest中,常用于設置某個特定反轉。EOR指令中,op_1是寄存器,op_2可以是寄存器或者是一個立即數。

:

EOR ???R0R0#3 ?????;R0的第0位和第1位被反轉

?

3.MOV指令

MOV指令在兩個操作數之間復制數據。

格式:MOV{條件} {S} <dest>, <op_1>

//dest是目的寄存器,op_1是操作數dest=op_1

MOV指令的作用是把另一個寄存器中,支持操作數的移位操作。

例:

MOV ??R0R0 ???????????;R0 = R0相當于沒有操作

MOV ??R0R0LST#3 ???;R0 = R0 * 8 LST寄存器左移3位,相當于乘8

?

4.分支指令

B指令可以根據設置的條件跳轉到指定的代碼地址。

格式; B{條件} <地址>

B指令是分支跳轉指令。程序中遇到B指令會立即跳轉到指定地址,然后繼續從新的地址開始運行程序。

?

5.數據傳送指令

數據傳送指令用于CPU和存儲器之間的數據傳送,是ARM處理器唯一能與外部存儲器交換數據的一類指令。

5.1.單一數據傳送指令

單一數據傳送指令用于內向存儲。

格式:

LDR{條件} ??????Rd;<地址>

STR{條件} ??????Rd;<地址>

LDR{條件}B ????Rd;<地址>

STR{條件}B ????Rd;<地址>

單一數據傳送指令STRLDR可以在內存和寄存器之間裝載或者存儲一個或多個字節的數據,并提供了;靈活的尋址方式。Rd是要操作的數值,地址可以是基址寄存器Rbase和變址寄存器Rindex指定的地址。在條件后加入標志B代表一次傳送1字節數據。

常見尋址方式:

STR ??Rd, ?[Rbase] ????????????;存儲RdRbase所包含的有效地址

STR ??Rd, ?[RbaseRindex] ???;存儲RdRbase+Rindex所合成的有效地址

STR ??Rd, ?[Rbase#index] ???;存儲RdRbase+index所合成的有效地址,index是立即數

?

5.2.多數據傳送指令

多數據傳送指令用于向內存裝載和存儲多個字節或字的數據。

格式; xxM{條件} {類型} ?Rn{!}, <寄存器列表>{^}

其中,xx可以是LD(裝載),也可以是ST(存儲).多數據傳送指令用于寄存器和內存之間多個數據的復制。

指令包括:

LDMED ???LDMIB ??;裝載前增加地址,相當于C語言的++p

LDMFD ???LDMIA ??;裝載前增加地址,相當于C語言的p++

LDMEA ???LDMDB ??;裝載前增加地址,相當于C語言的++*p

LDMFA ???LDMDA ??;裝載前增加地址,相當于C語言的*p++

STMFA ???STMIB ????;存儲前增加地址

STMEA ???STMIA ????;存儲后增加地址

STMFD ???STMDB ???;存儲前增加值

STMED ???STMDA ???;存儲后增加值

?

附:

ARM處理器支持的移位操作:

LSL 邏輯左移 ? ? ? ? ?寄存器的二進制位從右往左移動,空出的位補0

LSR 邏輯右移 ? ? ? ? ?寄存器的二進制位從左往右移動,空出的位補0

ASR 算術右移 ? ? ? ? ?移位過程中符號位不變,即如果源操作數是正數,則字的高端空出的位補0否則補1 ? ? ? ? ? ? ? ? ? ? ? ? ?

ROR 循環右移 ? ? ? ? ?寄存器的低端移出的位填入字的高端空出的位

RRX 帶擴展的循環位移 ???操作數右移一位,高端空出的位用原C標志值填充

?

?

?

?

?

?

?

?

?

總結

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

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