一、跳转指令

B: 跳转指令

BL: 带返回的跳转指令

BLX: 带返回和状态切换的跳转指令

BX: 带状态切换的跳转指令

二、数据处理指令

1、MOV:数据传送指令

  MOV{条件}{S}    目的寄存器,源寄存器

  MOV指令可完成从另一个寄存器、被移位的寄存器或将将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例:
MOV R1,R0 ;将寄存器R0的值传送到寄存器R1
MOV PC,R14 ;将寄存器R14的值传送到PC,常用于子程序返回
MOV R1,R0,LSL# ;将寄存器R0的值左移3位后传送到R1

2、MVN:数据取反传送指令

  MVN{条件}{S}   目的寄存器,源操作数

  MVN指令可完成从另一个寄存器、被移位的寄存器或将将一个立即数加载到目的寄存器。其与MOV指令的不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例
MVN R0,# ;将立即数0取反传送到寄存器R0中,完成后R0==-1

3、CMP:比较指令

  CMP{条件 }     操作数1,操作数2

  CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位,标志位表示的是操作数1与操作数2的关系(大、小、相等)。例如,当操作数1大于操作数2时,则此后有GT后缀的指令将可以执行。

指令示例
CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
CMP R1,# ;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位

4、CMN:反值比较指令

  CMN{条件}  操作数1,操作数2

  CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。

指令示例
CMN R1,R0 ;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位
CMN R1,# ;将寄存器R1的值与立即数100相加,并根据结果设置CPSR的标志位

5、TST:位测试指令

  TST{条件}    操作数1,操作数2

  TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。

指令示例:
TST R1,#% ;用于测试在寄存器R1中是否设置了最低位(%表示二进制)
TST R1,#0xffe ;将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位

6、TEQ:相等测试指令

  TEQ{条件}  操作数1,操作数2

  TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位异或运算,并根据运算结果更新CPSR中条件标志位的值该指令通常用于比较操作数1和操作数2是否相等。

指令示例:
TEQ R1,R2 ;将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位

7、ADD:加法指令

  ADD{条件}{S}  目的寄存器,操作数1,操作数2

  ADD指令用于把两个操作数相加,并将结果存放到目的寄存器。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。

指令示例:
ADD R0,R1,R2 ;R0=R1+R2
ADD R0,R1,# ;R0=R1+256
ADD R0,R2,R3,LSL# ;R0=R2+ (R3 << 1)

8、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{条件}{S}   目的寄存器,操作数1,操作数2

  SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:
SUB R0,R1,R2 ;R0=R1-R2
SUB R0,R1,# ;R0=R1-256
SUB R0,R2,R3,LSL# ;R0=R2- (R3 << 1)

10、SBC:带借位减法指令

  SBC{条件}{S}  目的寄存器,操作数1,操作数2

  SBC指令用于把操作数1减去操作数2,再减去CPSR中的C标志位的反码,并将结果存放在目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法(注意不要忘记设置S后缀来更改进位标志)。该指令可用于有符号数或无符号数的减法运算。

指令示例:
SBCS R0,R1,R2 ;R0=R1-R2-! C,并根据结果设置CPSR的进位标志位

11、RSB:逆向减法指令

  RSB{条件}{S}     目的寄存器,操作数1,操作数2

  RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:
RSB R0,R1,R2 ;R0=R2-R1
RSB R0,R1,# ;R0=256-R1
RSB R0,R2,R3,LSL# ;R0=(R3 << 1) - R2

12、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{条件}{S}  目的寄存器,操作数1,操作数2

  AND指令用于在两个操作数上进行逻辑与运算,并将结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数1的某些位。

指令示例:
AND R0,R0,# ;该指令保持R0的0、1位,其余位清零

14、ORR:逻辑或指令

  ORR{条件}{S}  目的寄存器,操作数1,操作数2

  ORR指令用于在两个操作数上进行逻辑或运算,并将结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。

指令示例:
ORR R0,R0,# ;该指令设置R0的0、1位,其余位保持不变

15、EOR:逻辑异或指令

  EOR{条件}{S}  目的寄存器,操作数1,操作数2

  EOR指令用于在两个操作数上进行逻辑异或运算,并将结果设置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。该指令常用于反转操作数1的某些位。

EOR  R0,R0,#         ;该指令反转R0的0、1位,其余位保持不变

16、BIC:位清除指令

  BIC{条件}{S}  目的寄存器,操作数1,操作数2

  BIC指令用于清除操作数1的某些位,并将结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。操作数2位32位的掩码,如果在掩码中设置了某一位,则清除了这一位,未设置的掩码位保持不变。

BIC   R0,R0,#%            ;该指令清除R0中的0、1、3位,其余位保持不变

三、乘法指令和乘加指令

1、MUL:32位乘法指令

  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:32位乘加指令

  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:64位有符号数乘法指令

  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:64位有符号数乘加指令

  SMLAL{条件}{S}      目的寄存器Low,目的寄存器High,操作数1,操作数2

  SMLAL指令完成操作数1与操作数2的乘法运算,并将结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数。

指令示例:
SMLAL R0,R1,R2,R3 ;R0= (R2 * R3)的低32位 + R0
;R1= (R2 * R3)的高32位 + R1

5、UMULL:64位无符号数乘法指令

  UMULL{条件}{S}     目的寄存器Low,目的寄存器High,操作数1,操作数2

  NMULL指令完成操作数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:64位无符号乘加指令

  UMLAL{条件}{S}   目的寄存器Low,目的寄存器High,操作数1,操作数2

  UMLAL指令完成操作数1与操作数2的乘法运算,并将结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的无符号数。

四、程序状态寄存器访问指令

1、MRS

  MRS{条件}   通用寄存器,程序状态寄存器(CPSR或SPSR)

  MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用于以下几种情况。

  1)当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入到通用寄存器,修改后再写回程序状态寄存器

  2)当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。

指令示例:
MRS R0,CPSR ;传送CPSR的内容到R0
MRS R0,SPSR ;传送SPSR的内容到R0

2、MSR

  MSR{条件}   程序状态寄存器(CPSR或SPSR)_<域>,操作数

  MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中操作数可以为通用寄存器或立即数。域用于设置程序状态寄存器中需要操作的位。32位的程序状态寄存器可分为4个域:

  1)位[31:24]为条件标志位域,用f表示

  2)位[23:16]为状态位位域,用s表示

  3)位[15:8]为扩展位域,用x表示

  4)位[7:0]为控制位域,用c表示

指令示例:
MSR CPSR,R0 ;传送R0的内容到CPSR
MSR SPSR,R0 ;传送R0的内容到SPSR
MSR CPSR_c,R0 ;传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域

五、加载、存储指令

1、LDR:字数据加载指令

  LDR{条件}   目的寄存器,<存储器地址>  

  LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用。

指令示例:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0
LDR R0,[R1, #] ;将存储器地址为R1+8的字数据读入寄存器R0
LDR R0,[R1,R2] ! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1
LDR R0,[R1, #] ! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1
LDR R0,[R1],R2 ;将存储地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1
LDR R0,[R1,R2,LSL#] ! ;将存储器地址为R1+R2*4的字数据读入寄存器R0,并将新地址R1+R2*4写入R1
LDR R0,[R1],R2,LSL# ;将存储器R1的字数据读入寄存器R0,并将新地址R1+R2*4写入R

2、LDRB:字节数据加载指令

  LDRB {条件}  目的寄存器,<存储器地址>

  LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:
LDRB R0,[R1] ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零
LDRB R0,[R1,#] ;将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零

3、LDRH:半字数据加载指令

  LDRH {条件}   目的寄存器,<存储器地址>

  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指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考LDR

指令示例:
STR R0,[R1],# ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1
STR R0,[R1, #] ;将R0中的字数据写入以R1+8为地址的存储器中

5、STRB:字节数据存储指令

  STRB{条件}   源寄存器,<存储器地址>

  STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。

STRB  R0,[R1]   ;将寄存器R0中的字节数据写入以R1为地址的存储器中
STRB R0,[R1, #] ;将寄存器R0中的字节数据写入以R1+8为地址的存储器中

6、STRH:半字数据存储指令

  STRH{条件}  源寄存器,<存储器地址>

  STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。

指令示例:
STRH R0,[R1] ;将寄存器R0中的半字数据写入以R1为地址的存储器中
STRH R0,[R1, #] ;将寄存器R0中的半字数据写入以R1+8为地址的存储器中

六、批量数据加载、存储指令

LDM:批量数据加载指令

STM:批量数据存储指令

指令格式为:

LDM(或STM){条件}{类型}  基址寄存器(!),寄存器列表{^}

其中,{类型}为以下几种情况:

  • IA: 每次传送后地址加1
  • IB: 每次传送前地址加1
  • DA:每次传送后地址减1
  • DB:每次传送前地址减1
  • FD:满递减堆栈
  • ED:空递减堆栈
  • FA:慢递增堆栈
  • EA:空递增堆栈

{!}为可选后缀,当指令为LDM且寄存器列表中包含R15,则选用该后缀时表示除了正常的数据传送之外,还将SPSR复制到CPSR。同时该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。

七、数据交换指令

1、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{条件}  目的寄存器,源寄存器1,[源寄存器2]

  SWP指令用于将源寄存器2所指向的存储器中的字节数据传送到目的寄存器中,同时将源寄存器1中的字节数据传送到源寄存器2所指向的存储器中。显然,当源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。

指令示例:
SWP R0,R1,[R2] ;将R2所指向的存储器中的字节数据传送到R0,R0的高24位清零,同时将R1中的低8位数据传送到R2所指向的存储单元
SWP R0,R0,[R1] ;该指令完成将R1所指向的存储器中的字节数据与R0中的低8位数据交换

八、移位指令

1、LSL:逻辑左移

2、ASL:算术左移

  通用寄存器,LSL(或ASL)操作数

  LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数所指定的数量向左移位,低位用0来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。

3、LSR:逻辑右移

  通用寄存器,LSR 操作数

  LSR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用0来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。

4、ASR:算术右移

  通用寄存器,ASR 操作数

  ASR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用第31位的值来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。

5、ROR:循环右移

  通用寄存器,ROR 操作数

  ROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。显然,当进行32位的循环右移操作时,通用寄存器中的值不改变。

6、RRX:带扩展的循环右移

  通用寄存器,RRX 操作数

  RRX可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位C来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。

九、协处理器指令

1、CDP:协处理器数操作指令

  CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2

  CDP指令用于ARM处理器通知ARM协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM处理器的寄存器和存储器。

2、LDC:协处理器数据加载指令

  LDC{条件}{L}  协处理器编码,目的寄存器,{源寄存器}

  LDC指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

3、STC:协处理器数据存储指令

  STC{条件}{L}  协处理器编码,源寄存器,{目的寄存器}

  STC指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

4、MCR:ARM处理器寄存器到协处理器寄存器的数据传送指令。

  MCR{条件}。协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2

  MCR指令用于将ARM处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,源寄存器为ARM处理器的寄存器,目的寄存器1和目的寄存器2均为协处理器的寄存器。

5、MRC

  MRC{条件}。协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2

  MRC指令用于将协处理器寄存器中的数据传送到ARM处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,目的寄存器为ARM处理器的寄存器,源寄存器1和源寄存器2均为协处理器的寄存器。

十、异常产生指令

1、SWI:软件中断指令

  SWI{条件}   24位的立即数

  SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递。当指令中24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器R0的内容决定,同时,参数通过其他通用寄存器传递。

2、BKPT:断电中断指令

  BKPT  16位的立即数

  BKPT指令产生软件断点中断,可用于程序的调试。

ARM指令集详解的更多相关文章

  1. ARM指令集详解--汇编

    1.       汇编 1.1.    通用寄存器 通用寄存器 37个寄存器,31个通用寄存器,6个状态寄存器,R13堆栈指针sp,R14返回指针,R15为PC指针, cpsr_c代表的是这32位中的 ...

  2. 嵌入式ARM汇编详解

    文章目录 零.预备知识 1.ARM与X86 2.ARM中指令的执行 3.ARM的九种寻址方式 立即数寻址 寄存器寻址 寄存器间接寻址 寄存器偏移寻址 寄存器基址变址寻址 批量寄存器寻址 相对寻址 堆栈 ...

  3. 2.3 ARM寄存器详解

    一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异 ...

  4. 022 ARM寄存器详解

    R13:堆栈指针寄存器 SP R14:链接寄存器 LR R15:程序计数器 PC指针 CPSR:当前程序状态寄存器 SPSR:备份程序状态寄存器

  5. 【转载】ARM MMU详解

    一.MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以 ...

  6. 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  7. 热烈祝贺华清远见《ARM处理器开发详解》第2版正式出版

    2014年6月,由华清远见研发中心组织多名业 内顶尖讲师编写的<ARM处理器开发详解>一书正式出版.本书以S5PV210处理器为平台,详细介绍了嵌入式系统开发的各个主要环节,并注重实践,辅 ...

  8. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  9. linux-2.6.26内核中ARM中断实现详解(转)

    转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJ ...

随机推荐

  1. this 指向详细解析(箭头函数)

    前言 this 指向问题是入坑前端必须了解知识点,现在迎来了ES6时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,遂有此文 在非箭头函数下, this 指向调用其所在函数的对象,而 ...

  2. 使用plot_importance绘制特征重要性曲线

    代码如下所示: # -*- coding: utf-8 -*- #导入需要的包 import matplotlib.pyplot as plt from sklearn import datasets ...

  3. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...

  4. zk hdfs hadoop yarn hive 学习笔记

    如图

  5. python-day12 MySQL、sqlalchemy

    @第一节上周回顾没看 @博客day11 https://www.cnblogs.com/alex3714/articles/5950372.html @InnoDB,是MySQL的数据库引擎之一 @S ...

  6. 8Linux磁盘划分、RAID

    磁盘划分fdisk 1.磁盘分区 fdisk 2.格式化 mkfs.ext4 mkfs.xfs 3.挂载 mount 路径 挂载路径 fdisk命令中的参数以及作用 参数 作用m 查看全部可用的参数n ...

  7. Linux 内核的 Makefile

    Linux内核的配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则: 2.配 ...

  8. K8s简单yaml文件运行例子deployment

    kubectl run 创建并运行一个或多个容器镜像. 创建一个deployment 或job 来管理容器. kubectl run 语法: $ run NAME --image=image [--e ...

  9. javaSE基础知识

    JVM,JRE,JDK三者的简单总结 1.见名解释 Java虚拟机(JVM):Java virtual machine简称JVM:“virtual”中文意思“虚拟的”,“machine”中文意思“机器 ...

  10. nginx stream module on mt7621(newifi3 d2) with openwrt 18.06.2

    因为需要使用nginx的stream模块,专门编译了一个nginx安装包,适用于openwrt 18.06.2版本,mt7621平台 顺便记录一下编译的笔记: 1.修改feeds/packages/n ...