汇编基础2

1.函数调用

fun0mov r4, #100bx lrget_MaxNumcmp r0, r1stmfd sp!, {r0-r12, lr}    //入栈bl fun0                    //调用fun0函数ldmfd sp!, {r0-r12, lr}    //出栈movge r3, r0movlt r3, r1bx lr
mainldr sp, =0x40001000mov r0, #100mov r1, #200mov r2, #100stmfd sp!, {r0-r12, lr}bl get_MaxNum	ldmfd sp!, {r0-r12, lr}

2.指针

c语言:
unsigned int *p汇编:
ldr r1, =0x40000fff //给的地址
ldr r3,=0x11223344 //给的值str r3, [r1]    //将r3存储到r1里面
ldr r0, [r1]    //将r1指向的值给到r0

3.调用.c文件函数

.c文件:
extern int fun(int a, int b)
{return a+b;
}.s文件ldr sp, =0x40001000import fun            //添加函数stmdf sp!, {r0-r12, lr}mov r0, #10            ;参数a = 10mov r1, #20            ;参数b = 20mov r2, #30            bl fun                //调用函数ldmdf sp!, {r0-r12, lr}

注意:

1.a和b的参数取决于r0和r1,而与r2没关系,若是给多个寄存器赋值,也只会按顺序传入参数

2.若是传入的参数大于四个就得进行压栈

.c文件:
extern int fun(int a, int b, int c, int d, int e)
{return a+b+c+d+e;
}.s文件ldr sp, =0x40001000import fun            //添加函数stmdf sp!, {r0-r12, lr}mov r0, #10            ;参数a = 10mov r1, #20            ;参数b = 20mov r2, #30mov r3, #40mov r4, #50stmdf sp!, {r4}            bl fun                //调用函数ldmdf sp!, {r4}ldmdf sp!, {r0-r12, lr}

4.arm启动代码

	preserve8area reset, code, readonlycode32entryldr pc, =start_handerldr pc, =undefine_handerldr pc, =software_handerldr pc, =prefetch_handerldr pc, =data_handernopldr pc, =irq_handerldr pc, =fiq_hander        //ARM 架构的异常向量表实现undefine_handerb undefine_handerimport software_vector    //添加.c文件里面的software_vector函数
software_handerstmfd sp!, {r0-r12, lr}bl software_vector        //调用.c文件里面的software_vector函数ldmfd sp!, {r0-r12, lr}bx lrprefetch_handerb prefetch_handerdata_handerb data_handerirq_handerb irq_handerfiq_handerb fiq_handerexport asm_swi_fun
asm_swi_funswi #7    //软件中断  立即数执行对应服务bx lrstart_hander                //上电或者复位的处理函数ldr sp, =0x40001000     //初始化spimport main             //添加.c文件的main函数msr r0, cpsr            //读取当前程序状态寄存器(CPSR)到 R0bic r0, r0, #(0x1f << 0)//清除 CPSR 的“模式位”(低 5 位,0x1f = 0b11111)bic r0, r0, #(1 << 7)   //清除 CPSR 的“中断禁止位 I”(第 7 位),允许 IRQ 中断orr r0, r0, #(0x10 << 0)//设置“模式位”为 User 模式(0x10 = 0b10000,对应 User 模式)msr cpsr_c, r0          //将修改后的 R0 写入 CPSR 的“控制位域”(cpsr_c 表示只更新控制位)ldr sp, =0x40001000sub sp, sp, #1024b mainend

4.1 ARM的异常向量表

异常向量地址异常类型代码中的处理函数作用
0x00000000复位异常(Reset)start_hander系统上电 / 复位时执行,初始化硬件
0x00000004未定义指令异常undefine_hander执行无效指令时触发(如未实现指令)
0x00000008软件中断(SWI)software_hander触发 SWI 时跳转到系统调用处理
0x0000000C预取指异常prefetch_hander指令预取失败(如地址无效)
0x00000010数据访问异常data_hander数据读写失败(如越界、无权限)
0x00000014保留(Reserved)nop(空指令)ARM 架构预留,暂不使用
0x00000018外部中断(IRQ)irq_hander外部硬件触发中断(如按键、定时器)
0x0000001C快速中断(FIQ)fiq_hander高优先级中断(如紧急硬件事件)

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

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

相关文章

20250909的学习笔记

HTML 基础笔记1. HTML 基本格式<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>中文测试</title> </head> <body>这里是测试body测试内容。 </body> </html>2. HTML 标签常用标签 - <h1…

Linux 安全加固;Windows 安全设置

一、Linux 安全加固1. 账户与权限管理最小权限原则禁用 root 远程登录&#xff1a;修改 /etc/ssh/sshd_config&#xff0c;设置 PermitRootLogin no。使用 sudo 替代直接 root 操作&#xff0c;并通过 /etc/sudoers 限制命令范围&#xff08;如仅允许 apt 和 systemctl&#xf…

条码打印检测一体机是什么?

在工业4.0和智能制造的大背景下&#xff0c;数据的准确性和实时性是构建高效追溯系统。条码/二维码作为物理世界与数字世界连接的桥梁&#xff0c;其打印质量直接决定了数据链路的可靠性。传统“打印-人工抽检/离线全检”的模式存在流程割裂、效率低下、无法100%覆盖的弊端&…

Javaweb - 14.6 - Vue3 数据交互 Axios

目录 Promise 普通函数和回调函数 Promise 简介 Promise 基本用法 async 和 await 的使用 Axios 介绍 Axios 入门案例 Axios 的 get 和 post 方法 Axios 拦截器 完&#xff01; Promise 普通函数和回调函数 普通函数&#xff1a;正常调用的函数&#xff0c;一般函数…

怎么选适合企业的RPA财务机器人?

对于大多数财务人来说&#xff0c;“月初月末就是噩梦”已经成了常态&#xff1a;一边要面对堆积如山的单据和报表&#xff0c;一边还要应付领导不断加码的工作&#xff0c;常常忙到深夜&#xff0c;却总觉得自己陷在重复事务中难有成长。其实&#xff0c;这并不是个体问题&…

html css js网页制作成品——HTML+CSS无穷网页设计(5页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML

AUTOSAR进阶图解==>AUTOSAR_SWS_PDURouter

AUTOSAR PDU Router详解文档 AUTOSAR通信架构中的核心路由模块目录 1. 概述2. PDU Router模块架构3. PDU Router配置模型4. PDU Router路由流程5. PDU Router状态机6. 总结 1. 概述 PDU Router模块是AUTOSAR通信架构中的核心组件&#xff0c;负责在AUTOSAR软件组件之间路由I-…

RHEL7.9、RHEL9.3——源码安装MySQL

目录 一、环境部署 1. 克隆rhel7.9虚拟机 二、源码安装MySQL 1. 准备工作 2. 源码部署mysql8.0.40 1&#xff09;安装编译mysql所需软件包 2&#xff09;编译安装mysql8.0.40 3&#xff09;生成启动脚本 一、环境部署 1. 克隆rhel7.9虚拟机 改名为 “RHEL79_mysql_master” 并…

解决Win11 安全中心删掉存在隐患的工具

打开设置&#xff0c; 找到Windows安全中心&#xff0c;找到病毒和威胁防护&#xff0c;选择排除项&#xff0c;点 添加或删除排除项添加文件&#xff0c;文件夹&#xff0c;工具按照自己需求选择。或&#xff0c;删除文件注意&#xff1a;隐患的工具或者文件安装或者用完&…

通过URI Scheme实现从Web网页上打开本地C++应用程序(以腾讯会议为例,附完整实现源码)

目录 1、需求描述 2、选择URI Scheme实现 3、何为URI Scheme&#xff1f; 4、将自定义的URL Scheme信息写入注册表的C源码实现 5、如何实现最开始的3种需求 6、后续需要考虑的细节问题 之前陆续收到一些从Web页面上启动我们C客户端软件的需求&#xff0c;希望我们能提供一…

机器学习02——模型评估与选择(过拟合与欠拟合、K折交叉验证、均方误差、混淆矩阵)

上一章&#xff1a;机器学习01——机器学习概述 下一章&#xff1a;机器学习03——线性模型 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、经验误差与过拟合&#xff08;一&a…

基于 Django 与 Bootstrap 构建的现代化设备管理平台

整体步骤概览 创建项目和应用设计模型&#xff08;Model&#xff09; - 定义设备的数据结构配置用户认证&#xff08;Auth&#xff09; - 使用 Django 自带的强大用户系统创建视图&#xff08;View&#xff09; - 处理业务逻辑&#xff1a;登录、列表、增删改查编写模板&#x…

微软依旧稳定发挥,Windows 最新更新性能「开倒车」

微软在前不久为Release Preview测试用户推送了最新Windows11 25H2版本。按照惯例&#xff0c;正式版将于9月或者10月与咱们见面。虽然看起来是个跨版本的大更新&#xff0c;但是更新方式将服务堆栈更新&#xff08;SSU&#xff09;与最新累积更新&#xff08;LCU&#xff09;。…

一手实测,文心x1.1的升级很惊喜啊

一手实测&#xff0c;文心x1.1的升级很惊喜啊 前言 月9日&#xff0c;在 WAVE SUMMIT深度学习开发者大会上 百度发布了一个新的思考模型文心x1.1&#xff1a; X1 Turbo 升级为 X1.1 了。 文心4.5 Turbo 和 X1 Turbo 是2025年4月25日发布的&#xff0c;距今已经半年过去了&…

Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析

Flask 核心基础&#xff1a;从路由装饰器到 name 变量的底层逻辑解析 在使用 Flask 开发 Web 应用时&#xff0c;我们总会从 app Flask(__name__) 和 app.route("/") 这两行代码开始。看似简单的语法背后&#xff0c;藏着 Python 装饰器机制与 Flask 框架设计的核心…

中国AI云市场报告:阿里云份额达35.8%,高于2至4名总和

9月9日&#xff0c;国际权威市场调研机构英富曼&#xff08;Omdia&#xff09;发布《中国AI云市场&#xff0c;1H25》报告&#xff0c;报告显示&#xff0c;2025年上半年&#xff0c;中国AI云市场规模达223亿元&#xff0c;阿里云占比35.8%位列第一&#xff0c;市场份额高于2到…

鸿蒙Next开发指南:UIContext接口解析与全屏拉起元服务实战

前言在鸿蒙应用开发过程中&#xff0c;我们经常会遇到需要获取UI上下文实例或者在非UI上下文中调用UI相关方法的场景。随着HarmonyOS NEXT的不断发展&#xff0c;UIContext API为我们提供了更加优雅的解决方案。本文将详细介绍如何使用UIContext中对应的接口获取与实例绑定的对…

leaflet读取mvt格式

如图所示&#xff0c;是全国的数据&#xff0c;截图是部分数据先安装&#xff1a;npm install leaflet npm install leaflet.vectorgrid如果是其余的框架直接用就行&#xff1a;import * as L from leaflet; import leaflet.vectorgrid;我用的是angular,所以是ts中声明&#xf…

OSG中交互(鼠标、键盘)处理

OpenSceneGraph (OSG) 中的交互处理,包括鼠标和键盘事件。 一、OSG 事件处理体系 OSG 使用一个基于访问者模式的事件处理体系,核心类包括: osgGA::GUIEventHandler: 所有事件处理器的基类 osgViewer::Viewer: 查看器,管理事件队列和分发 osgGA::EventQueue: 事件队列…

微硕双N-MOS管WST3392在汽车智能氛围灯系统中的应用

汽车智能氛围灯系统是现代车辆提升驾乘体验的重要配置&#xff0c;其多通道LED的精密调光与控制需选用高性能、小体积的功率开关器件。微硕WINSOK的WST3392是一款双N沟道MOS管&#xff0c;具有30V耐压、3.7A连续电流和46mΩ的低导通电阻&#xff0c;特别适用于氛围灯系统中的多…