ARM内核、内核寄存器及作用、ARM最小系统、半导体器件、存储器、ARM工作方式、ARM寄存器个数、立即数、汇编指令的s/c后缀

我要成为嵌入式高手之4月10日51单片机第五天!!
————————————————————————————

单片机最小系统板:

单片机内部的CPU:

CPU定义的变量都在ram中、编写的程序代码都在rom中

CPU在次细化:kernal内核和外设

如GPIO、串口通信都是操作外设,而程序其实是在运行在kernal里,51单片机的内核称为8051,arm的内核称为arm。

因此先学习arm内核编程,使用芯片为S3c2440

ARM内核

ALU:算数逻辑单元

(以下寄存器c语言访问不到,故应该用汇编)

r0 ~ r12:通用寄存器,不可被寻址(当做变量,用来存放操作数)

pc(program counter)程序计数器:本质是个指针,指向当前执行指令的下一条指令

        ①pc取指令

        ②将取到的指令翻译成CPU能够运行的指令:译码

        ③执行

        好处:容易实现函数的跳转

lr(link register)链接寄存器:存储函数跳变前指令的地址,以供返回(相当于保护现场)

sp:栈指针寄存器

目的:在c语言运行之前把sp指针指出来

Cache高速缓存寄存器:比一般寄存器读写速度快

        ICache:指令

        DCache:数据

MMU内存管理单元:有MMU可以运行操作系统

AHB:先进的高速外设总线(ram,usb等高速设备)

APB:低速总线设备(uart,gpio,timer等低速设备)

s3c2440(32位处理器) 使用的架构是ARM920t架构,使用的指令集为ARMV5TE

ARM最小系统

半导体器件

TTL:输入高电平>2.4V,输出低电平<0.4V

CMOS:1逻辑电平电压接近于电源电压,0逻辑电平接近于0,而且具有很宽的噪声容限

二极管:半导体二极管是在一个PN结的两侧,各引出一根金属电极,并用外壳封装起来而构成的。由P区引出的电极称为阳极,由N区引出的电极称为阴极。

三极管:半导体三极管也成为晶体三极管,最主要的作用是电流放大和开关作用。基极(b),集电极(c),发射极(e)

MOS管(场效应管):场效应晶体管FET(Field Effect Transistor),由多数载流子参与导电,也称为单极型晶体管。

存储器的分类

        存储器是指保存数组的硬件单元。广义的分类可简单的分为易失性存储器和非易失性存储器两类:

易失性存储器是指掉电后数据就丢失了的存储器,最常见 的就是ram

非易失性存储器是指掉电后数组不会丢失的存储器,最常见 的就是rom

ram种类:

rom种类:

 nor flash(或非)可以被寻址        nand flash(与非)不可被寻址

ARM指令集

1、ARM采用的是32位架构

2、ARM约定:

        Byte:8位

        Halfword:16位(2字节)

        Word:32位(4字节)

        Doubleword:64位(8字节)(Cortex-A处理器)

3、大部分ARM core提供:

        ARM指令集(32位)

        Thumb指令集(16位)

字节顺序

默认小端存储

ARM寄存器

一、ARM有37个32位长的寄存器

        1个用作PC

        1个用作CPSR

        5个用作SPSR

        30个通用寄存器

二、Cortex体系下有40个32位长寄存器

ARM的七种工作模式

User:非特权模式,大部分任务执行在这种模式

FIQ:当一个高优先级(fast)中断产生时将会进入这种模式

IRQ:当一个低优先级(normal)中断产生时将会进入这种模式

Supervistor:当复位或软中断执行指令时将会进入这种模式

Abort:当存取异常时将会进入这种模式

Undef:当执行未定义指令时会进入这种模式

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

 下面的cpsr 和 spsr 寄存器:

一个cpsr、五个spsr

psr寄存器:

程序状态寄存器

cpsr:当前程序状态寄存器

spsr:备份被打断那一瞬间的cpsr(保护现场)

下面为如何设置arm的工作模式:

N Z C V位会根据之前运算结果来回发生变化

异常处理

由于异常向量表中元素地址都是固定的,故在c程序执行之前需要进行异常向量表初始化

ARM汇编指令

        ARM汇编主要目的是为了编写ARM启动代码,启动代码启动后,引导程序到c语言环境下运行。

1、初始化异常向量表

2、初始化各工作模式的栈指针寄存器

3、开启arm内核中断允许

4、将工作模式设置为user模式

5、完成上述工作后,引导程序进入c语言主函数执行

如何判断立即数

  1. 如果某个数的数值范围是0~255之间,那么这个数一定是立即数;
  2. 把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;
  3. 这个数的二进制序列的右边必须为偶数个连续的 0

mov指令:

加载12位立即数到寄存器或转移一个寄存器的值到另外一个寄存器

mov r0, #2 :加载立即数2到寄存器r0,MOV{S}<c> <Rd>, #<const>

mov r1, r0 :将r0寄存器的值加载到r1,MOV{S}<c> <Rd>, <Rm>

大多数指令的格式为opcode rd, rn ,其中,rd是目标寄存器,rn是第一操作数寄存器。

移位指令

ASR:算数右移

LSL:逻辑左移

ROR:循环右移

sub指令:

SUB{S}<c> <Rd>, <Rn>, #<const>:将寄存器Rn的值减const之后存储到寄存器Rd

SUB{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}:寄存器Rn减寄存器Rm的值,减完存储到寄存器Rd

orr指令:

orr指定位置1:ORR{S}<c> <Rd>, <Rn>, #<const>:按位或,Rn与常量const或,或的结果保存到Rd里

bic指令:

bic指定位清零:BIC{S}<c> <Rd>, <Rn>, #<const>:将Rn中的字数据const为1的比特清零,把结果放入rd

mvn指令:

若一个数取反是立即数,就可以用mvn存储到寄存器中

ldr指令:

ldr寄存器加载指令:

LDR{<c>}{<q>} <Rt>, <label> ;如ldr r0, =0x2FAB45

ldr指令多用于从ram中将一个32位的字数据传送到目的寄存器中

LDR<c> <Rt>, [<Rn>{, #+/-<imm12>}] 如:

LDR   R0,[R1,#8];

将内存地址为R1+8的字数据读入寄存器R0,这里的#8作为12位立即数是可以省略的

LDR<c> <Rt>, [<Rn>], #+/-<imm12> 如:

ldr r0, [r1], #8 ;

将内存地址R1的字数据读入r0,之后r1+8

LDR<c> <Rt>, [<Rn>, #+/-<imm12>]! 如:

LDR   R0,[R1,#8] !;

将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

汇编指令的s后缀

        几乎所有的汇编指令都可以在指令后面加上s后缀,s后缀的含义是在指令执行过程中会更新cpsr寄存器的N,V,C,Z位(类似于一种标记,表明上一次计算的结果有何特点)

N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0

Z:如果结果为0,则Z=1;如果结果为非零,则Z=0

C:是针对无符号数最高有效位向更高位进位时C=1;减法中运算结果的最高有效位从更高位借位时C=0

V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;除了这两种情况以外V位为0(例如有符号数整型溢出)

汇编指令的c后缀

cmp指令:

cmp r0, r1:第一操作数(r0)与第二操作数(r1)进行减法运算,该运算会产生NZCV标志改变,运算之后可以加c后缀进行下一步运算

相当于运算条件

练习:假设有三个变量R0=10,R1=20,R2=15,找出最大值装入R3寄存器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AMD Tensile 简介与示例

按照知其然&#xff0c;再知其所以然的认知次序进行 1&#xff0c;下载代码 git clone --recursive https://github.com/ROCm/Tensile.git 2&#xff0c;安装 Tensile cd Tensile mkdir build cd build ../Tensile/bin/Tensile ../Tensile/Configs/rocblas_dgemm_nn_asm_full…

MongoDB快照(LVM)业务场景应用实战

MongoDB和LVM快照概述 MongoDB的重要性&#xff1a;MongoDB支持的灵活的文档模型&#xff0c;使其成为处理大量分散数据的理想选择&#xff0c;特别是在需要快速迭代和频繁更改数据结构的应用中。 LVM&#xff08;逻辑卷管理&#xff09;快照技术基本概念&#xff1a;LVM允许…

CY7.5-COOH荧光属性Cyanine7.5花菁染料

CY7.5-COOH&#xff0c;作为一种Cyanine 7.5花菁染料&#xff0c;在荧光属性上表现出色。其独特的化学结构赋予了它荧光性质&#xff0c;使其在生物标记、荧光成像和光学传感等领域具有诸多应用前景。 CY7.5-COOH具有出色的荧光量子产率&#xff0c;这意味着在激发光的照射下&…

C#/.NET/.NET Core拾遗补漏合集(24年4月更新)

前言 在这个快速发展的技术世界中&#xff0c;时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节&#xff0c;以帮助大家更全面地了解这些技术栈的特性和发展方向。 GitHub开源地…

微信小程序搜索排名优化的八个套路

微信小程序的搜索优化排名是一个综合性的工作&#xff0c;需要针对多个维度进行操作。小柚给各位新老客户列出一些关键步骤和策略&#xff0c;帮助老板利用微信小程序的搜索排名规则进行优化。 1.选择合适的关键词 深入研究目标用户的搜索习惯&#xff0c;选择高搜索量、低竞争…

Java List基础篇

目录 前言一、常用List1.1 List1.1.1 特点1.1.2 常用API 1.2 ArrayList1.2.1 特点1.2.2 使用 1.3 LinkedList1.3.1 特点1.3.2 使用 1.4 CopyOnWriteArrayList1.4.1 特点1.4.2 使用 1.5 Arrays.asList()1.5.1 特点1.5.2 使用 二、对比总结 前言 一、常用List 1.1 List List是…

Day93:云上攻防-云服务篇对象存储Bucket桶任意上传域名接管AccessKey泄漏

目录 云服务-对象存储-权限配置不当 权限控制-公共读或公共读写&#xff1a;可完整访问但不显示完整结构目录 权限控制-Bucket授权策略&#xff1a;设置ListObject显示完整结构目录 权限控制-Bucket公共读写权限&#xff1a;公共读写直接PUT文件任意上传 云服务-对象存储-…

手写ArrrayList

需求 自定义的MyArrayList import java.util.Arrays; import java.util.Objects;public class MyArrayList<E> {private Object[] elementData ; // 存储元素的数组private int size; // 记录 的元素个数private static final int DEFAULT_CAPACITY 10; // 默认容量// …

Java高频面试之JVM篇

说一下 Jvm 的主要组成部分&#xff1f;及其作用&#xff1f; 类加载器执行器运行时数据区域本地接口 谈谈对运行时数据区的理解&#xff1f; 堆和栈的区别是什么&#xff1f; 堆中存什么&#xff1f;栈中存什么&#xff1f; 堆总存对象,栈中存局部变量,引用 为什么要把堆…

最新php投票系统源码下载 二维码投票生成器系统 源码开源可二开

在当今数字化时代&#xff0c;投票系统已成为各类活动、选举、调查等场景中不可或缺的工具。为了满足广大用户对于高效、便捷投票系统的需求&#xff0c;分享一款最新版的PHP投票系统源码&#xff0c;带二维码投票生成器功能&#xff0c;为用户提供了更为灵活和多样化的投票体验…

说说你对栈、队列的理解?应用场景?

一、栈 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表&#xff0c;限定仅在表尾进行插入和删除操作的线性表 表尾这一端被称为栈顶&#xff0c;相反地另一端被称为栈底&#xff0c;向栈顶插入元素被称为进栈、入栈、压栈&#xff0c;从栈顶删…

【Python实践应用】使用Python加载栅格数据

下面的代码实现的是加载伊宁市NDVI数据&#xff0c;首先进行相关的python包的导入&#xff0c;然后定义和读取我们需要加载的数据&#xff0c;这里我们使用的NDVI数据是将伊宁23年的NDVI数据合并成为了一张栅格图像&#xff0c;每个波段表示一年的 NDVI&#xff0c;我们这里显示…

备战蓝桥杯---刷杂题2

显然我们直接看前一半&#xff0c;然后我们按照斜行看&#xff0c;我们发现斜行是递增的&#xff0c;而同一行从左向右也是递增的&#xff0c;因此我们可以直接二分&#xff0c;同时我们发现对称轴的数为Ck,2k. 我们从16斜行枚举即可 #include<bits/stdc.h> using name…

探索AI工具导航网站

在现代科技发展迅猛的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了各行各业中不可或缺的一部分。了解和利用最新的AI工具对于工作、学习和娱乐都具有重大意义。在这篇博客中&#xff0c;我们将探索一些最新的人工智能工具导航网站&#xff0c;以及其中一款名…

liunx系统发布.net core项目

liunx系统发布.net core项目 准备.net6程序运行环境部署nginx&#xff0c;通过一个地址既能访问web api&#xff0c;又能访问web项目有一个客户把web api放到docker中&#xff0c;想通过nginx转发&#xff0c;nginx也支持配置多个程序api接口的其它 liunx系统&#xff1a;cento…

【vue】ref 和 reactive 对比

ref&#xff1a;存储单个数据&#xff0c;如数值&#xff0c;字符串reactive&#xff1a;存储复杂数据&#xff0c;如对象&#xff0c;数组 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vie…

短剧小程序系统开发,让短剧观看与创作更加便捷。短剧系统源码搭建

一、目前短剧发展趋势 1. 市场规模&#xff1a;根据数据来看&#xff0c;2023年中国微短剧市场规模达到了373.9亿元&#xff0c;同比上升了267.65%。预计2024年市场规模将超过500亿元。这一市场规模的增长速度非常显著&#xff0c;显示出短剧行业的巨大潜力和发展前景。 2. 投…

3款热门婴儿洗衣机全面对比测评:希亦、小吉、觉飞哪款性能最强?

经常洗大人衣物的传统洗衣机&#xff0c;很少有专门的高温除菌等功能&#xff0c;所以洗衣机里有可能会有一些大人身上带有的细菌&#xff0c;特别是婴儿衣物&#xff0c;婴儿抵抗能力弱&#xff0c;衣物混洗可能让宝宝感染细菌而导致生病&#xff0c;这种事情是有过发生的&…

SI案例分享--实用的单端口Delta-L测试方法

目录 0 引言 1 单端口Delta-L技术 2 基于单端口Delta-L方法的反射灵敏度分析 3 用充分表征的材料系统验证该方法 4 在单端口法中提取总损耗 5 总结 0 引言 Intel Delta-L方法已被公认为一种常规方法&#xff0c;通过对测试线进行2端口测量来提取层压板材料的Dk和插入损耗…

FX110网:汇市经纪商Prospero Markets被ASIC发出正式清盘令

澳大利亚联邦法院已批准金融监管机构 ASIC 的请求&#xff0c;向ASIC 许可的&#xff08;前&#xff09;零售外汇和差价合约经纪商 Prospero Markets Pty Ltd 发出正式清盘令。 相关阅读&#xff1a;《ASIC请求下令清盘汇市经纪商Prospero Markets》 法院于周四发布命令&#…