高端向量:
一些ARM允许异常向量的定位由32位地址空间低端的正常地址范围0x00000000~0x0000001c移到接近于地址空间高端的另一地址范围0xffff0000~0xffff001c。这些改编后的地址位置称为高端向量。由IMPLEMENTATION DEFINED决定是否支持高端向量。如果支持,则在输入硬件配置时选择是使用正常向量还是高端向量。
进入异常的操作:
(1)降下一条指令的地址保存在相应的LR寄存器中。
(2)将CPSR复制到相应的SPSR中。
(3)迫使CPSR模式位设置成取决于异常的值。
(4)迫使PC从相关的异常向量取下一条指令,也可以设置中断禁止位来阻止其他无法处理的异常嵌套。如果再异常发生时处理器是在Thumb状态下,那么当用中断异常向量地址加载PC时,自动切换进入ARM状态。
ARM7TDMI:
T:表示支持16位压缩指令集Thumb。
D:表示支持片上Debug。
M:表示内嵌乘法器。
I:表示嵌入式ICE。支持片上断点和调试点。
从寻址方式的地址计算方法分,加载/存储指令有以下4种形式:
(1)零偏移。
(2)前索引偏移。再数据传送之前,将偏移量加载到Rn中,其结果作为传送数据的存储地址。若使用后缀“!”,则结果写回到RN中,且Rn的值不允许为R15。
(3)程序相对偏移。程序相对偏移是前索引形式的另一个版本。汇编器由PC寄存器计算偏移量,并将PC寄存器作为Rn生成前索引指令。不能使用“!”指令。
(4)后索引偏移。
LDM和STM-多寄存器加载/存储指令:
LDM和STM指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。LDM为夹在多个寄存器:STM 为存储多个寄存器。允许一条指令传送16个寄存器的任何子集。
LDM{cond}<模式>Rn{!},reglist{^}
LDM/STM的主要用途是现场保护,数据恢复和参数传递。
**指令格式中,寄存器Rn为基址寄存器,装有传送数据的初始地址,Rn不允许为R15,后缀”!“表示最后的地址写回到Rn中。寄存器列表reglist可包含多于一个寄存器或包含寄存器范围,使用”,“分开。后缀"^"不允许用户模式或系统模式下使用。若在LDM指令且寄存器列表中包含有PC时使用,那么除了正常的多寄存器传输外,将SPSR也复制到CPSR中,可用于异常处理返回。使用后缀"^"进行数据传送且寄存器列表不包含PC时,加载/存储的是用户模式的寄存器,而不是当前模式下的寄存器。
当Rn在寄存器列表中且使用后缀"!"时,对于STM指令,若Rn为寄存器列表中的最低数字的寄存器,则会将Rn的初值保存;其他情况下Rn的加载值和存储值不可预知的。
ARM数据处理指令:(数据处理指令只能对寄存器的内容进行操作)
- 数据传送指令
- 算术逻辑运算指令
- 比较指令