找回密码
 注册
搜索
查看: 545|回复: 2

ads1.2下请教C代码内嵌汇编地址装载问题

[复制链接]
发表于 2009-4-9 18:21:20 | 显示全部楼层 |阅读模式
在我写的C程序中有一小段代码为了获得较高的执行效率,需要内嵌汇编,但不知道怎样才能正确加载C代码定义的变量地址.
比如:
在C代码中有如下定义:
      uint8 ADData[32] = {0};
那在汇编代码中如何将数组ADData的首地址装载入寄存器R1呢?我试过  LDR   R1,[ADData],但汇编出来的代码却是空语句nop
而用 LDR   R1,=ADData,则会报语法错误,用mov r1, ADData也不行.
发表于 2009-4-11 02:14:11 | 显示全部楼层
mov 当然是不行了,只有访问寄存器用mov,其余都是用load/store指令,感觉你没什么arm汇编的基础啊! 你是arm汇编吗?
点评回复

使用道具 举报

发表于 2009-5-25 10:31:24 | 显示全部楼层
兄弟你需要参考一下arm安装目录下的pdf文档ADS_DeveloperGuide_D.pdf,
内联汇编中,一般不建议使用物理寄存器,即r1,r2,r3,lr,pc,sp等。一般做法是在汇编块__asm{},外面定义一个变量,然后汇编块内部像普通寄存器一样使用它即可。 LDR   R1,[ADData]中把R1改成一个变量名即可。
另外普通汇编(即单独asm文件中)中用LDR   R1,=ADData 是可以的。
附一个简单例子
#include <stdio.h>
char data[0x20] = {23};
int main(void) {
        int x;
        __asm
        {
                ldrb x, [data]
        }
        printf("x: %d\n", x);
        return 0;
}
输出为23
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-7 01:32 , Processed in 0.055780 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表