文章目录

  • 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内核、指令集等简介相关推荐

  1. 什么是arm-arm体系架构版本(指令集版本)-arm内核版本

    1.什么是arm? arm公司:是英国一家电子公司的名字,该公司成立于1990年11月,是苹果电脑,Acorn电脑集团和VLSI Technology的合资企业.Acorn曾在1985年推出世界上首个 ...

  2. ARM SIMD 指令集:NEON 简介

    ARM SIMD 指令集:NEON 简介 一.NEON 简介 1.1.NEON 简介 1.2.NEON 使用方式 1.3.编译器自动向量化的编译选项 1.3.1 Arm Compiler 中使能自动向 ...

  3. 指令集架构、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 ...

  4. [RISC-V] risk5 指令集架构简介——2021年初学习

    前言 没钱没设备还是别学了,我还以为买了书会有用,看了作者的公众号才知道,买开发板送书,你可以去查查FPGA板子要多少钱. 这个专栏的内容来自硅亚历山大的书<教你设计CPU--RISC-V处理器 ...

  5. ARM NEON指令集优化理论与实践

    ARM NEON指令集优化理论与实践 一.简介 NEON就是一种基于SIMD思想的ARM技术,相比于ARMv6或之前的架构,NEON结合了64-bit和128-bit的SIMD指令集,提供128-bi ...

  6. Cortex系列ARM内核介绍

    众所周知,英国的ARM公司是 嵌入式微处理器世界当中的佼佼者.ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式 ...

  7. arm 架构_Arm架构之Arm内核解析

    Arm架构已经主导了当今嵌入式处理和计算市场,但在过去的几十年里,Arm 架构却走过了漫长的道路.从20世纪80年代开始,它起初是作为家用电脑处理器,然后在20世纪90年代成为手机芯片的基础.如今,在 ...

  8. 详谈ARM架构与ARM内核发展史

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 架构师技术联盟 责编 | 阿秃 1.ARM架构与ARM内核 1.1 ARM架构与内核简述 目前为止,ARM总共发布8种架构:ARMv ...

  9. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...

    从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...

  10. 三星ARM Cortex-A8 S5PV210(蜂鸟)简介

    2011-11-29 21:0 2:43 分类: 嵌入式 开始准备针对QT210开发板写学习文章了,先熟悉一下处理器 S5PV210又名"蜂鸟"(Hummingbird),是三星推 ...

最新文章

  1. html5小游戏Untangle
  2. 半轴CVJ(constant velocity joint)
  3. [loj556][Antileaf's Round]咱们去烧菜吧
  4. 无法使用UI configuration的trouble shooting
  5. 开源 非开源_开源突破“舒适区”
  6. OpenCV:读取与写入图片
  7. ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 安装distel
  8. Java_学生信息管理系统——数组版——尝试将main函数单独放了一个类,并加了文件...
  9. 听听各位对Ubuntu的UI的看法
  10. 【阿里图标库的使用】
  11. Excel如何批量设置英语句首大写
  12. html5和css基础知识
  13. kinectfusion解析_KinectFusion介绍
  14. 如何下载B站视频以及音频
  15. 完美解决Ubuntu16.04虚拟机窗口全屏问题
  16. android视频压缩
  17. STemWin显示图片
  18. 滴滴是如何对用户和司机进行派单匹配的?
  19. 闰年判断(输入一个年份,判断是否为闰年)
  20. 米联客 ZYNQ/SOC 精品教程 S02-CH24 利用AXI VDMA 实现MT9V034摄像头采集

热门文章

  1. 收银系统的硬件有哪些?
  2. AnyLogic第二讲行人仿真空间逻辑讲解
  3. Python数据结构之树形结构——数组存储
  4. edge浏览器被百度占用了如何解决?
  5. R语言--MCMC算法介绍以及例子
  6. Qcom平台 Camera 之单刷调试
  7. [转]Mysql在大型网站的应用架构演变
  8. 【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)
  9. 【C++】1064:奥运奖牌计数(信息学奥赛)
  10. android preference 启动activity,Android PreferenceActivity 学习笔记