嵌入式面经-ARM体系架构-ARM体系结构理论基础

ARM指令集概述

  • 指令

    • 能够指示处理器执行某种运算的命令称为指令

    • 指令在内存中以机器码(二进制)的方式存在

    • 每一条指令都对应一条汇编

    • 程序是指令的有序集合

  • 指令集

    • 处理器能识别的指令的集合称为指令集

    • 不同架构的处理器指令集不同(比如ARM与X86)

    • 指令集是处理器对开发者提供的接口

  • arm指令集

    • arm指令集:所有指令(机器码)都占有32bit(4字节)存储空间

    • thumb指令集:所有指令(机器码)都占有16bit(2字节)存储空间

编译原理

  • 机器码、汇编、C

    • 机器码(二进制)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同处理器机器码不同,所以机器码不可移植

    • 汇编语言是机器码的符号化,一个汇编符号就是一条机器码,所以不同处理器汇编也不一样,所以汇编语言也不可移植

    • C语言在编译时可以使用不同的编译器将C源码编译成不同架构处理器的汇编语言,所以C语言可以移植

  • 编译流程

    • 预处理:.c.h文件、宏展开成一个文件

    • 编译:高级语言.c->汇编语言.S

    • 汇编:汇编语言.S->机器语言.o

    • 链接:多个机器语言.o链接一个可执行文件

ARM存储模型

### arm数据类型

* ARM采用32位架构,基本数据类型有8bit(1字节)、16bit(2字节)、32bit(3字节)三种

* 数据本身是多少位在内存中的起始地址就应该是几个倍数,也就是要字节对齐

  * 比如一个变量是16bit(2字节)的数据类型,那么其在内存中起始地址就需要时2的倍数,比如,0x00、0x02、0x04

  * 比如一个变量是32bit(4字节)的数据类型,那么其在内存中起始地址就需要时4的倍数,比如,0x00、0x04、0x08
### 字节序

* char类型没有字节序

* 数据0x12345678:1234高十六位、5678低十六位

* 大端对齐:低地址存放高位、高地址存放低位

* 小端对齐:低地址存放低位、高地址存放高位

* ARM一般使用小端对齐
### ARM指令存储

* 处理器处于ARM状态时所有指令在内存的起始地址必须是4的整数倍

  * 因为所有指令(机器码)都占有32bit(4字节)存储空间

* 处理器处于Thumb状态时所有指令在内存的起始地址必须是2的整数倍

  * 因为所有指令(机器码)都占有16bit(2字节)存储空间

ARM8个基本的工作模式

  • User:非特权模式,在执行上层的应用程序时处于该模式

    • 除此模式外均为特权模式(高权限)

    • 权限比较低,防止用户误操作

    • 执行上层应用程序

    • 用户态

  • FIQ:当一个高优先级中断产生后将进入该模式

    • 属于异常模式

    • 执行硬件中断请求程序

  • IRQ:当一个低优先级中断产生后将进入该模式

    • 属于异常模式

    • 执行硬件中断请求程序

  • SVC:当复位或执行软中断指令后将进入该模式

    • 属于异常模式

    • 执行初始化程序

  • Abort:当产生存取异常时将进入该模式

    • 属于异常模式

    • 例如指针错误

  • Undef:当执行未定义的指令时将进入该模式

    • 属于异常模式

    • 例如机器码错误,译码器不识别

  • System:使用和User模式相同寄存器集的特权模式

  • Monitor:为了安全而扩展出的用于执行安全监控代码的模式

相关推荐
无为之士1 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小蜗牛慢慢爬行7 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
岑梓铭17 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉18 分钟前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei21 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
Asa31930 分钟前
STM32-按键扫描配置
stm32·单片机·嵌入式硬件
7yewh37 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
小张认为的测试41 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
嵌入式科普1 小时前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
打鱼又晒网1 小时前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp