ARM混合编程笔记
来源:互联网 发布:淘宝查看新品标签 编辑:程序博客网 时间:2024/04/30 23:45
C语言嵌入汇编
__asm [volatile] {
instruction
Instruction
}
ADS上实践的注意事项:
混合编程最主要的是入口问题,从汇编文件的ENTRY进入,还是从C的Main进入。但ADS工具破解版的bug比较多,如下代码如果在仿真时候发现入口和预想的不对,可能是之前的修改还没被系统更新过来,这时候可以重新建立一个项目,不必再调试了,文件越改,AXD会越乱。
内联汇编实例
void my_strcpy(char *src,char* des){
char ch;
__asm{
loop:
LDRB ch,[src],#1
STRB ch,[des]#1
CMP ch,#0
BNE loop ; B{NE}如果不等于,则跳到loop。NE:Negative Equal
}
}
int Main(){
char * a = “Hello world”;
char b[64];
my_strcpy(a,b);
}
//注意:Main要大小开头,我用的AXD1.2版本不识别main,会报错
Warning : L6301W: Could not find file C:\Program Files .
Project: ARMC.mcp, Target: DebugRel
Warning : L6301W: Could not find file C:\Program Files .
Project: ARMC.mcp, Target: DebugRel
Warning : L6301W: Could not find file C:\Program Files .
Project: ARMC.mcp, Target: DebugRel
Error : L6218E: Undefined symbol __main (referred from hello.o).
Project: ARMC.mcp, Target: DebugRel
Error : L6218E: Undefined symbol _main (referred from hello.o).
Project: ARMC.mcp, Target: DebugRel
Finished: 0 information, 3 warning and 2 error messages.
C语言调用汇编
步骤如下:
1.汇编中的label用EXPORT声明
2.C语言中用EXTERN Function调用
3.C语言使用
参数怎么调用?
ARM官网文档提到ATPCS(ARM Thumb Procedure Call Standard)规范。通过R0-R3传递,R0传递第一个参数,R1传第二个,多于4个时用堆栈完成,函数返回值用R0传递。
myCopy.s
AREA myCopy,CODE,READONLY
EXPORT my_strcpy
;因为不是入口,所以不用加ENTRY
my_strcpy
LOOP
LDRB R4,[R0],#1
CMP R4,#0
BEQ OVER
STRB R4,[R1],#1
B LOOP
OVER
END
Main.c
extern void my_strcpy(char *src,char*des);
int Main(){
char *a = “hello norton”;
Char b[64];
my_strcpy(a,b);
}
汇编调用C语言
同样,R0-R4对应参数,跳转前,先给寄存器赋值。返回值是R0.
ARMCallC.s
AREA myCopy,CODE,READONLY
IMPORT cFun
ENTRY
START
MOV R0,#0x01
MOV R1,#0x02
MOV R2,#0x03
BL cFun ;长跳转
MOV R4,R0 ;保存结果到R4
END
func.c
int cFun(int a,int b,int c){
return a+b+c;
}
也可以直接BL Main,前提是IMPORT Main
- ARM混合编程笔记
- ARM汇编和C混合编程-笔记
- ARM混合编程
- arm C、汇编混合编程
- ARM与C混合编程
- ARM C、汇编混合编程
- arm学习笔记五(c/c++与arm汇编混合编程)
- ARM中C和汇编混合编程
- ARM指令集及混合编程
- C和ARM汇编混合编程
- arm汇编和c混合编程
- ARM汇编与C混合编程
- ARM汇编程序中学ARM程序的结构和混合编程
- matlab c# 混合编程笔记
- ARM中C和汇编混合编程及示例
- ARM中C和汇编混合编程及示例(转)
- ARM中C和汇编混合编程及示例
- 基于ARM的C语言与汇编语言混合编程
- 不断减少时间复杂度的一个例子
- 详细解析Java中抽象类和接口的区别
- Qt 事件和信号
- Android:LayoutInflater的使用
- [C++ Primer] 面向对象编程
- ARM混合编程笔记
- 不能豁出命去追求,只能永尝生活苦酒
- 扩张方法 this关键字
- Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
- 客户要求都能总结为一幅对联
- Stein算法——求最大公约数
- 恢复消失的Win7任务管理器
- 准备下班-蓝屏-工程文件、历史文件全部破坏-草-重做
- 外行 从小米的销售策略看 诺基亚的销售 MAYBE可以借鉴一些