TI中文支持网
TI专业的中文技术问题搜集分享网站

【求助】哪位懂2407汇编的帮我看看这个函数吧

我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下

void get_program(unsigned short *src)
{
    asm("    LACC #28672 ");
    asm("    TBLR *,AR4 ");
}

数据是读出来了但函数返回的时跳到其它地方了

yanzhen fu:

在这里,你要用堆栈来处理程序指针,如下所示:

MAR *,AR1

POPD *+               

你的程序

MAR *,AR1

SBRK 1

PSHD *

 

也可以在C中用指针的形式读区一个地址的数据是很方便的。

我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下

void get_program(unsigned short *src)
{
    asm("    LACC #28672 ");
    asm("    TBLR *,AR4 ");
}

数据是读出来了但函数返回的时跳到其它地方了

he yuanjie:

回复 yanzhen fu:

貌似在2407里数据区和程序区不是统一编址的,用指针读的是ram的数据,不知道是不是要加什么修饰符号。

不过我仔细看了一下汇编搞定了:

void get_program(unsigned short *dst){    asm("    LACK 28672");    asm("    MAR *,AR4");    asm("    TBLR *,AR1");}

我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下

void get_program(unsigned short *src)
{
    asm("    LACC #28672 ");
    asm("    TBLR *,AR4 ");
}

数据是读出来了但函数返回的时跳到其它地方了

yanzhen fu:

回复 he yuanjie:

请问:你的AR4中的数值是如何返回到c中的?

我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下

void get_program(unsigned short *src)
{
    asm("    LACC #28672 ");
    asm("    TBLR *,AR4 ");
}

数据是读出来了但函数返回的时跳到其它地方了

he yuanjie:

回复 yanzhen fu:

dst是局部变量的指针,会通过AR4传递。

LACK #28672是设置要访问的程序区地址,

MAR *,AR4是设置AR4为当前AR

TBLR *,AR1的作用是以ACC的低16位作为程序区地址 读取程序区数据到当前AR所指的数据区中 然后设置AR1为当前AR。

看C汇编后的代码在执行我的内嵌汇编前AR1是当前AR,因此我更改当前AR后再还原回去。

我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下

void get_program(unsigned short *src)
{
    asm("    LACC #28672 ");
    asm("    TBLR *,AR4 ");
}

数据是读出来了但函数返回的时跳到其它地方了

he yuanjie:

用下面这个函数彻底解决了这个问题

void get_program(unsigned long src, unsigned short *dst){ asm(" SBRK #6"); asm(" LAR AR4,*,AR4"); asm(" TBLR *,AR1"); asm(" ADRK #6");}

赞(0)
未经允许不得转载:TI中文支持网 » 【求助】哪位懂2407汇编的帮我看看这个函数吧
分享到: 更多 (0)