![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ARM
shuai532209720
这个作者很懒,什么都没留下…
展开
-
刘帅嵌入式系统-BLX(1)
第一种格式的BLX指令记作BLX(1),BLX(1)指令从ARM指令集跳转到指定的目标地址,并将程序状态切换为Thumb状态,同时将PC寄存器的内容复制到LR寄存器中。本指令属于无条件执行的指令(即条件码为AL)。指令编码格式指令的语法格式BLX <target_address>其中,<target_address> 指令跳转的目的地址。范围大致为-32M~+3...原创 2019-04-20 22:13:59 · 368 阅读 · 0 评论 -
刘帅嵌入式系统-EOR逻辑异或操作指令
EOR指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑异或操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式EOR{< cond >} {S} < Rd >, < Rn> ,< shifter_o...原创 2019-05-03 21:25:30 · 2015 阅读 · 0 评论 -
刘帅嵌入式系统-RSB逆向减法指令
RSB指令从< shifter_operand > 表示的数值中减去寄存器< Rn >值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式RSB{< cond >} {S} < Rd >, < Rn> ,< shifter_operand ...原创 2019-04-28 22:17:23 · 3567 阅读 · 0 评论 -
刘帅嵌入式系统-B(跳转指令)及BL(带返回的跳转指令)
B(跳转指令)及BL(带返回的跳转指令)B指令和BL指令均可以跳转到指令中的目标地址,这两个指令和目标地址处的指令都时ARM指令集。相同之处二者也可以根据CPSR中条件标志位的值和指令中的执行条件来决定是否执行跳转操作。不同之处B指令仅仅执行跳转操作;BL指令同时还将PC寄存器的值保存到LR寄存器中。指令编码格式31 2827 26 252423 --...原创 2019-04-19 22:03:22 · 2478 阅读 · 0 评论 -
刘帅嵌入式系统-BIC位清除指令
BIC指令将< shifter_operand > 表示的数值与寄存器< Rn >值的反码按位做逻辑与操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式BIC{< cond >} {S} < Rd >, < Rn> ,< shifter...原创 2019-05-04 21:35:59 · 1874 阅读 · 0 评论 -
刘帅嵌入式系统-MOV传输指令
MOV传输指令MOV指令将<shifter_operand>表示的数据传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式MOV {<cond>} {S} , <shifter_operand>其中:为指令执行的条件码。当忽略时,指令为无条件执行。S 决定指令的操作是否影响CPSR中条件标志位的值。当...原创 2019-04-24 22:24:58 · 1002 阅读 · 0 评论 -
刘帅嵌入式系统-RSC逆向减法指令
RSC指令从< shifter_operand > 表示的数值中减去寄存器< Rn >值,再减去寄存器CPSR中C标志位的反码,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式RSC{< cond >} {S} < Rd >, < Rn> ,&l...原创 2019-04-29 20:41:16 · 1270 阅读 · 0 评论 -
刘帅嵌入式系统-CMP比较指令
CMP指令从寄存器Rn中减去< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行了。指令的编码格式指令的语法格式CMP{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >...原创 2019-05-05 23:28:46 · 1136 阅读 · 0 评论 -
刘帅嵌入式系统-TEQ相等测试指令
TEQ指令将< shifter_operand > 表示的数值与寄存器< Rn >的值按位做逻辑异或操作,根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式TEQ{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >其中:< cond &...原创 2019-05-08 22:27:31 · 478 阅读 · 0 评论 -
刘帅嵌入式系统-UMULL指令
UMULL指令实现两个32位的无符号数的乘积,乘积结果的高32位存放到一个32位寄存器的< RdHi >中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。指令的编码格式指令的语法格式UMULL{< cond >} {S} &...原创 2019-05-13 23:00:45 · 2189 阅读 · 0 评论 -
刘帅嵌入式系统-数据处理指令
数据处理指令数据处理大致可分为3类:数据传输指令,比如MOV算术逻辑运算指令,如ADD、SUB比较指令,如TST数据传输指令用于向寄存器中传入一个常数。该指令包含一个目标寄存器和一个源操作数,源操作数的计算方法已经在之前介绍,可参考之前的介绍。算术逻辑运算指令通常包括一个目标寄存器和两个源操作数。其中一个源操作数为寄存器的值,另外一个源操作数的计算方法在之前已经介绍,可参考之前的...原创 2019-04-23 22:26:52 · 386 阅读 · 0 评论 -
刘帅嵌入式系统-ARM指令集
ARM指令集可以分为6类:--跳转指令--数据处理指令--程序状态寄存器(PSR)传输指令--Load/Store指令--协处理器指令--异常中断指令跳转指令 在ARM中,有方式可以实现程序跳转:一种是跳转指令;一种是直接向PC寄存器(R15)中写入目的地址。 通过直接向PC寄存器中写入目标地址值,可以实现在4GB的地址空间中任意跳转,这种跳转指令...原创 2019-04-18 23:40:31 · 279 阅读 · 0 评论 -
刘帅嵌入式系统-ORR逻辑或操作指令
ORR指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑或操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式ORR{< cond >} {S} < Rd >, < Rn> ,< shifter_op...原创 2019-05-02 22:22:16 · 2163 阅读 · 0 评论 -
刘帅嵌入式系统-协处理器Load/Store指令寻址方式三
事先更新[<Rn>],#+/-<offset_8>*4指令编码格式:存地址计算方法:这种寻址方式产生一段连续的内存地址。第一个地址为基址寄存器<Rn>的值,记作<first_address>;随后的每个地址是前一个内存地址加4(字节);直到协处理器发出信号,结束本次数据传输。最后一个地址值为基址寄存器<Rn>...原创 2019-04-16 22:29:26 · 183 阅读 · 0 评论 -
刘帅嵌入式系统-BLX(2)
第二种格式的BLX指令记作BLX(2)。BLX(2)指令从ARM指令集跳转到指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器中,该地址的bit[0]值为0,目标地址处的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。指令的编码格式指令的语法格式BLX{} 其中:为指令执行的条件码。当忽略时,指令为无...原创 2019-04-21 21:25:32 · 318 阅读 · 0 评论 -
刘帅嵌入式系统-协处理器Load/Store指令的寻址方式
一条协处理器Load/Store指令可以再ARM处理器和协处理器之间传输批量数据。其语法格式如下:<opcode>{<cond>} {L} <coproc>,<CRd>,<addressing_mode>其中<addressing_mode>表示地址的变化方式,有如下4种: [<Rn>,#+/...原创 2019-04-13 22:58:21 · 260 阅读 · 0 评论 -
刘帅嵌入式系统-MVN传输指令
MVN指令将< shifter_operand >表示的数据的反码传送到目标寄存器< Rd >中,并根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式MVN{< cond >} {S} < Rd >, < shifter_operand >其中,各参数的用法与MOV传送指令相同。指令操作的伪代码if...原创 2019-04-25 23:08:41 · 492 阅读 · 0 评论 -
刘帅嵌入式系统-协处理器Load/Store指令寻址方式四
非索引[<Rn>],<option>指令编码格式:内存地址计算方法: 这种寻址方式产生一段连续的内存地址。第一个地址为基址寄存器<Rn>的值;随后的每个地址是前一个内存地址加4(字节);直到协处理器发出信号,结束本次数据传输。这种寻址方式允许协处理器来决定传输数据的数目。 这种寻址方式最大可以传输16个字的数据。指令中bits[...原创 2019-04-17 23:04:48 · 208 阅读 · 0 评论 -
刘帅嵌入式系统-ADD加法指令
ADD 指令将< shifter_operand > 表示的数据与寄存器< Rn >中的值相加,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式ADD{< cond >} {S} < Rd >, < Rn> ,< shifter_opera...原创 2019-04-26 23:49:46 · 4113 阅读 · 0 评论 -
刘帅嵌入式系统-BX
BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指。目标地址值为指令的值和0xFFFFFFFF做与操作的结果,目标地址处的指令类型由寄存器的bit[0]决定指令的编码格式指令的语法格式BX {} 其中:为指令执行的条件码。忽略时,指令为无条件执行。寄存器中为跳转的目标地址。当寄存器的bit[0]为0时,目标地址处的指令为ARM指令;当寄存器...原创 2019-04-22 23:13:45 · 239 阅读 · 0 评论 -
刘帅嵌入式系统-AND逻辑与操作指令
AND指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑与操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式AND{< cond >} {S} < Rd >, < Rn> ,< shifter_op...原创 2019-05-01 21:23:51 · 990 阅读 · 0 评论 -
刘帅嵌入式系统-SUB减法指令
SUB指令从寄存器< Rn >中减去< shifter_operand > 表示的数值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式SUB{< cond >} {S} < Rd >, < Rn> ,< shifter_operand &...原创 2019-04-27 21:44:00 · 4385 阅读 · 0 评论 -
刘帅嵌入式系统-CMN基于相反数的比较指令
CMN指令将寄存器Rn中的值加上< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行了。指令的编码格式指令的语法格式CMN{< cond >} {S} < Rd >, < Rn> ,< shifter_operand &...原创 2019-05-06 21:20:44 · 975 阅读 · 0 评论 -
刘帅嵌入式系统-乘法指令
ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类为64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条。MUL:32位乘法指令MLA:32位带加数的乘法指令SMULL:64位有符号数乘法指令SMLAL:64位带加数的有符号数乘法指令UMULL:64位无符号数乘法指令UMLAL:64位带加数的无符号数乘法指令MULMUL指令实现两个32...原创 2019-05-09 22:19:44 · 661 阅读 · 0 评论 -
刘帅嵌入式系统-STR字数据写入指令
STR指令用于将一个32位的字数据写入到指令中指定的内存单元。指令的编码格式指令的编码格式LDR{< cond >} < Rd >, < addressing_mode >其中: < cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行。 < Rd >为目标寄存器。...原创 2019-05-26 22:44:04 · 1181 阅读 · 0 评论 -
刘帅嵌入式系统-LDRH半字节数据读取指令
LDRH指令用于从内存中将一个16位的半字节数据读取到指令中的目标寄存器中。并将寄存器的高16位清零。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。指令的编码格式指令的语法格式LDR{< cond >}H < Rd >, < post_indexed_addressing_mode >其中:< cond >为指令执行的...原创 2019-05-22 22:45:38 · 1581 阅读 · 0 评论 -
刘帅嵌入式系统-MSR指令
MSR指令用于将通用寄存器的内容或一个立即数传送到状态寄存器中。指令的编码格式指令的源操作数为通用寄存器时,指令编码格式如下:指令的源操作数为立即数时,指令编码格式如下:指令的语法格式MSR{< cond >} CPSR_< fields >, #< immediate >MSR{< cond >} CPSR_< fields...原创 2019-05-17 23:05:27 · 932 阅读 · 0 评论 -
刘帅嵌入式系统-Load/Store内存访问指令
Load指令用于从内存中读取数据放入寄存器中;Store指令用于将寄存器中的数据保存到内存。ARM有两大类Load/Store指令:一类用于操作32位的字类型数据以及8位无符号的字节类型数据;另一类用于操作16位半字类型的数据以及8位的有符号字节类型的数据。Load/Store内存访问指令的一个操作数放在寄存器中,另一个操作数的寻址方式可以参考之前介绍的操作数寻址方式章节。用于操作32位的字...原创 2019-05-18 21:18:38 · 1311 阅读 · 0 评论 -
刘帅嵌入式系统-STRB字节数据写入指令
STRB指令用于将一个8位的字节数据写入到指令中指定的内存单元。该字节数据为指令中存放源操作数的寄存器的低8位。指令的编码格式指令的编码格式LDR{< cond >}B < Rd >, < addressing_mode >其中: < cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行...原创 2019-05-27 22:45:27 · 1885 阅读 · 0 评论 -
刘帅嵌入式系统-LDRSB有符号的字节数据读取指令
LDRSB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位设置成该字节数据的符号位的值(即将该8位字节数据进行符号位扩展,生成32位字数据)。指令的编码格式指令的语法格式LDR{< cond >}SB < Rd >, < post_indexed_addressing_mode >其中:< cond &g...原创 2019-05-23 22:36:06 · 4112 阅读 · 1 评论 -
刘帅嵌入式系统-STRBT用户模式的字节数据写入指令
STRBT指令用于将一个8位的字节数据写入到指令中指定的内存单元。当在特权级的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作。指令的编码格式令的编码格式LDR{< cond >}BT< Rd >, < Post_indexed_addressing_mode >其中: < cond >为指...原创 2019-05-30 22:06:43 · 1213 阅读 · 0 评论 -
刘帅嵌入式系统-STRH半字数据写入指令
STRH指令用于将一个16位的半字数据写入到指令中指定的内存单元。该半字数据为指令中存放源操作数的寄存器的低16位。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。指令的编码格式指令的编码格式LDR{< cond >}H < Rd >, < addressing_mode >其中: < cond >为指...原创 2019-05-28 23:03:58 · 1333 阅读 · 0 评论 -
刘帅嵌入式系统-批量Load/Store内存访问指令
批量load内存访问指令可以一次从连续的内存单元中读取数据,传送到指令中的内存列表中的各个寄存器中。批量store内存访问指令可以将指令中寄存器列表中的各个寄存器值写入到内存中,内存的地址由指令中的寻址模式确定。批量Load/Store内存访问指令的语法格式如下:LDM|STM{< cond >} < addressing_mode > Rn{!}, <...原创 2019-06-05 22:59:05 · 323 阅读 · 0 评论 -
刘帅嵌入式系统-LDRT用户模式的字数据读取指令
LDRT指令用于从内存中将一个32位的字数据读取到指令中的目标寄存器中。如果指令中寻址方式确定的地址不是字对齐的,则从内存中读出的数值要进行循环右移操作,移位的位数为寻址方式确定的地址的bits[1:0]的8倍。这样对于Little-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的低8位;对于Big-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的bits[31...原创 2019-05-25 22:14:07 · 951 阅读 · 0 评论 -
刘帅嵌入式系统-SMLAL指令
SMLAL指令实现两个32位的有符号数的64位乘积结果与< RdHi >和 < RdLo >中的64位数相加,加法结果的高32位存放到一个32位寄存器中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。指令的编码格式指令的语法格式SMLAL{< cond >} {S}...原创 2019-05-12 22:03:46 · 807 阅读 · 0 评论 -
刘帅嵌入式系统-状态寄存器访问指令
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。关于状态寄存器,这里仅强调以下几点。状态寄存器中,有些位是当前没有使用的,但在ARM将来的版本中有可能使用这些位,因此用户程序不要使用这些位。程序不能通过直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换。通常修改状态寄存器是通过"读取-修改-写回"的操作序列来实现的。状态寄...原创 2019-05-16 22:44:25 · 502 阅读 · 0 评论 -
刘帅嵌入式系统-LDR字数据读取指令
LDR指令用于从内存中将一个32位的字读取到指令中的目标寄存器中。如果指令中寻址方式确定的地址不是字对齐的,则从内存中去读的数值要进行循环右移操作,移位的位数为寻址方式确当的地址的bits[1:0]的8倍。这样队医little-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的低8位;对于Big-endian的内存模式,指令想要读取的字节数据存放的目标寄存器的bits[31:23]...原创 2019-05-19 23:50:03 · 1210 阅读 · 0 评论 -
刘帅嵌入式系统-UMLAL指令
UMLAL指令实现两个32位的无符号数的64位乘积结果与< RdHi >和 < RdLo >中的64位无符号数相加,加法结果的高32位存放到一个32位寄存器中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。指令的编码格式指令的语法格式UMLAL{< cond >} ...原创 2019-05-14 22:27:04 · 807 阅读 · 0 评论 -
刘帅嵌入式系统-TST位测试指令
TST指令将< shifter_operand > 表示的数值与寄存器< Rn >的值按位做逻辑与操作,根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式TST{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >其中:< cond &g...原创 2019-05-07 22:36:36 · 2266 阅读 · 0 评论 -
刘帅嵌入式系统-MLA指令
MLA指令实现两个32位的数(可以为无符号,也可以为有符号)的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。指令的编码格式指令的语法格式MLA{< cond >} {S} < Rd >, < Rm >, < Rs ...原创 2019-05-10 21:18:41 · 3774 阅读 · 0 评论