首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

ARM汇编MOVS指令影响CPSR和BX状态切换指令的有关问题

2012-04-15 
ARM汇编MOVS指令影响CPSR和BX状态切换指令的问题问题一:MOV是怎么影响CPSR的问题二:求证对BX用最后一位标

ARM汇编MOVS指令影响CPSR和BX状态切换指令的问题
问题一:MOV是怎么影响CPSR的 

问题二:求证对BX用最后一位标志状态切换的一点猜想 
程序代码如下: 
  AREA EX,CODE,READONLY 
  ENTRY 
MAIN ADR RO,THUMBCODE+1 
  BX RO 

  CODE16 
THUMBCODE MOV R2,#1 
  MOV R3,#2 
  ADD R2,R2,R3 
  ADR R0,ARMCODE 
  BX RO 

  CODE32 
ARMCODE MOV R4,#3 
  MOV R5,#4 
  ADD R4,R5,R3 
  B MAIN 
  END 
本人有预先猜想求证 
1.跳转是通过修改pc完成的,无论thumb和ARM地址的都是按照最少2的倍数递增的,因此地址最后一位一直为0,所以BX指令可以通过最后一位标示要跳转的是thumb还是ARM指令 
例如ARM指令pc从8004到8008最后一位的二进制是0100到1000,thumb的8004到8006最后一位是0100到0110 
这样想对吗? 
2.如果我在thumb中直接通过一个B指令分支到一个ARM指令行会出现什么样的情况呢? 

小弟新入分数比较少,请各位体谅

[解决办法]
1. 基本上可以这么理解
2. B指令不带状态切换,所以通过B从thumb跳转到arm指令的结果不确定,最大的可能是取指异常,也有可能碰巧解码出来是合法的thumb指令,执行结果就难说了。。。

[解决办法]
MOV 指令的格式为:
MOV{条件}{S} 目的寄存器,源操作数
MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S
选项决定指令的操作是否影响CPSR 中条件标志位的值,当没有S 时指令不更新CPSR 中条件标志位
的值。
[解决办法]
执行MOVS,一定会影响N,Z,C标志
比如MOVS r0, #1,执行后r0=1
Z=!r0=0; 是否为0
N=r0>>31=0;符号位
C=!(r0 >= 0)=0;是否有进位

SPSR是进入内核态时,比如进入中断,对CPSR的备份(spsr=cpsr),退出内核态时,再恢复回来(cpsr=spsr)

热点排行