打印

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

[复制链接]
5893|11
手机看帖
扫描二维码
随时随地手机跟帖
沙发
computer00| | 2009-1-2 20:44 | 只看该作者

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

使用特权

评论回复
板凳
db10| | 2009-1-2 20:48 | 只看该作者

00 说的很对 呵呵

C里引用下汇编。

使用特权

评论回复
地板
tubie|  楼主 | 2009-1-2 21:30 | 只看该作者

用在线汇编不行啊

比如

__asm
{
    LD PC, = XXXXX
}

编译都无法通过,说PC未定义。

使用特权

评论回复
5
山寨MDK| | 2009-1-3 11:38 | 只看该作者

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

第一种,使用R15 eg: 
<pre>
 __asm void jing()
{
    LDR R15, = 0x2000;
}
</pre>
第二种方法,把PC的指针改变定义到汇编文件中,通过C去调用改汇编文件
第三种,编写调试*.ini文件,将要改变PC的值写一个调试函数Func然后在需要的地方调用这个Func函数。

使用特权

评论回复
6
decoder8| | 2009-1-3 12:25 | 只看该作者

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

使用特权

评论回复
7
AV693| | 2009-1-3 14:08 | 只看该作者

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

使用特权

评论回复
8
computer00| | 2009-1-3 14:36 | 只看该作者

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

((void(*)(void))地址)();

使用特权

评论回复
9
db10| | 2009-1-4 23:47 | 只看该作者

LZ不出来逗了。。。

使用特权

评论回复
10
high| | 2009-1-5 03:24 | 只看该作者

r15不行。ADS也不支持。

改变pc是为了跳转。估计主要是用在mmu开启关闭之际的跳转

一般都在asm部分实现。非得在c调用的话,用asm做成一个函数给c调用。

使用特权

评论回复
11
tubie|  楼主 | 2009-1-22 22:04 | 只看该作者

我是楼主

不知道楼上几位什么意思?什么地方逗了?

使用特权

评论回复
12
drzhu| | 2019-2-19 10:41 | 只看该作者
不知道实现了没有?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

428

帖子

0

粉丝