设为首页收藏本站

数字电视开发论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

快捷登录

胜天工科技销售各种数字电视信号调制卡胜天工科技销售各种数字电视信号码流卡

【游客、新手、注册会员的区别】 【积分策略和会员晋级说明】 【发帖和附件上传规则】 【如何下载感兴趣的资料】 【如何获取梦游币】 【侵权资料处理及免责说明】
查看: 902|回复: 0

Android NDK下嵌入ARM ASM实例

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 2059 天

    [LV.Master]伴坛终老

    新浪微博达人勋

    发表于 2014-5-24 13:49:12 | 显示全部楼层 |阅读模式
    分享到:
    消息来自- 北京海淀
    最近要在Android NDK程序中添加如ASM(汇编)代码,但对格式并不了解,在NDK官方Doc中也没找到对应信息,于是在网络上查找研究之。

    0. 背景介绍:
    NDK编译器支持C/C++ 嵌入汇编代码。但Sam感觉X86,ARM,MIPS等编译器对嵌入汇编代码的格式和具体指令格式并不相同,所以理论上各种指令集应该都有一套专有代码。Sam只关心ARM指令集,所以以下所有代码和方法均只对ARM平台有效。

    1. 内嵌式ARM代码:

    1.1:代码加入:
    __asm__ __volatile__ ("MRC p15,0,%0,c0,c0,0" : "=r" (id) );
    或者:
    asm(
        "MRC p15, 0, R1, c0, c0 ,0 \n\t"   
        "STR R1,[R0],#0 \n\t"
         );

    1.2:编译:
    ndk-build -B V=1
    正常编译。但运行时,指出 illegal instruction.

    2. 单独添加.S 文件的方式:

    2.1:文件生成:
    生成ARMCPUID.s 和 ARMCPUID.h文件,内容分别为:

    ARMCPUID.s
    .text
    .align 4
    .arm

    .globl ARMCPUID
    ARMCPUID:
              MRC p15, 0, R1, c0, c0 ,0
              STR R1,[R0],#0
              MOV pc,lr

    ARMCPUID.h:
    extern "C" void ARMCPUID(unsigned int *id);

    2.2: 加其入C/C++代码:
    unsigned int id;
    ARMCPUID(&id);

    2.3: 将.s文件加入编译编译列表:
    Android.mk中,
    LOCAL_SRC_FILES += ARMCPUID.s

    2.4: 编译:
    ndk-build -B V=1
    踩过的脚印
    您需要登录后才可以回帖 登录 | 注册 新浪微博登陆

    本版积分规则

    嗨!您好:
    欢迎来到数字电视开发论坛。
    我的名字叫梦梦
    很高兴能够为您服务!
    如果已经注册【立即登录】
    还没有账号请【注册】
    嗨!您好:
    欢迎来到数字电视开发论坛。
    我的名字叫梦梦
    很高兴能够为您服务!
    如果已经注册【立即登录】
    还没有账号请

    QQ|小黑屋|手机版|Archiver|数字电视开发网 ( 京ICP备16008897号-5   

    GMT+8, 2018-4-24 12:44 , Processed in 0.272704 second(s), 38 queries , Gzip On.

    Powered by Discuz! X3.1

    © 2001-2013 Comsenz Inc.

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