ARM内核、指令集等简介
文章目录
- 1.ARM架构学习
- 1.1.ARM相关背景介绍
- 2.ARM指令集
- 2.1 A32指令集
- 2.2 A64指令集
- 2.3 代码举例说明
- 3.ARM与RISC、CISC的关系
- 4.ARM与哈佛结构、冯诺依曼结构
1.ARM架构学习
ARM即是公司名,是一家英国的公司,也是芯片名,随便嵌入式设备的发展,ARM也随之急速发展;
如何去学习ARM,作为一名合格的嵌入式er,无论是从事:
内核工程师;驱动工程师;应用工程师,都很有必要了解ARM的架构原理,掌握了ARM相关的知识再去学习UBOOT、kernel、驱动以及分析应用层的调用栈等问题才会有所突破。
1.1.ARM相关背景介绍
经常听到某芯片基于ARM核开发出来的芯片,具备什么什么功能;
如:
华为的麒麟980基于ARM-A76内核,而A76内核基于ARMV8-A架构。
NXP的ls1043a芯片基于ARMA53内核,而A53内核基于ARMV8-A架构等等。
根据ARM指令集所开发出来的内核,供给其他第三方厂商授权使用,常见的有A53 、A76内核等等。
常见的指令集A32 T32 A64 thumb指令集,每一个架构架构的升级,往往伴随着指令集的升级,从ARMV1-ARMV9都是这样,最典型的就是ARMV8架构的出现,实现了指令集A64,从此ARM可以支持64为指令集。
2.ARM指令集
ARM指令集有以下几种:A32 T32 A64 Neon SVE DSP Helium,在此主要说明A32与A64指令集。两者主要的区别就是A64支持64为指令集。
2.1 A32指令集
在ARMV8结构中称为A32,其实就是之前的ARM指令集,其使用的寄存器为r0-r15。
2.2 A64指令集
此指令集为ARMV8中最新引入的,为ARM架构中升级较大的一代,其使用的寄存器为x0-x30。
2.3 代码举例说明
使用同一套简单源码,利用不同的编译链进行编译,再使用objdump工具进行反汇编,在此对比下两者的区别。
#include<stdio.h>int add(int a,int b)
{return a+b;
}int main()
{int sum = add(1,2);printf("sum = %d\n",sum);return 0;
}
A32指令集,使用ARM32进行编译,对应的汇编代码:
00010444 <add>:10444: e52db004 push {fp} ; (str fp, [sp, #-4]!)10448: e28db000 add fp, sp, #01044c: e24dd00c sub sp, sp, #1210450: e50b0008 str r0, [fp, #-8]10454: e50b100c str r1, [fp, #-12]10458: e51b2008 ldr r2, [fp, #-8]1045c: e51b300c ldr r3, [fp, #-12]10460: e0823003 add r3, r2, r310464: e1a00003 mov r0, r310468: e28bd000 add sp, fp, #01046c: e8bd0800 ldmfd sp!, {fp}10470: e12fff1e bx lr00010474 <main>:10474: e92d4800 push {fp, lr}10478: e28db004 add fp, sp, #41047c: e24dd008 sub sp, sp, #810480: e3a00001 mov r0, #110484: e3a01002 mov r1, #210488: ebffffed bl 10444 <add>1048c: e50b0008 str r0, [fp, #-8]10490: e59f0014 ldr r0, [pc, #20] ; 104ac <main+0x38>10494: e51b1008 ldr r1, [fp, #-8]10498: ebffff90 bl 102e0 <printf@plt>1049c: e3a03000 mov r3, #0104a0: e1a00003 mov r0, r3104a4: e24bd004 sub sp, fp, #4104a8: e8bd8800 pop {fp, pc}104ac: 00010520 .word 0x00010520
A64指令集,使用ARM64进行编译,对应的汇编代码:
00000000004005c4 <add>:4005c4: d10043ff sub sp, sp, #0x104005c8: b9000fe0 str w0, [sp, #12]4005cc: b9000be1 str w1, [sp, #8]4005d0: b9400fe1 ldr w1, [sp, #12]4005d4: b9400be0 ldr w0, [sp, #8]4005d8: 0b000020 add w0, w1, w04005dc: 910043ff add sp, sp, #0x104005e0: d65f03c0 ret00000000004005e4 <main>:4005e4: a9be7bfd stp x29, x30, [sp, #-32]!4005e8: 910003fd mov x29, sp4005ec: 52800041 mov w1, #0x2 // #24005f0: 52800020 mov w0, #0x1 // #14005f4: 97fffff4 bl 4005c4 <add>4005f8: b9001fe0 str w0, [sp, #28]4005fc: b9401fe1 ldr w1, [sp, #28]400600: 90000000 adrp x0, 400000 <__abi_tag-0x254>400604: 91192000 add x0, x0, #0x648400608: 97ffffaa bl 4004b0 <printf@plt>40060c: 52800000 mov w0, #0x0 // #0400610: a8c27bfd ldp x29, x30, [sp], #32400614: d65f03c0 ret
3.ARM与RISC、CISC的关系
ARM是典型的RISC(精简指令集)代表;相对应的X86是CISC(复杂指令集)代表;这两句话也是相对的,目前指令集的发展已经有相互学习,取长补短的趋势。
4.ARM与哈佛结构、冯诺依曼结构
CPU最核心的三部分由控制器、存储器、运算器组成;
冯诺依曼架构的特点:指令与数据采用同一条总线进行连接。
哈佛结构的特点:采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,
这就允许同时取指和取操作数,从而大大提高了运算能力
两者主要的区别就是哈佛架构认为指令与数据应该是分开的,而冯诺依曼提出,指令也是数据,这就诞生出了两大典型架构。
其实现在的CPU往往采用混合架构来进行设计,即结合了两种架构的各自的特点;
而目前大部分的ARM-A内核也是采用了混合架构。
ARM内核、指令集等简介相关推荐
- 什么是arm-arm体系架构版本(指令集版本)-arm内核版本
1.什么是arm? arm公司:是英国一家电子公司的名字,该公司成立于1990年11月,是苹果电脑,Acorn电脑集团和VLSI Technology的合资企业.Acorn曾在1985年推出世界上首个 ...
- ARM SIMD 指令集:NEON 简介
ARM SIMD 指令集:NEON 简介 一.NEON 简介 1.1.NEON 简介 1.2.NEON 使用方式 1.3.编译器自动向量化的编译选项 1.3.1 Arm Compiler 中使能自动向 ...
- 指令集架构、arm内核、SoC、处理器、CPU、GPU等的关系
指令集架构如:ARMv5.ARMv6.ARMv7-A/R.ARMv8-A [28] ARM内核如:ARM7.ARM9.ARM11(v6).到cortex-A7.A8.A9.A12.A15(v7-A/R ...
- [RISC-V] risk5 指令集架构简介——2021年初学习
前言 没钱没设备还是别学了,我还以为买了书会有用,看了作者的公众号才知道,买开发板送书,你可以去查查FPGA板子要多少钱. 这个专栏的内容来自硅亚历山大的书<教你设计CPU--RISC-V处理器 ...
- ARM NEON指令集优化理论与实践
ARM NEON指令集优化理论与实践 一.简介 NEON就是一种基于SIMD思想的ARM技术,相比于ARMv6或之前的架构,NEON结合了64-bit和128-bit的SIMD指令集,提供128-bi ...
- Cortex系列ARM内核介绍
众所周知,英国的ARM公司是 嵌入式微处理器世界当中的佼佼者.ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式 ...
- arm 架构_Arm架构之Arm内核解析
Arm架构已经主导了当今嵌入式处理和计算市场,但在过去的几十年里,Arm 架构却走过了漫长的道路.从20世纪80年代开始,它起初是作为家用电脑处理器,然后在20世纪90年代成为手机芯片的基础.如今,在 ...
- 详谈ARM架构与ARM内核发展史
戳蓝字"CSDN云计算"关注我们哦! 作者 | 架构师技术联盟 责编 | 阿秃 1.ARM架构与ARM内核 1.1 ARM架构与内核简述 目前为止,ARM总共发布8种架构:ARMv ...
- linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...
从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...
- 三星ARM Cortex-A8 S5PV210(蜂鸟)简介
2011-11-29 21:0 2:43 分类: 嵌入式 开始准备针对QT210开发板写学习文章了,先熟悉一下处理器 S5PV210又名"蜂鸟"(Hummingbird),是三星推 ...
最新文章
- html5小游戏Untangle
- 半轴CVJ(constant velocity joint)
- [loj556][Antileaf's Round]咱们去烧菜吧
- 无法使用UI configuration的trouble shooting
- 开源 非开源_开源突破“舒适区”
- OpenCV:读取与写入图片
- ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 安装distel
- Java_学生信息管理系统——数组版——尝试将main函数单独放了一个类,并加了文件...
- 听听各位对Ubuntu的UI的看法
- 【阿里图标库的使用】
- Excel如何批量设置英语句首大写
- html5和css基础知识
- kinectfusion解析_KinectFusion介绍
- 如何下载B站视频以及音频
- 完美解决Ubuntu16.04虚拟机窗口全屏问题
- android视频压缩
- STemWin显示图片
- 滴滴是如何对用户和司机进行派单匹配的?
- 闰年判断(输入一个年份,判断是否为闰年)
- 米联客 ZYNQ/SOC 精品教程 S02-CH24 利用AXI VDMA 实现MT9V034摄像头采集