LINUX-I.MX6U从零开始之1.1-汇编入门知识

汇编基础,LINUX启动文件吧。。
【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0-尝鲜版第七章

一,伪操作(定义变量)

.byte 定义单字节数据
.short定义双字节数据
.long定义四字节数据
.equ赋值语句
如:.equ num,0x12 //num=0x12
.alingn数据字节对齐
.end表示源文件结束
.golbal定义一个全局符号(全局变量)

二,函数

/* 未定义中断 */
Undefined_Handler:
ldr r0, =Undefined_Handler
bx r0
“Undefined_Handler”就是函数名,
“ldr r0, =Undefined_Handler”是函数体,
“bx r0”是函数返回语句,函数返回语句不是必须的。

三,指令
3.1处理器内部数据传输指令(就是a=b;)
  1. MOV 指令(复制)
    MOV R0,R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1
    MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12
  2. MRS 指令(特殊寄存器复制)
    MRS R0, CPSR @将特殊寄存器 CPSR 里面的数据传递给 R0,即 R0=CPSR
  3. MSR 指令(特殊寄存器复制进)
    MSR CPSR, R0 @将 R0 中的数据复制到 CPSR 中,即 CPSR=R0
3.2存储器访问指令

(ARM 不能直接访问存储器,比如 RAM 中的数据,I.MX6UL 中的寄存器就是 RAM 类型的)

  1. LDR 指令(从存储器读数据)
    LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
    LDR R1, [R0] @读取地址 0X0209C004 中的数据到 R1 寄存器中
  2. STR 指令(存储器写数据)
    LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
    LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002
    STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中
3.3压栈和出栈指令

(A 函数中调用 B 函数,当 B 函数执行完以后再回到 A 函数继续执行,进入B时压栈A)

  1. 压栈
    PUSH {R0~R3, R12} @将 R0~R3 和 R12 压栈
  2. 出栈
    POP {R0~R3,R12} @在恢复 R0~R3,R12
3.4跳转指令(跳转函数)
  1. B 指令(要调用的函数不会再返回到原来的执行处,那就可以用 B 指令)
    b main @跳转到 main 函数
  2. BL 指令(调用子函数,跳了还回来)
    bl system_irqhandler @加载 C 语言中断处理函数到 。。 寄存器中
3.5算术运算指令(加减乘除)

在这里插入图片描述

3.6逻辑运算指令(与或非)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值