200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ARM处理器指令集(精简指令集)

ARM处理器指令集(精简指令集)

时间:2020-10-17 06:58:08

相关推荐

ARM处理器指令集(精简指令集)

这些指令是怎么编码、怎么变成二进制数据存储在存储器中的?

ARM920T处理器大部分指令都可以根据上条指令执行结果的状态,决定是否执行当前指令。如果条件满足就执行当前指令,否则不执行当前指令,相当于执行了一条空指令。

相关条件码信息:

注:0b表示后面的数字是二进制数。

很多指令不会主动影响CPSR寄存器中的标志位。有时可以在指令助记符后面加入“s”符号,表示要求这条指令的执行结果将影响CPSR寄存器中的标志位。

ARM920T处理器的数据处理指令

mov指令是将一个常数或者寄存器中的数据传送到目标寄存器中。mvn指令是将一个常数或者寄存器中的数据按位取反后传送到目标寄存器中。、add指令完成第一个源寄存器和第二个常数或者第二个源寄存器相加,并把结果放进目标寄存器中,也可以影响CPSR中的标志位。adc指令完成第一个源寄存器和第二个常数或者第二个源寄存器的相加,再加上CPSR中的C标志位,并把结果放进目标寄存器中。结果也可以影响CPSR中的标志位。sub指令完成第一个源寄存器和第二个常数或者第二个源寄存器相减,并把结果放进目标寄存器中,也可以影响CPSR中的标志位。需要注意的是减法若发生借位,CPSR中的C位会设置成0。sbc指令完成第一个源寄存器和第二个常数或者第二个源寄存器相减,再减去CPSR中的C标志位的反码,并把结果放进目标寄存器中。结果也可以影响CPSR中的标志位。rsb指令完成第二个常数或者第二个源寄存器和第一个源寄存器相减,并把结果放进目标寄存器中。正因为这样,它也称为“逆向减法指令”,也可以影响CPSR中的标志位。需要注意的是减法若发生借位,CPSR中的C位会设置成0。rsc指令完成第二个常数或者第二个源寄存器和第一个源寄存器相减,再减去CPSR中的C标志位的反码,并把结果放进目标寄存器中。正因为这样,它也称为带借位的逆向减法指令,也可以影响CPSR中的标志位。mul指令实现两个32位数的乘法运算,把结果放在目标寄存器中。这两个数可以是无符号整数也可以是有符号整数,并且这两个数要放在两个寄存器中。当然结果可能影响CPSR中的标志位。由于两个32位数的乘积是64位数,但是mul指令仅仅保存了这个乘积的低32位。mla指令实现两个32位数的乘法运算,再加上第三个32位数,把结果放在目标寄存器中。第一、二个数可以是无符号整数也可以是有符号整数,这三个数据必须放在3个寄存器中。当然结果可能影响CPSR中的标志位。同样,mla指令也是只保存前两个数据乘积的低32位。and指令完成第一个源寄存器与第二个常数或者第二个源寄存器,按位进行逻辑与操作,把结果放进目标寄存器中,同时根据结果可能影响CPSR中的标志位。逻辑与操作是参加与运算的两个数据都为“1”时,结果才为“1”。例如,0xF与0xF的结果还是为0xF;0xF与0的结果为0;0与0xF的结果也为0;0x1与上0xF的结果为0x1。orr指令完成第一个源寄存器与第二个常数或者第二个源寄存器的按位逻辑或操作,把结果放进目标寄存器中,结果可能影响CPSR中的标志位。逻辑或操作是参加或运算的两个数据有一个为“1”时,结果就为“1”。例如,0xF或0xF的结果还是为0xF;0xF或0的结果为0xF;0或0xF的结果为0xF;0x1或0xF的结果为0xF。bic指令完成第一个源寄存器与第二个常数或者第二个源寄存器的反码操作,把结果放进目标寄存器中,同时结果可能影响CPSR中的标志位。这条指令经常用于数据位清零操作。eor指令完成第一个源寄存器与第二个常数或者第二个源寄存器的按位逻辑异或操作,把结果放进目标寄存器中,同时结果可能影响CPSR中的标志位。逻辑异或操作是参加异或运算的两个数据位相同时,结果就为“0”,不同时为“1”。例如,0xF异或0xF的结果为0;0xF异或0的结果为0xF;0异或0xF的结果为0xF;0x0异或0x0的结果为0x0。cmp指令用第一个源寄存器减去第二个常数或者第二个源寄存器,总是根据结果影响CPSR中的标志位,但是不回写结果。cmn指令用第一个源寄存器加上第二个常数或者第二个源寄存器,总是根据结果影响CPSR中的标志位,但是不回写结果。tst指令完成第一个源寄存器与第二个常数或者第二个源寄存器按位逻辑与操作。总是根据结果影响CPSR中的标志位,C位、V位通常是不受影响的。同样也不回写结果。teq指令完成第一个源寄存器与第二个常数或者第二个源寄存器按位逻辑异或操作。总是根据结果影响CPSR中的标志位,C位、V位通常是不受影响的。同样也不回写结果。swp指令完成从一个内存字单元中读取一个数据到目标寄存器,这个内存字的地址放在第二个源寄存器中,以此同时把第一个源寄存器中的内容写入这个内存字单元中。因此这条指令完成内存字和寄存器之间数据的原子交换。还有一条指令,其功能、用法都和swp指令差不多的指令——swpb指令。它唯一和swp指令不同的是:它只是交换一个内存字节单元的数据。执行后,swpb自动把目标寄存器的高24位清零,只保留低8位,即一个字节。

摘自《深度探索嵌入式操作系统:从零开始设计、架构和开发 (Linux/Unix技术丛书)》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。