8904|4

222

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

求一段简单的汇编代码获取PC寄存器值 [复制链接]

为了判断代码是在SDRAM里还是在SRAM里,我现在的判断依据是PC寄存器(如果有更好的方法请告之)

如果PC值在0~4096确定代码在SRAM里,于是拷贝从Nand到SDRAM
如果PC值在0x30000000以上,表示代码在SDRAM里,不拷贝Nand到SDRAM里,表示在现在调试,【新代码】是用Jlink扫写到SDRAM里的,Nand是老代码。


本人汇编垃圾,请赐教
此帖出自ARM技术论坛

最新回复

把mov r0,pc张成mov r0,lr  详情 回复 发表于 2014-10-21 15:07
点赞 关注
 

回复
举报

222

帖子

2

TA的资源

一粒金砂(高级)

沙发
 
本帖最后由 lzwml 于 2014-10-20 17:07 编辑

貌似弄出来了,但是有疑问
  1. .global _where_pc

  2. _where_pc:
  3.         mov r0,pc
  4.         mov pc, lr
复制代码

连续两次调用_where_pc函数返回值都是一样的???PC指针不是应该递增吗?
输出:
addr 0x30000198
addr 0x30000198

  1. extern int _where_pc();
  2.         addr = _where_pc();
  3.         printf("addr 0x%8.8x\n",addr);


  4.         addr = _where_pc();
  5.         printf("addr 0x%8.8x\n",addr);
复制代码


查看反汇编查看0x30000198的位置,
  1. 30000050 <irq>:

  2. irq:
  3.     sub lr, lr, #4                  @ 计算返回地址
  4. 30000050:        e24ee004    sub    lr, lr, #4        ; 0x4
  5.     stmdb   sp!,    { r0-r12,lr }   @ 保存使用到的寄存器
  6. 30000054:        e92d5fff    stmdb     sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
  7.                                     @ 注意,此时的sp是中断模式的sp
  8.                                     @ 初始值是上面设置的3072

  9.     ldr lr, =int_return             @ 设置调用ISR即EINT_Handle函数后的返回地址  
  10. 30000058:        e59fe138         ldr        lr, [pc, #312]        ; 【30000198<.text+0x198>】地址在这里
  11.     ldr pc, =EINT_Handle            @ 调用中断服务函数,在interrupt.c中
  12. 3000005c:        e59ff138         ldr        pc, [pc, #312]        ; 3000019c <.text+0x19c>
复制代码
此帖出自ARM技术论坛
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

板凳
 
你用来取PC的指令的地址是固定的,所以用它取到的PC也是固定的。
此帖出自ARM技术论坛
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

4
 
把mov r0,pc张成mov r0,lr
此帖出自ARM技术论坛

点评

恩,应该是这样  详情 回复 发表于 2014-10-25 21:13
 
 
 

回复

222

帖子

2

TA的资源

一粒金砂(高级)

5
 
JasonWangSE 发表于 2014-10-21 15:07
把mov r0,pc张成mov r0,lr

恩,应该是这样
此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表