arm -汇编基本知识

  • cortex - A 刚上电,SP、DDR都没有初始化,无法跑C,
    所以要用汇编来初始化,配置C语言的运行环境
  • 配置C语言环境要初始化的主要内容
    1、SP指针初始化:C语言中的函数调用需要出栈入栈,堆栈其实就是一段内存,SP指向栈顶,通过SP来操作,利用这段内存
    2、有些芯片本身没有RAM,或者内部RAM不开放给用户使用。用户代码只能在DDR中跑,需要用汇编来初始化、配置DDR寄存器。
  • arm汇编使用的是gcc编译器,要符合gnu汇编语法
  • 每行一条语句,每条语句三个可选部分

十大
label:标号,表示地址位置,任何以冒号“:”结尾的标志都会被识别为一个标号,可有可无。标号表示指令的地址或者数据的地址
instruction:指令,汇编指令或者伪指令。指令可以全部大写,也可以全部小写,不能大小混写
@:接注释

  • 使用伪操作 . section 来定义一个段
    . text 表示代码段
    . data 表示初始化的数据段
    . bss 表示未初始化的数据段
    . rodata 表示只读数据段
    可以自定义一个段,以段名开始,以下一段名或者文件结尾表示结束
  • arm汇编开头 与 常见伪操作
    阿松大
  • arm-汇编 之函数

撒旦
bx 跳转到寄存器r0存放的地址

– 常用汇编指令

数据转移类指令
mov 用于内部寄存器间传数 或者 将立即数传递给内部寄存器
mov 目的 源
同一类的还有mrs ,msr
大

立即数到内部寄存器
mov r0 , =立即数
别忘了逗号
的撒
操作外部寄存器也要由内部寄存器中转

访存类指令
ARM不能直接访存,也不能直接访问外部寄存器,二者必须经过内部寄存器中转
常用的访 存/外部R 指令有两个 STR 和 LDR
的撒旦
的撒
str 和 ldr 都是按字写入的,也就是32位
strb 和 ldrb 是按字节写入的
strh 和 ldrh 是按半字写入的


入栈、出栈操作
十大
的撒
十大

跳转指令
大
阿松大
上述代码初始化了sp指针,然后跳转到main函数,跳转到c文件就回不了汇编了
2、BL跳转指令
BL跳转指令会返回,在跳转之前会把当前pc值放到 LR寄存器 (R14),可以通过将 LR 里面的值加载到PC来返回,并继续执行

大神
跳转到中断

算术运算指令
的撒

逻辑运算指令
的撒

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值