ARM体系结构与接口技术——ARM汇编伪操作与混合编程
作者:互联网
伪操作的概念
伪操作与伪指令不同。
伪指令虽然不能生成与机器码映射的机器码,但是能被编译成相应的汇编指令,再编译成机器码。
伪操作不会生成任何指令,只在编译期起作用,用来控制编译器,告诉编译器怎么编译指令。所以不同的编译器,它的伪操作是不一样的。
伪操作的作用类似于C语言的条件编译。
C语言和汇编混合编程
@ 混合编程 .text .global _start _start: MOV R1,#1 MOV R2,#2 BL func_c @ 汇编语言调用C语言 MOV R3,#3 BL STOP .global FUNC_ASM @ global声明让C调用 FUNC_ASM: MOV R4,#4 MOV R5,#5 .global STOP STOP: B STOP .end
void func_c() { int a = 0; a++; /*C语言内嵌汇编代码*/ asm ( "MOV R6, #6\n" "MOV R7, #7\n" ); /*C语言调用汇编*/ FUNC_ASM(); a--; }
ATPCS协议
ATPCS,ARM-THUMB procedure call standard,ARM-Thumb过程调用标准。
规定了所有编译器对C编译成汇编需遵循以下标准:
- 栈的种类
- 使用满减栈
- 寄存器的使用
- R15 只能用于程序计数器PC
- R14 只能用于链接寄存器LR
- R13 只能用于栈指针寄存器SP
- R0-R3 函数调用时,参数小于4个的时候,使用R0-R3传参,多于4个的部分用栈传递
- R0 函数返回时,返回值使用R0传递
- 其余寄存器主要用于存储局部变量
END
标签:汇编,R0,接口技术,global,MOV,C语言,编译器,ARM,体系结构 来源: https://www.cnblogs.com/zjccc/p/16168207.html