keil下如何在C语言代码中改变程序指针PC的内容?

[复制链接]
7791|11
 楼主| tubie 发表于 2009-1-2 20:34 | 显示全部楼层 |阅读模式
computer00 发表于 2009-1-2 20:44 | 显示全部楼层

执行下一条命令,PC内容自然就改变了...

  
db10 发表于 2009-1-2 20:48 | 显示全部楼层

00 说的很对 呵呵

C里引用下汇编。
 楼主| tubie 发表于 2009-1-2 21:30 | 显示全部楼层

用在线汇编不行啊

比如<br /><br />__asm<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LD&nbsp;PC,&nbsp;=&nbsp;XXXXX<br />}<br /><br />编译都无法通过,说PC未定义。
山寨MDK 发表于 2009-1-3 11:38 | 显示全部楼层

有三种方法你可以尝试一下

第一种,使用R15&nbsp;eg:&nbsp;<br />&ltpre&gt<br />&nbsp;__asm&nbsp;void&nbsp;jing()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;R15,&nbsp;=&nbsp;0x2000;<br />}<br />&lt/pre&gt<br />第二种方法,把PC的指针改变定义到汇编文件中,通过C去调用改汇编文件<br />第三种,编写调试*.ini文件,将要改变PC的值写一个调试函数Func然后在需要的地方调用这个Func函数。
decoder8 发表于 2009-1-3 12:25 | 显示全部楼层

楼主是指程序的绝对定位?

  
AV693 发表于 2009-1-3 14:08 | 显示全部楼层

汇编下,先把地址压到栈中,然后执行RET指令

  
computer00 发表于 2009-1-3 14:36 | 显示全部楼层

楼主你到底想干啥?直接强制转化为函数调用

((void(*)(void))地址)();
db10 发表于 2009-1-4 23:47 | 显示全部楼层

LZ不出来逗了。。。

  
high 发表于 2009-1-5 03:24 | 显示全部楼层

r15不行。ADS也不支持。

改变pc是为了跳转。估计主要是用在mmu开启关闭之际的跳转<br /><br />一般都在asm部分实现。非得在c调用的话,用asm做成一个函数给c调用。
 楼主| tubie 发表于 2009-1-22 22:04 | 显示全部楼层

我是楼主

不知道楼上几位什么意思?什么地方逗了?<br />
drzhu 发表于 2019-2-19 10:41 | 显示全部楼层
不知道实现了没有?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

428

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部