您的位置:首页 > 其它

ndk内联汇编的使用之arm指令学习和调试

2016-06-06 19:36 274 查看
#include <stdio.h>

int my_thumb_wjh(int dummy)
{
__asm__(
"mov r0,#1 \t\n"
"mov r1,#2 \t\n"
"add r0,r0,r1 \t\n"
"bx lr"

);
return dummy;

}
int my_thumb(int dummy)
{

__asm__(

"mov r0,#13 \t\n"

"mov r1,#2 \t\n"

"add r0,r0,r1 \t\n"

"bx lr"

);
return dummy;

}
int my_thumb2(int dummy)
{
__asm(
"mov r0,#0x1\t\n"
"ldr r0,__start\t\n"
"adr r0,__start\t\n"
"ldr r0,__start\t\n"
"__start:\t\n"
"nop\t\n"
);
return dummy;
}
int data_function()
{
printf("data_function run\n");
return 1024;
}

static int my_arm(int dummy)
{
__asm__(

"mov r0,#13 \t\n"

"mov r1,#2 \t\n"

"add r0,r0,r1 \t\n"
"mov r3,#5 \t\n"
"sub r0,r0,r3 \t\n"
"mov r3,#9 \t\n"
"mul r0,r0,r3 \t\n"
"bx lr"
);
return dummy;
}
void test()
{
__asm__(
"bl data_function \t\n"
);

printf("test run\n");

}

//http://blog.csdn.net/zhangmiaoping23/article/details/44782843
//ndk内联汇编的使用之arm指令学习和调试
int main(int argc, char **argv)
{

int n = my_thumb(12);
printf("result=%d\n", n);

int result = my_thumb2(12);
printf("result=%d\n", result);

int result_my_arm = my_arm(12);
printf("result_my_arm=%d\n", result_my_arm);

test();

printf("Hello, World!\n");	//Set a breakpoint here or press F10 to step into.
return 0;
}

# Generated by VisualGDB

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := arm_demo
#VisualGDBAndroid: AutoUpdateSourcesInNextLine
LOCAL_SRC_FILES := arm_demo.c
LOCAL_C_INCLUDES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS :=
LOCAL_CFLAGS :=
LOCAL_CPPFLAGS :=
LOCAL_LDFLAGS :=
COMMON_SRC_FILES := $(LOCAL_SRC_FILES)
include $(BUILD_EXECUTABLE)
http://www.cnblogs.com/zenny-chen/archive/2011/11/01/2232305.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: