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

news2024/11/24 14:02:00

我要成为嵌入式高手之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寄存器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机导论——C语言001

前言 学习一门语言不是要记住所有这些函数&#xff0c;而是要懂得在哪里找到解决问题的答案 学习英语不是要记住所有单词&#xff0c;而是要懂得查字典&#xff08;因为这样就可以理解单词&#xff0c;并会用单词造句子了&#xff09; 以下侧重于了解输出&#xff08;side eff…

new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数,用于创建软体物体的辅助对象,提供了一些方法来创建软体物体

demo案例 new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数&#xff0c;用于创建软体物体的辅助对象&#xff0c;提供了一些方法来创建软体物体。以下是它的一些重要信息&#xff1a; 入参&#xff1a;通常不需要传入参数。 出参&#xff1a;创建的新的软体辅助对…

软件设计师-基础知识科目-面向对象技术知识7

七、面向对象技术知识&#xff1a; 面向对象基础知识&#xff1a; 对象&#xff1a; 对象的组成部分包括&#xff1a;对象名&#xff0c;状态(属性)&#xff0c;行为(操作)。 类&#xff1a; 类的分类&#xff1a;实体类、接口类(边界类)和控制类。 实体类的对象&#xff…

CentOS7 boa服务器的搭建和配置

环境是CentOS7&#xff0c;但方法不局限于此版系统&#xff0c;应该是通用的。 具体步骤如下&#xff1a; 1. 下载boa源码 下载地址: Boa Webserver 下载后&#xff0c;进入压缩包所在目录&#xff0c;进行解压&#xff1a; tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

信息系统项目管理师——第23章组织通用管理

本章在第三版流程和知识管理的基础上新增了2节内容&#xff0c;从2023年上半年的考情来看来 选择题&#xff0c;考1分左右&#xff0c;知识点比较分散&#xff0c;刷下题&#xff0c;考前突击下即可。 案例题&#xff0c;不考。 论文题&#xff0c;不考。 1人力资源管理 1.人…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟

原文链接&#xff1a;结合ArcGISSWAT模型Century模型&#xff1a;流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2NV9sMGRZNUJoVkNVc1ZzSzRuMl9XXzhqX0R3cXpESWFwM1E4cFY4ejNqWFh3VUl0dlZkNWk4b20ydFdFTy1xS2ZObGN0Z0ZXSjly…

交流电源的频率如何测试

交流电源的频率是指每秒钟交流电源周期的数量&#xff0c;通常是50Hz和60Hz。但是在实际使用中会有一定的波动&#xff0c;一般交流电源频率的波动范围是10%。 交流电源频率的高低对电路有很大的影响&#xff0c;直接影响着电能质量和电路的稳定性。此外&#xff0c;交流电源的…

Docker核心特征

Docker的基本概念 Dockerfile&#xff1a;制作进行的文件&#xff0c;可以理解为制作镜像的一个清单。 镜像&#xff1a;用来创建容器的安装包&#xff0c;可以理解为给电脑安装操作系统的系统镜像。 容器&#xff1a;通过镜像来创建的一套运行环境&#xff0c;一个容器里可…

eBPF 主题分享:Kindling-OriginX 解密如何揭开可观测性盲区实现根因推导

“第二届eBPF开发者大会”将于2024年4月13日在陕西省西安市线下召开,由西安邮电大学主办。本次大会以“发挥eBPF技术力量&#xff0c;提升计算机系统可观测性和性能”为主题&#xff0c;涵盖了eBPF技术及发展、eBPF网络安全应用、eBPF可观测性及应用、软件性能工程等方面&#…

代理模式:控制对象访问的智能方式

在面向对象的软件开发中&#xff0c;代理模式是一种结构型设计模式&#xff0c;它为其他对象提供一个代理或占位符以控制对这个对象的访问。代理模式在实现权限控制、延迟初始化和远程对象访问等方面非常有用。本文将详细介绍代理模式的定义、实现、应用场景以及优缺点&#xf…

Tomcat以服务方式启动,无法访问网络共享目录问题

关于“Tomcat以服务方式启动&#xff0c;无法访问网络共享目录问题”解决方式如下&#xff1a; 1、通过doc命令【services.msc】打开本地服务找到&#xff0c;找到tomcat服务所在位置 2、右键打开Tomcat服务的属性 3、选择 登陆选项卡 4、选择“此账户”选项&#xff0c;并…

预告:(阶乘)+统计读取的单个字符+把我电脑给干关机了的题,还好在tmp里面找到(穷举法编程)+(双循环算法)+(最大公约数,最小公倍数)

在赶一篇作业出来 第一个&#xff1a; 题目&#xff1a;编程实现&#xff0c;求saaaaaaaa⋯an个a的值&#xff0c;其中a是一个数字。例如当a为2&#xff0c;n为5时&#xff0c;计算&#xff0c;2&#xff0b;22&#xff0b;222&#xff0b;2222&#xff0b;22222的值。 #inc…

elementUI 下拉框加提示文案

效果如下&#xff1a; 展示文案在最下面&#xff0c;跟选项有个分割线 <el-select v-model"value" placeholder"请选择" clearable popper-class"addNotice" class"addNoticeS" visible-change"(v) >selectNotice(v,展示…

物联网SaaS平台

在信息化、智能化浪潮席卷全球的今天&#xff0c;物联网SaaS平台作为推动工业数字化转型的重要工具&#xff0c;正日益受到广泛关注。那么&#xff0c;物联网SaaS平台究竟是什么&#xff1f;HiWoo Cloud作为物联网SaaS平台又有哪些独特优势&#xff1f;更重要的是&#xff0c;它…

Docker 学习笔记(三):Centos7 中 Docker 使用,镜像、容器,以及操作等常用命令小结

一、前言 记录时间 [2024-4-7] 前置文章&#xff1a; Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#…

IDEA2023连接服务器docker并部署ruoyi-cloud-plus项目

文章目录 TCP 方式连接docker1. 服务器docker配置修改查看虚拟机中Docker配置文件位置修改配置文件重启docker服务关闭防火墙 2. idea安装docker插件3. idea连接docker服务 部署ruoyi-cloud-plus项目1. 项目环境说明2. 安装Centos73. 安装docker4. idea配置服务器SSH连接5. ide…

SHAP安装问题

一、安装 pip install shap -i https://pypi.tuna.tsinghua.edu.cn/simple 二、遇到问题 1、提示报错如下&#xff1a; ModuleNotFoundError: No module named numba.core 安装numba&#xff1a; pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple 提示已经…

【go从入门到精通】作用域,包详解

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

基于React封装Handsontable并兼容antd

背景 其实Handsontable官方也提供了React的版本&#xff0c;但是官方的版本再编辑和渲染的时候并不能够很好的嵌入第三方的组件库。这就导致了&#xff0c;使用了Handsontable就没有办和普通的react项目一样轻松引用其他第三方组件。因此对其react的版本进行了二次的封装&#…