ARM微架构与程序编写
目录
1.流水线
2.指令流水线
3. 多核处理器编辑
4. 工程搭建
4.1为Keil软件配置编译工具链
5.程序编写
5.1 数据处理指令
5.2 带标志位的加法ADC ADDS
5.3 跳转指令B\BL
5.4 单寄存器内存访问
5.5 批量寄存器内存访问
5.6 栈的应用->叶子函数的调用过程
5.6 栈的应用->非叶子函数的调用过程
1.流水线
2.指令流水线
3. 多核处理器
4. 工程搭建
4.1为Keil软件配置编译工具链
4.1.1创建新工程
4.1.2设置工程保存的路径和工程的文件名字,在这里我将工程保存到 ARM-ASM 文件夹下,将工程命名为 arm-asm。
4.1.3 设置我们工程支持哪款 CPU,这里我们选择 Samsung 的 S3C2440A 芯片
4.1.4 单击“OK”之后,弹出提示框是否导入启动文件,选择“否”:
4.1.5建好工程后,软件界面如下图所示:
4.1.6 添加.s汇编文件到工程中
4.1.7 在.s汇编文件中写汇编代码
5.程序编写
1指令:编译完生成一条机器码存储在内存单元当中,CPU执行时能完成对应的操作
1) 数据处理指令: 对数据进行逻辑、算数运算
2) 跳转指令: 实现程序的跳转,实质是修改PC
3) Load/Store指令:对内存的读写操作
4)状态寄存器传送指令:对CPSR进行读写操作
5)异常中断产生指令:触发软中断,常用于内核的系统调用
6)协处理器指令;操作协处理器的指令
2.伪操作:不会生成机器码也不会占用内存,其作用是告诉编译器怎样编译(类似C中的宏定义)
3.伪指令:不是指令,编译器在编译时将其替换成等效的指令
5.1 数据处理指令
AREA RESET,CODE,READONLY;定义一个代码段RESET,属性为只读
ENTRY ;程序的入口
; 1)数据处理指令
; 搬移指令 MOV 作用:赋值=
MOV R0,#2
MOV R1,#3
MOV R2,#1
MOV R3,#3
MOV R4,#4
MOV PC,#0 ;PC取址0 循环;数据取反指令 MVN
MVN R4,#0X000000FF ;R4=~0X000000FF=0XFF000000
MOV R5,#255; 立即数:合法的数,包含在指令中的数
; 与普通变量的区别:立即数是存储在寄存器中,执行速度快
; 缺点:长度有限 这里规定最大为12bit,2^12=4096个数(连续数:0-255)其余为离散数
LDR R5,=0X12345678
; 加法指令 ADD
ADD R2,R0,R1 ;R2=R0+R1
; 减法指令 SUB
SUB R2,R1,R0 ;R2=R1-R0
; 乘法指令 MUL
MUL R2,R0,R1 ;R2=R0*R1
END
; nzcv验证
; SUBS R2,R0,R1 ;验证N 加S并使用减法指令产生负数,验证N位,发现被置位 n=1负数
; SUBS R1,R0,R2 ;验证Z 加S并使用减法指令产生0,验证z位,发现z和c都被置1,
;因为减法时产生借位c会被置0,没有借位被置1
; MOV R1,#0XFFFFFFFE
; MOV R2,#2
; ADDS R3,R1,R2 ;验证C,加法指令产生了进位(注意这里是32位),C位被置1
5.2 带标志位的加法ADC ADDS
; 第一个数;0X00000001 0XFFFFFFFF
; 第二个数;0X00000003 0X00000004
; 第一个数的低32位放到R1,高32bit放R2
; 第二个数的低32位放R3,高32bit放R4
; 低加低 高加高 运算结构的低32bit放R5,高32bit放R6
MOV R1,#0XFFFFFFFF
MOV R2,#0x00000001
MOV R3,#0X00000004
MOV R4,#0X00000003
ADDS R5,R1,R3 ;ADDS进位 C标志位置1
ADC R6,R4,R2 ;本质R6=R4+R2+‘c’ ADC带进位的加法
5.3 跳转指令B\BL
MOV R0,#2
CMP R0,#1
;B JUMP ;B 只是跳转
;BL JUMP ;BL 跳转后PC=LR 可跳转回去
;BEQ JUMP ;CMP相等时跳转==if((EQ)(B JUMP)) 本质:if(R0-#1==0){B JUMP}
;BNE JUMP ;CMP不相等时跳转
MOV R0,#2
MOV R0,#3
JUMP
MOV R0,#4
MOV R1,#5
MOV PC,LR
5.4 单寄存器内存访问
单寄存器内存访问的索引方式(寻址方式)
MOV R0,#0XFFFFFFFF
MOV R1,#0X40000000
STR R0,[R1] ;将R0的数据写到R1地址内
LDR R2,[R1] ;读取R1地址里的内容到R2中
前索引 先偏移8位后存储数据
STR R0,[R1,#8]
后索引 先存储数据后偏移地址
STR R0,[R1],#4
自动索引 (前后索引)偏移地址并存储数据
STR R0,[R1,#4]!
5.5 批量寄存器内存访问
MOV R0,#1
MOV R1,#2
MOV R2,#3
MOV R3,#4
MOV R4,#5
MOV R5,#0X40000020
STM R5,{R0-R4}
STM R5,{R4,R2,R3,R1,R0}STMIA R5!,{R0-R4} ; 空增
STMIB R5!,{R0-R4} ; 满赠
STMDA R5!,{R0-R4} ; 空减
STMDB R5!,{R0-R4} ; 满减
5.6 栈的应用->叶子函数的调用过程
MOV SP,#0X40000020 ;初始化栈地址
MAIN
MOV R1,#1
MOV R2,#2
BL FUNC
ADD R3,R1,R2
TOP
B TOP
FUNC
STMFD SP!,{R1,R2}
MOV R1,#10
MOV R2,#5
SUB R3,R1,R2
LDMFD SP!,{R1,R2}
MOV PC,LR
5.6 栈的应用->非叶子函数的调用过程
MOV SP,#0X40000020 ;初始化栈地址
MAIN
MOV R1,#1
MOV R2,#2
BL FUNC
ADD R3,R1,R2
TOP
B TOP
FUNC
STMFD SP!,{R1,R2,LR}
MOV R1,#10
MOV R2,#5
BL FUNC1
SUB R3,R1,R2
LDMFD SP!,{R1,R2,LR}
MOV PC,LR
FUNC1
STMFD SP!,{R1,R2}
MOV R1,#20
MOV R2,#10
SUB R3,R1,R2
LDMFD SP!,{R1,R2}
MOV PC,LR
END
ARM微架构与程序编写相关推荐
- 一文搞懂 | ARM微架构的变化
一.引言 伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构.从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A7 ...
- 从A76到A78——在变化中学习ARM微架构
一.引言 伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构.从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A7 ...
- 【直播预告】从A76到 A78——在变化中学习ARM微架构
伴随智能手机高速发展,处理器架构设计开发ARM公司几乎每年都更新CPU的核心架构.从2018年至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A77.Corte ...
- 第六章 Arm 微架构「System」
全文3000字,预计阅读时长:8分钟 适用于从事ARM软硬件设计.开发.调试的工程师.教师以及学生 对于大部分开发者来讲,ARM架构知识一直存放于盲盒之中,知之甚少:而ARM架构知识是ARM结构化知识 ...
- 一起学点ARM的微架构?
最近在看内核工匠的一篇文章,写的很赞,一起来学一下. 原文链接:https://mp.weixin.qq.com/s/aELd2q_eP5RthpwWI1Huvw 大家可以关注一下这两个: ARM精选 ...
- 科普:什么是处理器微架构?
本次来分享一些芯片相关的小科普文.作为嵌入式开发工程师,我们对芯片都需要有一定的了解. 指令集 1.指令集的体现 指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合.而指令集的先进与否,也关 ...
- 7nmarm微架构鲲鹏服务器芯片,中国电信服务器集采:同方鲲鹏服务器拿下6000万元份额...
原标题:中国电信服务器集采:同方鲲鹏服务器拿下6000万元份额 (全球TMT2021年4月9日讯)日前,中国电信(2021年)服务器集采项目招标的GPU型服务器中标候选人公示发布.其中,鲲鹏.海光等国 ...
- 向7nm时代的性能巅峰出击!ARM Cortex-A76架构解析
ARM的处理器架构基本上维持着一年一变.从早期的Cortex-A15到Cortex-A57,再到Cortex-A72.Cortex-A73以及Cortex-A75,ARM最近数年内不断通过发布全新架构 ...
- ARM Mali GPU 四大微架构概述
Background 对于手机终端来说,GPU图像处理能力是衡量一台手机的性能标杆.首先,是UI流畅性,大家拿到手机都得先划来划去看下UI是否流畅,而UI其实主要还是用GPU渲染的:其次是游戏的流畅性 ...
最新文章
- 数组去重,ES6数组去重 new Set()
- 5.3.6 虚拟地址、线性地址和物理地址之间的关系
- 快速排序 递归版本和非递归方法 c代码
- AOS编排语言系列教程(三):创建子网Subnet
- 在Mac下安装nvm管理node
- git删除远程仓库的文件或目录
- matlab拟合函数导出,excel里曲线拟合的公式怎么导出?()
- 开启win10电池方案卓越性能
- java中j是什么意思_i 1 j 是什么意思 i.j.k是什么意思
- 简单提取iOS13的ipsw固件的内置壁纸(或文件)
- CRM高端制造业应用案例分析
- Android系统应用开发
- leetcode-954. 二倍数对数组
- Centos 7 开机一直转圈 提示failed to load SELinux policy freezing的解决方法
- 什么是lora无线通讯
- 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G- 排解忧伤
- html调用wrl,如何实现在网页里嵌入wrl文件
- 单片机驱动DM542步进电机(使丝杠做往返运动--速度可调)
- 情感驿站 | 什么叫跟对人,才能做对事?
- 动环监控常用相关标准集合