欢迎来到天天文库
浏览记录
ID:48784340
大小:13.09 MB
页数:51页
时间:2020-01-24
《C语言第7讲嵌入式C与汇编语言混合编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Page18/31/2021单击添加您的公司信息(联系方式及落款)谢谢观赏谢谢观赏第七章嵌入式C与汇编语言混合编程目录7.1内嵌汇编器的使用7.2从汇编中访问C程序变量7.3C语言与汇编语言的相互调用7.1内嵌汇编器的使用内嵌的汇编指令用法——操作数内嵌的汇编指令中作为操作数的寄存器和常量可以是C/C++表达式。表达式都是作为无符号数进行操作,可以是char、short或int类型。若需要带符号数,用户需要自己处理与符号有关的操作。编译器会计算这些表达式的值并为其分配寄存器当汇编指令中同时用到了物
2、理寄存器和C/C++表达式时,表达式不要太复杂。因为有可能产生寄存器分配冲突7.1内嵌汇编器的使用内嵌的汇编指令用法——物理寄存器在内嵌的汇编指令中使用物理寄存器的限制不能直接向PC寄存器中赋值程序跳转只能通过B/BL指令实现在使用物理寄存器的内嵌汇编指令中不要使用过于复杂的C/C++表达式。表达式过于复杂会需要较多的物理寄存器,可能与指令中的物理寄存器的使用冲突编译器可能会使用R12/R13寄存器存放编译的中间结果。在计算表达式值时可能会将寄存器R0到R3、R12以及R14用于子程序调用。因此不要
3、将这些寄存器同时指定为指令中的物理寄存器7.1内嵌汇编器的使用内嵌的汇编指令用法——物理寄存器在内嵌的汇编指令中使用物理寄存器时若C/C++变量使用了该物理寄存器,编译器将在合适的时候保存恢复该变量的值。当SP、SL、FP、SB做特定用途时编译器不能恢复寄存器值通常推荐在内嵌的汇编指令中不要制定物理寄存器,因为这可能会影响编译器分配寄存器,进而影响代码的效率7.1内嵌汇编器的使用内嵌的汇编指令用法——常量在内嵌的汇编指令中常量前的符号#可以省略ldrr1,=0xfff在一个表达式前使用符号#表达式必
4、须是一个常量movr1,r0,lsl#37.1内嵌汇编器的使用内嵌的汇编指令用法——指令展开内嵌的汇编指令中如果包含常数操作数,该指令可能会被汇编器展开成几条指令:ADDR0,R0,#1023展开成:ADDR0,R0,#1024SUBR0,R0,#01各展开的指令对于CPSR寄存器中的各条件标志位的影响如下:算术指令可以正确的设置CPSR中的NZCV条件标志位逻辑指令可以正确的设置CPSR寄存器中的NZ条件标志位,不映像V条件标志位,破坏C条件标志位注:乘法指令MUL可能会被展开成一系列的加法和移位
5、操作7.1内嵌汇编器的使用内嵌的汇编指令用法——标号C/C++程序中的标号可以被内嵌的汇编指令使用。但是只有指令B可以使用C/C++程序中的标号,指令BL不能使用C/C++程序中的标号。指令B使用C/C++程序中的标号时,语法格式如下所示:B{cond}label7.1内嵌汇编器的使用内嵌的汇编指令用法——内存单元的分配所用的内存单元的分配都是通过C/C++程序完成的,分配的内存单元通过变量供内嵌的汇编器使用。内嵌汇编器不支持汇编语言中用于内存分配的伪操作7.1内嵌汇编器的使用内嵌的汇编指令用法——
6、SWI和BL指令的使用第1个寄存器列表中的寄存器用于存放输入的参数第3个寄存器列表中的寄存器的内容可能被被调用的子程序破坏,即这些寄存器是供被调用的子程序作为工作寄存器第2个寄存器列表中的寄存器用于存放返回的结果7.1内嵌汇编器的使用使用内嵌的汇编器不能通过寄存器PC返回当前指令的地址内嵌的汇编器不支持伪指令LDRRn,=expression可以使用mov来代替不支持标号表达式不支持ADR、ADRL伪指令内嵌的汇编器和armasm的区别7.1内嵌汇编器的使用十六进制数前要使用前缀0x,不能使用&编译
7、器可能使用寄存器r0到r3、ip、lr存放中间结果。使用时要小心CPSR寄存器中的NZCV条件标志位可能会被编译器破坏使用要小心指令中使用的C变量不要与任何物理寄存器同名,否则会造成混乱内嵌的汇编器和armasm的区别7.1内嵌汇编器的使用LDM/STM指令的寄存器列表中只能使用物理寄存器不能使用C表达式指令不能写寄存器PC不支持指令BX/BLX用户不要维护数据栈。通常编译器根据需要自动保存和恢复工作寄存器的值,而无需用户参与内嵌的汇编器和armasm的区别7.1内嵌汇编器的使用在C/C++程序中使
8、用内嵌的汇编指令在ARMC语言程序中使用关键词__asm来标识一段汇编指令程序__asm{instruction[;instruction]……[instruction]}1)若一行中有多个汇编指令,指令间使用分号隔开2)若一条指令占多行,要使用续行符号()3)在汇编指令段中可以使用C语言的注释语句7.1内嵌汇编器的使用在C/C++程序中使用内嵌的汇编指令在ARMC++程序中使用关键词__asm来标识一段汇编指令程序外,还可以使用关键词asm来标识一段汇编指令程序a
此文档下载收益归作者所有