day10 伪操作与混合编程

伪操作

伪操作:不会生成代码,只是在编译之前告诉编译器怎么编译

.global symbol

@ 将symbol声明成全局符号

.local symbol

@ 将symbol声明成局部符号

.equ DATA, 0xFF

MOV R1, #DATA

.macro FUNC

    MOV R1, #1

    MOV R2, #2

.endm

FUNC

.if 0

    MOV R1, #1

    MOV R2, #2

.endif

.rept 3

    MOV R1, #1

    MOV R2, #2

.endr

.weak symbol

@ 弱化一个符号,即告诉编译器即便没有这个符号也不要报错

.weak func

B func

.word VALUE

@在当前地址申请一个字的空间并将其初始化为VALUE

MOV R1, #1

.word 0xFFFFFFFF

MOV R2, #2

.byte VALUE    

@ 在当前地址申请一个字节的空间并将其初始化为VALUE

MOV R1, #1

.byte 0xFF

.align N

@ 告诉编译器后续的代码2的N次方对其

.align 4

MOV R2, #2

.arm

@ 告诉编译器后续的代码是ARM指令

.thumb

@ 告诉编译器后续的代码是Thumb指令

.text                

@ 定义一个代码段

.data                

定义一个数据段

.space N, VALUE

@ 在当前地址申请N个字节的空间并将其初始化为VALUE

MOV R1, #1

.space 12, 0x12

MOV R2, #2

@ 不同的编译器伪操作的语法不同

C和汇编的混合编程

C语言和汇编语言混合编程的原则:在哪种语言环境下符合哪种语言的语法规则;

1、在汇编中将C语言中的函数当做标号来处理;

2、在C语言中将汇编语言的标号当做函数处理;

1. 方式一:汇编语言调用(跳转)C语言

    MOV R1, #1

    MOV R2, #2

    BL  func_c

    MOV R3, #3

2. 方式二:C语言调用(跳转)汇编语言

.global FUNC_ASM

FUNC_ASM:

    MOV R4, #4

    MOV R5, #5

C内联(内嵌)汇编

ATPCS协议(ARM-THUMB Procedure Call Standard)

ATPCS协议主要内容 

栈的种类

      使用满减栈

寄存器的使用

    2.1 R15用作程序计数器,不能作其他用途    

    2.2 R14用作链接寄存器,不能作其他用途

    2.3 R13用作栈指针,不能作其他用途

    2.4 当函数的参数不多于4个时使用R0-R3传递,当函数的参数多于4个时,多出的部分用栈传递

    2.5 函数的返回值使用R0传递

    2.6 其它寄存器主要用于存储局部变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值