- 博客(94)
- 资源 (4)
- 收藏
- 关注
原创 刘帅嵌入式系统-批量Load/Store内存访问指令
批量load内存访问指令可以一次从连续的内存单元中读取数据,传送到指令中的内存列表中的各个寄存器中。批量store内存访问指令可以将指令中寄存器列表中的各个寄存器值写入到内存中,内存的地址由指令中的寻址模式确定。批量Load/Store内存访问指令的语法格式如下:LDM|STM{< cond >} < addressing_mode > Rn{!}, <...
2019-06-05 22:59:05
371
原创 刘帅嵌入式系统-STRBT用户模式的字节数据写入指令
STRBT指令用于将一个8位的字节数据写入到指令中指定的内存单元。当在特权级的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作。指令的编码格式令的编码格式LDR{< cond >}BT< Rd >, < Post_indexed_addressing_mode >其中: < cond >为指...
2019-05-30 22:06:43
1511
原创 刘帅嵌入式系统-STRT用户模式字数据写入指令
STRT指令用于将一个32位的字数据写入到指令中指定的内存单元。当在特权级的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作。指令的编码格式指令的编码格式LDR{< cond >}T< Rd >, < Post_indexed_addressing_mode >其中: < cond >为指令...
2019-05-29 22:56:18
782
原创 刘帅嵌入式系统-STRH半字数据写入指令
STRH指令用于将一个16位的半字数据写入到指令中指定的内存单元。该半字数据为指令中存放源操作数的寄存器的低16位。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。指令的编码格式指令的编码格式LDR{< cond >}H < Rd >, < addressing_mode >其中: < cond >为指...
2019-05-28 23:03:58
1476
原创 刘帅嵌入式系统-STRB字节数据写入指令
STRB指令用于将一个8位的字节数据写入到指令中指定的内存单元。该字节数据为指令中存放源操作数的寄存器的低8位。指令的编码格式指令的编码格式LDR{< cond >}B < Rd >, < addressing_mode >其中: < cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行...
2019-05-27 22:45:27
2128
原创 刘帅嵌入式系统-STR字数据写入指令
STR指令用于将一个32位的字数据写入到指令中指定的内存单元。指令的编码格式指令的编码格式LDR{< cond >} < Rd >, < addressing_mode >其中: < cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行。 < Rd >为目标寄存器。...
2019-05-26 22:44:04
1287
原创 刘帅嵌入式系统-LDRT用户模式的字数据读取指令
LDRT指令用于从内存中将一个32位的字数据读取到指令中的目标寄存器中。如果指令中寻址方式确定的地址不是字对齐的,则从内存中读出的数值要进行循环右移操作,移位的位数为寻址方式确定的地址的bits[1:0]的8倍。这样对于Little-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的低8位;对于Big-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的bits[31...
2019-05-25 22:14:07
1112
原创 刘帅嵌入式系统-LDRSH有符号的半字数据读取指令
LDRSH指令用于从内存中将一个16位的半字数据读取到指令中的目标寄存器中。并将寄存器的高12位设置成该半字数据的符号位的值(即将该16位半字数据进行符号位扩展,生成32位字数据)。如果指令中的内存地址不是半字对齐的,指令会产生不可预期的结果。指令的编码格式指令的语法格式LDR{< cond >}SH < Rd >, < post_indexed_addr...
2019-05-24 22:26:33
3379
1
原创 刘帅嵌入式系统-LDRSB有符号的字节数据读取指令
LDRSB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位设置成该字节数据的符号位的值(即将该8位字节数据进行符号位扩展,生成32位字数据)。指令的编码格式指令的语法格式LDR{< cond >}SB < Rd >, < post_indexed_addressing_mode >其中:< cond &g...
2019-05-23 22:36:06
4367
1
原创 刘帅嵌入式系统-LDRH半字节数据读取指令
LDRH指令用于从内存中将一个16位的半字节数据读取到指令中的目标寄存器中。并将寄存器的高16位清零。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。指令的编码格式指令的语法格式LDR{< cond >}H < Rd >, < post_indexed_addressing_mode >其中:< cond >为指令执行的...
2019-05-22 22:45:38
1735
原创 刘帅嵌入式系统-LDRBT用户模式的字节数据读取指令
LDRBT指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位清零。当在特权级的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作。指令的编码格式指令的语法格式LDR{< cond >}BT < Rd >, < post_indexed_addressing_mode >其中:< co...
2019-05-21 23:05:14
533
原创 刘帅嵌入式系统-LDRB字节数据读取指令
LDRB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位清零。指令的编码格式指令的语法格式LDR{< cond >}B < Rd >, < addressing_mode >其中:< cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行。< Rd >为...
2019-05-20 23:11:05
4163
原创 刘帅嵌入式系统-LDR字数据读取指令
LDR指令用于从内存中将一个32位的字读取到指令中的目标寄存器中。如果指令中寻址方式确定的地址不是字对齐的,则从内存中去读的数值要进行循环右移操作,移位的位数为寻址方式确当的地址的bits[1:0]的8倍。这样队医little-endian的内存模式,指令想要读取的字节数据存放在目标寄存器的低8位;对于Big-endian的内存模式,指令想要读取的字节数据存放的目标寄存器的bits[31:23]...
2019-05-19 23:50:03
1325
原创 刘帅嵌入式系统-Load/Store内存访问指令
Load指令用于从内存中读取数据放入寄存器中;Store指令用于将寄存器中的数据保存到内存。ARM有两大类Load/Store指令:一类用于操作32位的字类型数据以及8位无符号的字节类型数据;另一类用于操作16位半字类型的数据以及8位的有符号字节类型的数据。Load/Store内存访问指令的一个操作数放在寄存器中,另一个操作数的寻址方式可以参考之前介绍的操作数寻址方式章节。用于操作32位的字...
2019-05-18 21:18:38
1390
原创 刘帅嵌入式系统-MSR指令
MSR指令用于将通用寄存器的内容或一个立即数传送到状态寄存器中。指令的编码格式指令的源操作数为通用寄存器时,指令编码格式如下:指令的源操作数为立即数时,指令编码格式如下:指令的语法格式MSR{< cond >} CPSR_< fields >, #< immediate >MSR{< cond >} CPSR_< fields...
2019-05-17 23:05:27
1041
原创 刘帅嵌入式系统-状态寄存器访问指令
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。关于状态寄存器,这里仅强调以下几点。状态寄存器中,有些位是当前没有使用的,但在ARM将来的版本中有可能使用这些位,因此用户程序不要使用这些位。程序不能通过直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换。通常修改状态寄存器是通过"读取-修改-写回"的操作序列来实现的。状态寄...
2019-05-16 22:44:25
539
原创 刘帅嵌入式系统-杂类的算术指令
在ARMv5及以上的版本中,包含一条特别的指令CLZ,用于计算操作数最高端0的个数。这条指令主要用于以下两种场合:计算操作数规范化(使其最高位为1)时需要左移的位数。确定一个优先级掩码中最高优先级(最高位的优先级)。CLZ前导0个数计数指令CLZ指令用于计算寄存器中操作数最高端0的个数。如果操作数的bit[31]为1,则指令返回0;如果操作数为0,则指令返回32。指令的编码格式...
2019-05-15 23:05:41
449
原创 刘帅嵌入式系统-UMLAL指令
UMLAL指令实现两个32位的无符号数的64位乘积结果与< RdHi >和 < RdLo >中的64位无符号数相加,加法结果的高32位存放到一个32位寄存器中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。指令的编码格式指令的语法格式UMLAL{< cond >} ...
2019-05-14 22:27:04
891
原创 刘帅嵌入式系统-UMULL指令
UMULL指令实现两个32位的无符号数的乘积,乘积结果的高32位存放到一个32位寄存器的< RdHi >中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。指令的编码格式指令的语法格式UMULL{< cond >} {S} &...
2019-05-13 23:00:45
2399
原创 刘帅嵌入式系统-SMLAL指令
SMLAL指令实现两个32位的有符号数的64位乘积结果与< RdHi >和 < RdLo >中的64位数相加,加法结果的高32位存放到一个32位寄存器中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。指令的编码格式指令的语法格式SMLAL{< cond >} {S}...
2019-05-12 22:03:46
931
原创 刘帅嵌入式系统-SMULL指令
SMULL指令实现两个32位的有符号数的乘积,再将乘积加上第3个操作数,乘积结果的高32位存放到一个32位寄存器的< RdHi >中,乘积结果的低32位存放到另一个32位的寄存器< RdLo >中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。指令的编码格式指令的语法格式SMULL{< con...
2019-05-11 22:19:34
1878
原创 刘帅嵌入式系统-MLA指令
MLA指令实现两个32位的数(可以为无符号,也可以为有符号)的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。指令的编码格式指令的语法格式MLA{< cond >} {S} < Rd >, < Rm >, < Rs ...
2019-05-10 21:18:41
4072
原创 刘帅嵌入式系统-乘法指令
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
767
原创 刘帅嵌入式系统-TEQ相等测试指令
TEQ指令将< shifter_operand > 表示的数值与寄存器< Rn >的值按位做逻辑异或操作,根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式TEQ{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >其中:< cond &...
2019-05-08 22:27:31
562
原创 刘帅嵌入式系统-TST位测试指令
TST指令将< shifter_operand > 表示的数值与寄存器< Rn >的值按位做逻辑与操作,根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式TST{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >其中:< cond &g...
2019-05-07 22:36:36
2400
原创 刘帅嵌入式系统-CMN基于相反数的比较指令
CMN指令将寄存器Rn中的值加上< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行了。指令的编码格式指令的语法格式CMN{< cond >} {S} < Rd >, < Rn> ,< shifter_operand &...
2019-05-06 21:20:44
1040
原创 刘帅嵌入式系统-CMP比较指令
CMP指令从寄存器Rn中减去< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行了。指令的编码格式指令的语法格式CMP{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >...
2019-05-05 23:28:46
1204
原创 刘帅嵌入式系统-BIC位清除指令
BIC指令将< shifter_operand > 表示的数值与寄存器< Rn >值的反码按位做逻辑与操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式BIC{< cond >} {S} < Rd >, < Rn> ,< shifter...
2019-05-04 21:35:59
1976
原创 刘帅嵌入式系统-EOR逻辑异或操作指令
EOR指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑异或操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式EOR{< cond >} {S} < Rd >, < Rn> ,< shifter_o...
2019-05-03 21:25:30
2252
原创 刘帅嵌入式系统-ORR逻辑或操作指令
ORR指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑或操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式ORR{< cond >} {S} < Rd >, < Rn> ,< shifter_op...
2019-05-02 22:22:16
2335
原创 刘帅嵌入式系统-AND逻辑与操作指令
AND指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑与操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式AND{< cond >} {S} < Rd >, < Rn> ,< shifter_op...
2019-05-01 21:23:51
1089
原创 刘帅嵌入式系统-RSC逆向减法指令
RSC指令从< shifter_operand > 表示的数值中减去寄存器< Rn >值,再减去寄存器CPSR中C标志位的反码,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式RSC{< cond >} {S} < Rd >, < Rn> ,&l...
2019-04-29 20:41:16
1384
原创 刘帅嵌入式系统-RSB逆向减法指令
RSB指令从< shifter_operand > 表示的数值中减去寄存器< Rn >值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式RSB{< cond >} {S} < Rd >, < Rn> ,< shifter_operand ...
2019-04-28 22:17:23
3930
原创 刘帅嵌入式系统-SUB减法指令
SUB指令从寄存器< Rn >中减去< shifter_operand > 表示的数值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式SUB{< cond >} {S} < Rd >, < Rn> ,< shifter_operand &...
2019-04-27 21:44:00
4639
原创 刘帅嵌入式系统-ADD加法指令
ADD 指令将< shifter_operand > 表示的数据与寄存器< Rn >中的值相加,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式ADD{< cond >} {S} < Rd >, < Rn> ,< shifter_opera...
2019-04-26 23:49:46
4328
原创 刘帅嵌入式系统-MVN传输指令
MVN指令将< shifter_operand >表示的数据的反码传送到目标寄存器< Rd >中,并根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式MVN{< cond >} {S} < Rd >, < shifter_operand >其中,各参数的用法与MOV传送指令相同。指令操作的伪代码if...
2019-04-25 23:08:41
579
原创 刘帅嵌入式系统-MOV传输指令
MOV传输指令MOV指令将<shifter_operand>表示的数据传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。指令的编码格式指令的语法格式MOV {<cond>} {S} , <shifter_operand>其中:为指令执行的条件码。当忽略时,指令为无条件执行。S 决定指令的操作是否影响CPSR中条件标志位的值。当...
2019-04-24 22:24:58
1098
原创 刘帅嵌入式系统-数据处理指令
数据处理指令数据处理大致可分为3类:数据传输指令,比如MOV算术逻辑运算指令,如ADD、SUB比较指令,如TST数据传输指令用于向寄存器中传入一个常数。该指令包含一个目标寄存器和一个源操作数,源操作数的计算方法已经在之前介绍,可参考之前的介绍。算术逻辑运算指令通常包括一个目标寄存器和两个源操作数。其中一个源操作数为寄存器的值,另外一个源操作数的计算方法在之前已经介绍,可参考之前的...
2019-04-23 22:26:52
419
原创 刘帅嵌入式系统-BX
BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指。目标地址值为指令的值和0xFFFFFFFF做与操作的结果,目标地址处的指令类型由寄存器的bit[0]决定指令的编码格式指令的语法格式BX {} 其中:为指令执行的条件码。忽略时,指令为无条件执行。寄存器中为跳转的目标地址。当寄存器的bit[0]为0时,目标地址处的指令为ARM指令;当寄存器...
2019-04-22 23:13:45
283
原创 刘帅嵌入式系统-BLX(2)
第二种格式的BLX指令记作BLX(2)。BLX(2)指令从ARM指令集跳转到指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器中,该地址的bit[0]值为0,目标地址处的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。指令的编码格式指令的语法格式BLX{} 其中:为指令执行的条件码。当忽略时,指令为无...
2019-04-21 21:25:32
365
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人