IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> arm汇编基础(针对i.mx6ull) -> 正文阅读

[嵌入式]arm汇编基础(针对i.mx6ull)

汇编语法

1

arm中的指令、伪指令、伪操作、寄存器名,可以全大写(全小写)但是不能混写

2.

label:instruction@comment
标号:
指令@注释
add:
MOVS R0,#0X12@设置R0=0X12

3.伪操作段名

.txt 代码段
.data 数据段
.bss 未初始化的数据段
.rodata 只读数据段
例如:
.global _start

_start:
ldr r0,=0x12 @r0=0x12

4.位操作全局变量

.byte 定义单字节数据,比如byte 0x12
.short 定义双字节数据,比如.byte 0x1234。
.long 定义一个 4 字节数据,比如.long 0x12345678。
.equ 赋值语句,格式为:.equ 变量名,表达式,比如.equ num, 0x12,表示 num=0x12。
.align 数据字节对齐,比如:.align 4 表示 4 字节对齐。
.end 表示源文件结束。
.global 定义一个全局符号,格式为:.global symbol,比如:.global _start。

5.GNU汇编函数

函数名:
函数体
返回语句
例如:

/* 未定义中断 */
Undefined_Handler:
 ldr r0, =Undefined_Handler
 bx r0
 
/* SVC 中断 */
SVC_Handler:
 ldr r0, =SVC_Handler
 bx r0
 
/* 预取终止中断 */
PrefAbort_Handler:
 ldr r0, =PrefAbort_Handler 
bx r0

arm7常用汇编指令

1.数据传输

  • 寄存器到寄存器
    MOV R0,R1
  • 寄存器到特殊寄存器
    MRS R0,CPSR @特殊寄存器到寄存器
    MSR CPSR,R0
  • 立即数到寄存器
    MOV R0,#0X12

2.存储器访问

CPU不能直接访问存储器,需要通过寄存器做桥梁

  • LDR Rd, [Rn,#offset]
    从存储器Rn+offset的位置读取数据存放到Rd中
  • STR Rd,[Rn,#offset]
    将Rd中的数据写入到存储器中的Rn+offset位置
@LDR
LDR		R0,=0X0209C004
LDR		R1,[R0]

@STR
LDR		R0,=0X0209C004
LDR		R1,=0X20000002
STR		R1,[R0]

3.栈的出入

函数的调用和切换需要保存现场

  • 将寄存器列表存入栈中
    PUSH
    PUSH {R0~R3,R12}
  • 从栈中恢复寄存器列表
    POP
    POP{R0~R3,R12}
    替代以上的写法 STMFD LDMFD
STMFD	SP!,{R0~R3,R12}
STMFD	SP!,{LR}

LDMFD	SP!.{LR}
LDMFD	SP!,{R0~R3,R12}

4.跳转

  • B
_start:
	ldr	sp,=0x80200000
	b	main
  • BL指令
    BL指令相比B指令,在跳转之前会在寄存器LR中保存当前PC寄存器值
	push	{r0,r1}		@保存r0,r1
	cps		#0x13		@进入**SVC模式**,允许其他中断再次进去

	bl 	system_irqhandler	@加载c语言中断处理函数到r2寄存器中
	
	cps	#0x12	@进入**IRQ模式**
	pop	{r0,r1}	
	str	r0,[r1,#0X10]	@中断执行完成,写EOIR

5.算数运算

  • 加法运算,指令为ADD
    ADD Rd,Rn,Rm Rd=Rn+Rm
    ADD Rd,Rn,#immed Rd=Rn+#immed

  • 带进位的加法运算,指令ADC
    ADC Rd,Rn,Rm Rd=Rn+Rm+进位
    ADC Rd,Rn,#immed Rd=Rn+#immed+进位

  • 减法SUB
    SUB Rd, Rn, Rm Rd = Rn – Rm
    SUB Rd, #immed Rd = Rd - #immed
    SUB Rd, Rn, #immed Rd = Rn - #immed

  • 带借位的减法SBC
    SBC Rd, Rn, #immed Rd = Rn - #immed – 借位
    SBC Rd, Rn ,Rm Rd = Rn – Rm – 借位

  • 乘法(32位)MUL
    MUL Rd, Rn, Rm Rd = Rn * Rm

  • 无符号除法UDIV
    UDIV Rd, Rn, Rm Rd = Rn / Rm

  • 有符号除法SDIV
    SDIV Rd, Rn, Rm Rd = Rn / Rm

6.逻辑运算

  • 按位与
    AND Rd, Rn Rd = Rd &Rn
    AND Rd, Rn, #immed Rd = Rn &#immed
    AND Rd, Rn, Rm Rd = Rn & Rm

  • 按位或
    ORR Rd, Rn Rd = Rd | Rn
    ORR Rd, Rn, #immed Rd = Rn | #immed
    ORR Rd, Rn, Rm Rd = Rn | Rm

  • 位清除
    BIC Rd, Rn Rd = Rd & (~Rn)
    BIC Rd, Rn, #immed Rd = Rn & (~#immed)
    BIC Rd, Rn , Rm Rd = Rn & (~Rm)

  • 按位或非
    ORN Rd, Rn, #immed Rd = Rn | (w#immed)
    ORN Rd, Rn, Rm Rd = Rn | (wRm)

  • 按位异或
    EOR Rd, Rn Rd = Rd ^ Rn
    EOR Rd, Rn, #immed Rd = Rn ^ #immed
    EOR Rd, Rn, Rm Rd = Rn ^ Rm

本人也是初学者,有一起学习的伙伴可以一起交流啊 !一下是我的联系方式:
QQ
微信

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:11:07  更:2021-09-05 11:11:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:37:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码