8981|9

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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指令行会出现什么样的情况呢?

小弟新入分数比较少,请各位体谅
此帖出自ARM技术论坛

最新回复

请多关注国产ARM板级软件仿真器的发展: http://blog.eeworld.net/lxzhg/archive/2010/01/06/5142441.aspx   详情 回复 发表于 2010-2-5 22:02
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

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

回复

63

帖子

0

TA的资源

一粒金砂(初级)

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




那么第一个问题MOV是怎么影响CPSR的呢
此帖出自ARM技术论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
MOV 指令的格式为:
MOV{条件}{S} 目的寄存器,源操作数
MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S
选项决定指令的操作是否影响CPSR 中条件标志位的值,当没有S 时指令不更新CPSR 中条件标志位
的值。
此帖出自ARM技术论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
问题一:MOV一般不影响CPSR, 除非执行类似MOV pc, lr,效果上等同于BX lr
       MOVS总是会影响CPSR, 包括N,Z,C标志位
        执行MOV pc, lr,可能会影响到T标志位,执行MOVS pc, lr时,CPSR会被SPSR覆盖(内核态)

问题二:在Thumb代码里不能使用B跳转到ARM代码,因为T标志不会切换,即使跳到ARM代码,
        也会按照Thumb方式来执行,BX是跳特殊指令,会根据目标寄存器地址来切换T标志。

本人是ARM板级仿真开发者,对于ARM/Thumb指令集运行原理比较了解,请多关注国产软件仿真的发展:
http://blog.eeworld.net/lxzhg/archive/2010/01/06/5142441.aspx
此帖出自ARM技术论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 dxw777 的回复:
MOV 指令的格式为:
MOV{条件}{S} 目的寄存器,源操作数
MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S
选项决定指令的操作是否影响CPSR 中条件标志位的值,当没有S 时指令不更新CPSR 中条件标志位
的值。



但是MOVS指令什么情况下给N、Z、C置什么值呢  SPSR是怎么确定的
此帖出自ARM技术论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 lxzhg 的回复:
问题一:MOV一般不影响CPSR, 除非执行类似MOV pc, lr,效果上等同于BX lr
? ? ? MOVS总是会影响CPSR, 包括N,Z,C标志位
? ? ? ? 执行MOV pc, lr,可能会影响到T标志位,执行MOVS pc, lr时,CPSR会被SPSR覆盖(内核态)

问题二:在Thumb代码里不能使用B跳转到ARM代码,因为T标志不会切换,即使跳到ARM代码,
? ? ? ? 也会按照Thumb方式来执行,BX是跳特殊指令,会根据目标寄存器地址来切换T标志。

本人是ARM板级仿真开发者,对于ARM/Thumb指令集运行原理比较了解,请多关注国产软件仿真的发展:
http://blog.eeworld.net/lxzhg/archive/2010/01/06/5142441.aspx



但是MOVS指令什么情况下给N、Z、C置什么值呢  SPSR是怎么确定的
此帖出自ARM技术论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

8
 
执行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)
此帖出自ARM技术论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 lxzhg 的回复:
执行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)




高手一出手就是不一样 感谢啦
此帖出自ARM技术论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
请多关注国产ARM板级软件仿真器的发展:
http://blog.eeworld.net/lxzhg/archive/2010/01/06/5142441.aspx
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表