打印

初学2407汇编想做个和C混合编程,就是传递个参数,请高手帮

[复制链接]
1800|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
iwillbe001|  楼主 | 2007-4-28 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c代码如下:
extern int read_flash(int); /* declare external asm function */
main()
{
    int i=0,temp=0;


    temp=read_flash(0); /* call function normally */
    temp=read_flash(1);
    temp=read_flash(2);

}

汇编代码如下:
        .global _read_flash
Rg_CAL_TEMP:    .bss CAL_TEMP,1
_read_flash:
        ;保护现场的语句
        POPD *+
        SAR AR0,*+
        SAR AR1,*
        LAR AR0,#1
        LAR AR0,*0+,AR2
        ;读取一个字节
        LDP #Rg_CAL_TEMP
        SACL CAL_TEMP
        ;LACL *
        AND #0FFFFh
        LDP #TABLE;取得刚写入的数表的首地址
        
        ;LAR AR3,#TABLE
        ;MAR *,AR3
        ;ADD *,AR3
        LACC #TABLE;取得表中第一个数的地址放到ACC的低16位
        ADD CAL_TEMP
        AND #0FFFFh
        LDP #Rg_CAL_TEMP
        TBLR CAL_TEMP    ;CAL_TEMP取得表头第一个值80h
        LACL CAL_TEMP        
        ;与C语言兼容的程序代码部分
        MAR *,AR1
        SBRK #2
        LAR AR0,*-
        PSHD *
        RET
TABLE:    .word 128,131,138,145,152,159,167,176,185,194,204,214,224,236,247,260
我就是想做个由C传递给汇编要在数表TABLE中查询的数值的位置,再由汇编把这个数值反送回来,我知道是ACC中实现的参数传输,可是一执行到ADD CAL_TEMP这句,ACC中的数值就乱变,有时是AR0中的数值,有时是IMR中的数值,这是为什么啊?高手救我,我都搞了两天了,因为以前一直用C,现在发现C不能直接访问2407的FLASH单元才这么混合编程的,我汇编实在是菜鸟一个,请各位大侠帮忙。

相关帖子

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

本版积分规则

6

主题

6

帖子

0

粉丝