ARM——结构体系(处理器工作模式,CPSR,立即数,汇编语言函数调用)

news2024/9/21 22:33:10

1、处理器工作模式

        

ARM有7个基本工作模式:
User:非特权模式,大部分任务执行在这种模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
Supervisor:当复位或软中断指令执行时将会进入这种模式
Abort:当存取异常时将会进入这种模式
Undef:当执行未定义指令时会进入这种模式
System:使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
    Cortex-A:低功耗
    Cortex-R:实时性
    Cortex-M:高性能
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式

2、CPSR

3、立即数

如何判断是不是一个立即数:
    1、可将该数所有的1均放入低8位
        例:0x234
        展开为:0010 0011 1000
        右移到低8位:1000 1110
        例:0x1234
        展开为:0001 0010 0011 1000
        不论如何右移均无法放入低8位
    2、将该数的移到低8位得到的值循环右移偶数位,可以得到原数据,直接调用
        例:0x234
        展开为:0010 0011 1000
        右移到低8位:1000 1110
        左边补零:0000 0000 0000 0000 0000 0000 1000 1110
        循环右移30位得:0000 0000 0000 0000 0010 0011 1000
        该数位立即数

4、汇编语言调用

        汇编语言调用C语言,C语言调用汇编语言

    preserve8
	area reset, code, readonly
	code32
	entry
  	
start
	ldr sp, =0x40001000        ;确定栈顶位置,0x40001000不是一个立即数,利用ldr强制转换
	
	mov r0, #1
	mov r1, #2
	mov r2, #3
	mov r3, #4

	import c_add                ;申明C函数

	bl c_add                    ;调用C函数,接收返回值

	nop

	b start
	
	export arm_add                ;声明该汇编函数可被调用
arm_add
	stmfd sp!, {r4-r12, lr}        ;入栈,将寄存器当前状态存入栈中
	add r0, r1, r0
	ldmfd sp!, {r4-r12, pc}        ;出栈,函数调用完毕,恢复寄存器之前的状态

	end
int arm_add(int x, int y);

int c_add(int a, int b, int c, int d)
{
	int sum = 0;	

	sum = arm_add(a, b);
	sum += arm_add(c, d);
	
	return sum; 

}

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

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

相关文章

CAN总线数据帧的帧结构

CAN总线中的信息是以固定格式的“帧”发送的,当总线为空闲时,任何已连接的节点都可以开始发送一个新的“帧”。 在一个CAN系统中,数据在节点之间的发送和接收主要通过四种不同类型的“帧”来执行和控制。这四种类型分别是数据帧、远程帧、错…

探索ArrayList的线程不安全性

文章目录 概要示例代码原因解决用 synchronized 保证安全添加元素其他方法 总结 概要 要测试ArrayList的线程不安全性,可以创建多个线程同时对 ArrayList 进行修改操作(如添加、删除元素),并观察是否会引发异常或数据不一致的问题…

Typescript实现react-redux的useSelector和useDispatch的状态定义

背景:react中使用typescript,在引入redux之后很多状态定义有问题,记录下来(文章记录学习react-redux过程中的踩坑)。 1.useSelector时,state语法报错,类型为unknown,如下图 我的store状态设置的很简单&am…

Luminar Neo for Mac智能图像处理软件【操作简单,轻松上手】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

【机器学习】LSTM(长短期记忆网络)详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 LSTM(长短期记忆网络)详解LSTM的基本思想LSTM的前向传播过程LSTM在实际任务中的…

mysql高级知识之集群

一、安装 源码编译MySQL,若需要MySQLtar包可私信我 #创建数据目录 mkdir /data/mysql -p#安装相关依赖 yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen…

C++入门day3-面向对象编程(中)

前言:C入门day2-面向对象编程(上)-CSDN博客 运算符重载 我们接触过函数重载,就是同名的函数有不同的功能。那么运算符重载,顾名思义也是赋予运算符其他的功能。在这里,我个人以为,运算符就是特…

C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 函数是语言的基本组成部分,也是面向对象编程的基石,他体现了封装的思想,代码的复用的功能。欢迎点赞 收藏 关注,本人将会持续更新 文章目录 函数什么是函数&am…

彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项

近日,由中国教育发展战略学会人工智能与机器人教育专业委员会指导,北京教育信息化产业联盟主办的第一届人工智能教育应用论坛暨 AI 教育科技成果展在北京隆重举办。本次活动以“ AI 强校大时代 —— 用新质生产力打造金钥匙强校”为主题,汇聚…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

数据结构(单向链表)

单向链表代码 #ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node {DataType data;struct node *pnext; }Link_Node_t;typedef struct link {Link_Node_t *phead;int clen; }Link_t;extern Link_t *link_creat(); extern int push_link_head(Link_t *…

智慧公厕技术应用、系统架构、应用功能有哪些?@卓振思众

智慧公厕的标准涵盖了多个方面,包括技术应用、系统架构、应用功能以及环保节能等。以下是【卓振思众】整理的一些标准要点: 技术应用‌物联网技术‌:通过无线传感器、监控设备等实时采集公厕内部环境数据。‌大数据与云计算‌:对数…

2157. 优秀的拆分(power)

代码 #include<bits/stdc.h> using namespace std; int a[10001]; int main() {int n,t1,k0;bool flagfalse;cin>>n;if(n%21) {cout<<-1;return 0;}while(n>0){if(n%21){k;a[k]t; }nn/2;tt*2;}if(k>1) {flagtrue;for(int ik;i>1;i--)cout<&l…

lit-llama代码解析

https://github.com/Lightning-AI/lit-llama/blob/main/README.md 下载的时候会报错误&#xff0c;因为网不行&#xff0c;一种方法就是多次尝试&#xff0c;另一种方法是终端连上代理下载 pycharm连接hugging face等网站_hugging face怎么连接-CSDN博客 根据指引下载权重 下…

springboot,maven多模块开发,子模块获取不到父模块添加的依赖,有多个root模块问题解决

错误示范 我以为放进去然后重载一下就是子模块了 导致后续在外层加的依赖&#xff0c;其article都接收不到 解决方案 需要在父模块的modules注册子模块 修改前后对比 此时子模块也能获取父模块的依赖

DDD设计方法-2-聚合、实体、值对象

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计方法-2-聚合、实体、值对象&a…

基于mspm0g3507的智能送药小车(21年电赛f题,openmv寻迹,k210数字识别,并行pid调制)项目实验报告

2024年全国大学生电子设计竞赛&#xff08;TI杯&#xff09; 2024年7月17日 摘要&#xff1a;本项目由微处理器MSPM0G3507&#xff0c;编码器电机驱动&#xff0c;OPENMV、K210视觉处理单元&#xff0c;红外药品检测单元&#xff0c;ZIGBEE无限透传单元&#xff0c;OLED显示&am…

Docker数据卷和Dockerfile

1、什么是Docker数据卷 前言&#xff1a; 在下载的镜像中&#xff0c;我们不能够去改变它内部的一些配置&#xff0c;因为docker的镜像文件是已经配置好的&#xff0c;无法改变&#xff0c;我们只能改变镜像启动后的容器里面的内容&#xff0c;但是又因为&#xff0c;容器本来…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器&#xff1a; (2)拦截器的…

【VMware】麒麟系统网络连接配置

在VMware配置页面点击编辑&#xff0c;进入虚拟网络编辑器将默认的 VMnet0删除&#xff0c;新建网络&#xff0c;设置桥接模式为Intel 打开主机cmd,查看主机IP地址&#xff0c;获取子网掩码&#xff0c;默认网关及DNS服务器 4.在主机寻找可用IP地址&#xff0c;ping不通的为未…