1ARMC/C++编译器7
2在C/C++程序中内嵌汇编指令7
3从汇编程序中访问C程序变量7
4汇编程序、C程序及C++程序相互调用7
5嵌入式C编程第七讲第七讲C/C++C/C++及汇编语言及汇编语言的混合编程的混合编程27
1ARMC/C++7
1ARMC/C++编译器编译器ARM集成开发环境中包含的C/C++编译器:编译器名称编译器种类源文件类型源文件后缀输出目标文件类型armccCC*
C32位ARM代码tccCC*
C16位Thumb代码armcppC++C/C++*
C++32位ARM代码tcppC++C/C++*
C++16位Thumb代码37
2在在C/C++C/C++程序中内嵌汇编指程序中内嵌汇编指令令在C\C++程序中使用内嵌的汇编指令的语法格式:在ARMC语言程序中,使用关键字__asm来标识一段汇编指令程序
__asm{汇编语言程序~~~~~~~~汇编语言程序}其中:如果一行中有多个汇编指令,指令之间使用分号(;)分开
在一条指令占多行,要使用续行符号(\)
2在在C/C++C/C++程序中内嵌汇编指程序中内嵌汇编指令令在C/C++程序中内嵌汇编指令注意事项:必须小心使用物理寄存器,如R0~R3,SP,LR和CPSR中的N,Z,C,V标志位
因为计算汇编代码中的C表达式时,可能会使用这些物理寄存器,并会修改N,Z,C,V标志位
__asm{MOVR0,xADDy,R0,x/y//计算x/y时R0会被修改}在计算x/y时R0会被修改,从而影响R0+x/y的结果
2在在C/C++C/C++程序中内嵌汇编指程序中内嵌汇编指令令在C/C++程序中内嵌汇编指令注意事项:用一个C程序的变量代替R0就可以解决这个问题:__asm{MOVvar,xADDy,var,x/y}注意:内嵌汇编器探测到隐含的寄存器冲