当前位置: 首页 > news >正文

lv11 嵌入式开发 ARM指令集中(伪操作与混合编程) 7

目录

1 伪指令

2 伪操作

3 C和汇编的混合编程

4 ATPCS协议


1 伪指令

本身不是指令,编译器可以将其替换成若干条等效指令
 

		@ 空指令NOP@ 指令LDR R1, [R2]@ 将R2指向的内存空间中的数据读取到R1寄存器@ 伪指令LDR R1, =0x12345678@ R1 = 0x12345678	@ LDR伪指令可以将任意一个32位的数据放到一个寄存器LDR R1, =STOP@ 将STOP表示的地址写入R1寄存器@ LDR R1, STOP@ 将STOP地址中的内容写入R1寄存器

2 伪操作

不会生成代码,只是在编译之前告诉编译器怎么编译

@ GNU的伪操作一般都以‘.’开头@ .global symbol@ 将symbol声明成全局符号@ .local symbol@ 将symbol声明成局部符号@ .equ DATA, 0xFF@ MOV R1, #DATA@ 相当于define@ .macro FUNC@	MOV R1, #1@	MOV R2, #2@ .endm@ FUNC@ .macro 相当于函数封装@ .if 0@	MOV R1, #1@	MOV R2, #2@ .endif@.rept 3@ 	MOV R1, #1@ 	MOV R2, #2@.endr@ .weak symbol@ 弱化一个符号,即告诉编译器即便没有这个符号也不要报错@ .weak func@ B func@ .word VALUE@ 在当前地址申请一个字的空间并将其初始化为VALUE@ MOV R1, #1@ .word 0xFFFFFFFF@ MOV R2, #2@ .byte VALUE	@ 在当前地址申请一个字节的空间并将其初始化为VALUE@ MOV R1, #1@ .byte 0xFF@ .align N@ 告诉编译器后续的代码2的N次方对其@ .align 4@ MOV R2, #2@ .arm@ 告诉编译器后续的代码是ARM指令@ .thumb@ 告诉编译器后续的代码是Thumb指令@ .text				@ 定义一个代码段@ .data				@ 定义一个数据段@ .end 之前的代码都是汇编代码@ .space N, VALUE@ 在当前地址申请N个字节的空间并将其初始化为VALUE@ MOV R1, #1@ .space 12, 0x12@ MOV R2, #2@ 不同的编译器伪操作的语法不同

rept示例

 .word示例

 .byte示例

.align 2代表对齐,2代表2的2次方对齐,即4的整数倍。如果3代表8的整数倍。

3 C和汇编的混合编程

通用寄存器指令

  • 1、数据处理指令
  • 2、跳转指令
  • 3、内存读写指令load

Arm专用指令,不会有C语言与之对应

  • 4、CPSR
  • 5、SWI
  • 6、协处理器指令

上电的第一段代码都是用汇编写的。

	@ C和汇编的混合编程原则:在哪种语言环境下符合哪种语言的语法规则@ 1. 在汇编中将C中的函数当做标号处理@ 2. 在C中将汇编中的标号当做函数处理@ 3. 在C中内联的汇编当做C的语句来处理@ 1. 方式一:汇编语言调用(跳转)C语言@ MOV R1, #1@ MOV R2, #2@ BL  func_c  @func_c用c写,最后会通过LR跳转回来,不写括号@ MOV R3, #3@ 2. 方式二:C语言调用(跳转)汇编语言@ .global FUNC_ASM  @必须加.global否则c文件中不认识
@ FUNC_ASM:@ MOV R4, #4@ MOV R5, #5void func_c(void){int a;a ++;//C语言调用(跳转)汇编语言FUNC_ASM();   //需要括号a --;}@ 3. C内联(内嵌)汇编/*
void func_c(void)
{int a;a ++;//C内联(内嵌)汇编asm("MOV R6, #6\n""MOV R7, #7\n");//C语言调用(跳转)汇编语言FUNC_ASM();a --;
}
*/

4 ATPCS协议

@ ATPCS协议主要内容 @ 1.栈的种类@ 	1.1 使用满减栈@ 2.寄存器的使用@	2.1 R15用作程序计数器,不能作其他用途	@ 	2.2 R14用作链接寄存器,不能作其他用途@	2.3 R13用作栈指针,不能作其他用途@	2.4 当函数的参数不多于4个时使用R0-R3传递,当函数的参数多于4个时,多出的部分用栈传递@	2.5	函数的返回值使用R0传递@ 	2.6 其它寄存器主要用于存储局部变量

总结,参数尽量小于3,放在寄存器中效率高一点。 

相关文章:

lv11 嵌入式开发 ARM指令集中(伪操作与混合编程) 7

目录 1 伪指令 2 伪操作 3 C和汇编的混合编程 4 ATPCS协议 1 伪指令 本身不是指令,编译器可以将其替换成若干条等效指令 空指令NOP 指令LDR R1, [R2] 将R2指向的内存空间中的数据读取到R1寄存器 伪指令LDR R1, 0x12345678 R1 0x12345678 LDR伪指令可以将任…...

北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…...

麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错

记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论:系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决: (一)、如果是外网直接配…...

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路: 动规五部曲 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j&#x…...

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中,通过使用预览器,可以查看应用的UI效果,方便开发者实时查看应用的运行效果,随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…...

音视频转换软件Permute mac中文板特点介绍

Permute mac是一款Mac平台上的媒体格式转换软件,由Chaotic Software开发。它可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式,并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式:支持几乎所…...

前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】

目录 一. 图片1.2. 二.list.vue三.uni-load-more.vue最后 一. 图片 1. 2. 二.list.vue <template><view><!--列表--><scroll-view scroll-y"true" class"scroll-Y" :style"height: scrollviewHigh px;" lower-threshol…...

超聚变服务器关闭超线程CPU的步骤(完整版)

前言: 笨鸟先飞&#xff0c;好记性不如烂笔头。 我们项目都用不到超线程CPU&#xff0c;所以调测设备的时候都需要关掉&#xff0c;最近新设备换成了超聚变的服务器&#xff0c;这篇记录我关闭&#xff08;超聚变&#xff09;服务器超线程CPU的方法步骤。 关闭超线程CPU的步骤…...

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个&#xff1f;不考虑多物体提交。障碍物&#xff0c;尽可能选择状态发生变化的物体。如果没有明显变化的&#xff0c;则考虑周边的物体。车的状态最后趋于减速、停止&#xff0c;时序…...

事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)

在Django的setting.py中常见的三句静态资源(static)目录设置语句如下&#xff1a; STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_ROOT os.path.join(BASE_DIR, static) STATIC_URL /static/下面介绍这三句话的作用。 首先说第1句和第2句&#xff1a; STATI…...

Vue.js2+Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态

Vue.js2Cesium1.103.0 十四、绘制视锥&#xff0c;并可实时调整视锥姿态 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><divclass"control"style"position: absolute;right: 50px;top: 50px…...

批量替换WordPress文章内图片链接

在WordPress使用过程中&#xff0c;如果中途更换了域名&#xff0c;原先文章内的图片使用的是原来的域名&#xff0c;就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库&#xff0c;登…...

关于DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC的一些发现

任务在哪 这个是11g以后的自动收集统计信息的后台任务&#xff0c;10g之前是在dba_scheduler_jobs里查看 SQL> SELECT CLIENT_NAME ,STATUS ,MEAN_INCOMING_TASKS_7_DAYS,MEAN_INCOMING_TASKS_30_DAYS FROM DBA_AUTOTASK_CLIENT WHERE…...

MatrixOne 支持多样化生态工具

近日&#xff0c;云原生数据库 MatrixOne 支持多样化生态工具&#xff0c;包括&#xff1a;数据集成工具、BI 工具和数据计算引擎这三类生态工具。 云原生数据库使得传统数据库得以充分结合云服务的免运维、高弹性、高可扩展、高可用、高性价比优势&#xff0c;又顺应了云端应…...

力扣刷题篇之位运算

系列文章目录 目录 系列文章目录 前言 一、位运算的基本运算 二、位运算的技巧 三、布隆过滤器 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff0…...

asp.net core mvc 控制器使用配置

一、在根目录 添加 mysettings.json 文件 mysettings.json 文件代码如下&#xff1a; {"MySettings": {"Name": "独立配置文件","Site": "lt"} }appsettings.json 文件代码如下&#xff1a; {"Logging": {&quo…...

Hadoop学习总结(MapRdeuce的词频统计)

MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …...

PPT基础入门

目录 相关设置快捷键shift 快捷键Ctrl 快捷键Ctrl Shift 组合快捷键快捷键总结 相关设置 设置撤回次数 自动保存 图片压缩 字体嵌入&#xff1a;目的是在不同的电脑上保留已经设置好的字体 多格式导出 &#xff08;1&#xff09;可以导出PDF &#xff08;2&#xff09;可以导…...

Java 语言关键字有哪些

Java 语言关键字有哪些 分类关键字访问控制privateprotectedpublic类&#xff0c;方法和变量修饰符abstractclassextendsfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatileenum程序控制breakcontinuereturndowhileifelseforinstanceofswitchcase…...

Go vs Rust:文件上传性能比较

在本文中&#xff0c;主要测试并比较了Go—Gin和Rust—Actix之间的多部分文件上传性能。 设置 所有测试都在配备16G内存的 MacBook Pro M1 上执行。 软件版本为&#xff1a; Go v1.20.5Rust v1.70.0 测试工具是一个基于 libcurl 并使用标准线程的自定义工具&#xff0c;能…...

2026最权威的AI学术平台推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 把维普系统检测 AI 生成文本的特性揪住&#xff0c;要使 AI 率降下来&#xff0c;得从词汇、…...

PPTist:重构演示文稿创作流程的3大颠覆性突破

PPTist&#xff1a;重构演示文稿创作流程的3大颠覆性突破 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the ed…...

Redis 不止缓存!从零到一吃透 Redis 向量数据库

前言大模型时代&#xff0c;检索增强生成&#xff08;RAG&#xff09;、智能推荐、多模态检索等场景已成为业务创新的核心方向&#xff0c;而向量数据库正是支撑这些场景的底层基石。很多开发者提起向量数据库&#xff0c;第一反应是Milvus、Pinecone这类专业组件&#xff0c;却…...

多语言双轨直销系统开发要点

系统架构设计 采用微服务架构确保模块化与扩展性&#xff0c;支持高并发场景。数据库设计需考虑多语言数据存储&#xff0c;推荐使用NoSQL&#xff08;如MongoDB&#xff09;处理非结构化翻译内容。负载均衡技术保障全球用户访问速度。核心功能模块 会员管理模块实现双轨层级计…...

memtest_vulkan显存检测终极指南:从问题识别到健康管理

memtest_vulkan显存检测终极指南&#xff1a;从问题识别到健康管理 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 一、显存故障问题识别&#xff1a;图形渲染异…...

文件自动同步软件哪个好?企业级高效安全同步方案测评

文件自动同步软件对于许多中大型企业来说&#xff0c;是不可或缺的底层基础设施。不管是内部的多个服务器系统之间&#xff0c;跨部门团队之间&#xff0c;还是和外部的供应链伙伴、总部分支机构之间&#xff0c;都需要依赖文件自动同步软件来实现安全、自动化的文件传输与数据…...

2026AI大模型入门学习教程(建议收藏),大模型入门学习路线,非常详细看这一篇就够了!

一、LLM Fundamentals 基础 1. 机器学习的数学基础 在掌握机器学习之前&#xff0c;理解支撑这些算法的基本数学概念非常重要。 线性代数&#xff1a;这是理解许多算法&#xff08;特别是深度学习算法&#xff09;的关键。主要概念包括向量、矩阵、行列式、特征值和特征向量、…...

终极指南:5步解锁MacBook Touch Bar在Windows系统的完整显示功能

终极指南&#xff1a;5步解锁MacBook Touch Bar在Windows系统的完整显示功能 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm 还在为MacBook Pro的Touch Bar在Wind…...

三步掌握Citra模拟器:从入门到精通的高效实用指南

三步掌握Citra模拟器&#xff1a;从入门到精通的高效实用指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra Citra是一款开源的Nintendo 3DS模拟器&#xff0c;它能让你在Windows、Linux和macOS系统上流畅运行《…...

一站式B站直播录制解决方案:零基础掌握BililiveRecorder高效使用指南

一站式B站直播录制解决方案&#xff1a;零基础掌握BililiveRecorder高效使用指南 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 在数字内容爆炸的时代&#xff0c;如何永久保存喜爱的…...