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

伪操作、C和汇编、ATPCS协议

  • 一、伪操作
          • .global 全局
          • .local 局部
          • .equ 声明
          • .macro 子函数
          • .if .endif 条件编译
          • .rept 重复操作
          • .weak 弱化
          • .word 申请一个字空间
          • .byte 申请一个字节空间
          • .align 地址对齐
          • .arm ARM指令
          • .thumb Thumb指令
          • .text 代码段
          • .data 数据段
          • .space 申请N个字节空间
  • 二、C和汇编的混合编程
  • 三、ATPCS协议

一、伪操作

伪操作:不会生成代码,只是在编译之前告诉编译器怎么编译 不同的编译器伪操作也不同

GNU(gcc)的伪操作一般都以 ‘.’ 开头

.global 全局
	.global symbol@ 将symbol声明成全局符号
.local 局部
	.local symbol@ 将symbol声明成局部符号
.equ 声明
	.equ DATA, 0xFF		@ 似于#define DATA 0xFFMOV R1, #DATA
.macro 子函数
	.macro FUNCMOV R1, #1MOV R2, #2.endmFUNC		@ 调用FUNC函数
.if .endif 条件编译
	.if 0		@ 如果条件 0-假, 1-真	MOV R1, #1MOV R2, #2.endif
.rept 重复操作
	.rept 3		@ 将下面这两行代码重复执行三次MOV R1, #1MOV R2, #2.endr
.weak 弱化
	@.weak symbol@ 弱化一个符号,即告诉编译器即便没有这个符号也不要报错.weak funcB func
.word 申请一个字空间
	@ .word VALUE@ 在当前地址申请一个字的空间并将其初始化为VALUEMOV R1, #1.word 0xFFFFFFFFMOV R2, #2
.byte 申请一个字节空间
	@ .byte VALUE	@ 在当前地址申请一个字节的空间并将其初始化为VALUEMOV R1, #1.byte 0xFF
.align 地址对齐
	@ .align N@ 告诉编译器后续的代码2的N次方对其.align 4@ 下面这条指令将会从2^4 = 16,0x16地址空间开始存储MOV R2, #2
.arm ARM指令
	.arm@ 告诉编译器后续的代码是ARM指令
.thumb Thumb指令
	.thumb@ 告诉编译器后续的代码是Thumb指令
.text 代码段
	.text				@ 定义一个代码段
.data 数据段
	.data				@ 定义一个数据段
.space 申请N个字节空间
	@ .space N, VALUE@ 在当前地址申请N个字节的空间并将其初始化为VALUEMOV R1, #1.space 12, 0x12@ 32位的处理器,0x4 — 0x16 地址空间将会全部存储12MOV R2, #2

二、C和汇编的混合编程

C和汇编的混合编程原则:在哪种语言环境下符合哪种语言的语法规则

  1. 在汇编中将C中的函数当做标号处理
  2. 在C中将汇编中的标号当做函数处理
  3. 在C中内联的汇编当做C的语句来处理

方式一:汇编语言调用(跳转)C语言

汇编中:MOV R1, #1MOV R2, #2BL  func_c	@ 将会跳到C语言代码中MOV R3, #3C语言中:void func_c() {int a;}

方式二:C语言调用(跳转)汇编语言

C语言中:void func_c() {int a;FUNC_ARM();  //将会跳转到汇编指令中}
汇编中:MOV R1, #1MOV R2, #2
.global FUNC_ARM	@ 全局变量
FUNC_ARM:MOV R3, #3

方式三:C内联(内嵌)汇编
asm( “汇编指令\n” );

C语言中:void func_c(void){int a;// C内联(内嵌)汇编	asm("MOV R6, #6\n""MOV R7, #7\n");}	

三、ATPCS协议

ATPCS协议(ARM-THUMB Procedure Call Standard)

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 其它寄存器主要用于存储局部变量

相关文章:

伪操作、C和汇编、ATPCS协议

一、伪操作.global 全局.local 局部.equ 声明.macro 子函数.if .endif 条件编译.rept 重复操作.weak 弱化.word 申请一个字空间.byte 申请一个字节空间.align 地址对齐.arm ARM指令.thumb Thumb指令.text 代码段.data 数据段.space 申请N个字节空间 二、C和汇编的混合编程三、A…...

OPENCV C++(五)滤波函数+sobel边缘检测+人脸磨皮mask

滤波函数 中值滤波 medianBlur(frame, detectmat, 5); 平均滤波 blur(frame, detectmat, Size(5, 5)); 高斯滤波(最后一个是方差 越大越模糊) GaussianBlur(frame, detectmat, Size(5, 5),0); sobel的边缘检测函数 Sobel(gray, dx, CV_16S, 1, 0, 3…...

20天突破英语四级高频词汇——第②天

20天突破英语四级高频词汇~第2天加油(ง •_•)ง💪 🐳博主:命运之光 🌈专栏:英语四级高频词汇速记 🌌博主的其他文章:点击进入博主的主页 目录 20天突破英语四级高…...

【Python 学习】第一个python案例

Python的ATM机Demo 一、需要安装python环境(略) 二、ATM源码 # 初始化全局余额 money 5000# 定义初始化界面菜单函数def menu(name):"""主页面-主菜单 返回用户选择的菜单:param name: 用户名称:return: 返回菜单类型"""print(f"{name}…...

【C#学习笔记】值类型(2)

文章目录 Struct结构体类型为什么不推荐struct 元组类型可为空的值类型从可为空的值类型转换为基础类型提升的运算符如何确定可为空的值类型为什么建议少用T?装箱和取消装箱 Struct结构体类型 结构类型(“structure type”或“struct type”)是一种可封…...

【设计模式】-建造者模式

Java建造者模式:创建复杂对象的灵活构建者 在软件开发中,我们经常遇到需要创建一个复杂对象的情况。如果使用传统的构造函数进行对象创建,可能会导致构造函数参数过多,难以管理和维护。建造者模式(Builder Pattern&am…...

【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据

eeprom 说明 eeprom介绍 AT24C01A,1K串行EEPROM:内部组织16页8字节,1K需要一个7位数据字地址进行随机字寻址。AT24C02,2K串行EEPROM:内部组织32页8字节,2K需要一个8位数据字地址进行随机字寻址。AT24C04,4K串行EEPRO…...

Python OpenCV读取并显示USB UVC摄像头

1. 安装Python, 略。 2. 安装 OpenCV: pip install opencv-python 3. 预览摄像头画面脚本: import cv2cap cv2.VideoCapture(0, cv2.CAP_DSHOW)if not (cap.isOpened()):print("Could not open video device")cap.set(cv2.CAP_PR…...

针对高可靠性和高性能优化的1200V碳化硅沟道MOSFET

目录 标题:1200V SiC Trench-MOSFET Optimized for High Reliability and High Performance摘要信息解释研究了什么文章创新点文章的研究方法文章的结论 标题:1200V SiC Trench-MOSFET Optimized for High Reliability and High Performance 摘要 本文详…...

在服务器上搭建gitlab

最终效果展示: 官方文档: 安装部署GitLab服务 1.在服务器上下载gitlab wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.9.0-ce.0.el7.x86_64.rpm rpm -ivh gitlab-ce-12.9.0-ce.0.el7.x86_64.rpm 2.编辑站点位置 vim …...

Amazon Aurora Serverless v2 正式发布:针对要求苛刻的工作负载的即时扩展

我们非常兴奋地宣布,Amazon Aurora Serverless v2 现已面向 Aurora PostgreSQL 和 MySQL 正式发布。Aurora Serverless 是一种面向 Amazon Aurora 的按需自动扩展配置,可让您的数据库根据应用程序的需求扩展或缩减容量。 亚马逊云科技开发者社区为开发者…...

nginx的优化和防盗链 重要!!!

实验一、隐藏版本号 要把nginx的版本号隐藏起来,防止恶意攻击 方法一:修改配置文件 在http模块中加入一个命令 server_token off; 过程: 备份,改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens …...

十五.redis缓存穿透,击穿,雪崩

redis哨兵模式 一.缓存穿透1.概念2.解决方案1)接口校验2)缓存空值3)布隆过滤器4)实时监控 二.缓存击穿1.概念2.解决方案1)设置热点数据永不过期2)加互斥锁3)”提前“使用互斥锁 / 逻辑过期4&…...

Spring源码——初识Spring容器

Spring源码之工厂(容器) 为什么把Spring的工厂又叫做容器呢? 工厂的责任是创建对象,但是创建完对象后还要进行存储(针对于单例的对象来讲),以供其他地方使用,这就是容器。为了能存…...

arcgis--数据库构建网络数据集

1、打开arcmap软件,导入数据,如下: 该数据已经过处理,各交点处均被打断,并进行了拓扑检查。 2、在文件夹下新建文件数据库,名称为路网,在数据库下新建要素类,并导入道路shp文件&…...

华为OD机试真题【西天取经】

1、题目描述 【西天取经】 唐僧师徒四人去西天取经,一路翻山越岭。一日,师徒四人途径一个 mxn 长方形区域,已知 1.将取经队伍作为一个整体,4 人行走相同路线。 2.取经队伍的起点为该长方形区域的左上角,目的地为该长方…...

心电信号时域特征分析与Python实现

目录 1 引言 2 心电信号时域特征的含义 3 Python实现心电信号时域特征提取 4 结论 1 引言 心电信号是由心脏电活动引起的电信号...

认识MyBatis 之 MyBatis的动态SQL

前言 本篇介绍MyBatis里如何使用动态SQL,了解如何去简单使用动态标签;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言MyBatis - 动态 SQLif标签trim标签where标签update set 标签delet…...

【项目 计网2】4.4网络模型 4.5协议 4.6网络通信的过程

文章目录 4.4网络模型OSI七层参考模型TCP/IP四层模型(常用)简介四层介绍 4.5协议简介常见协议UDP协议TCP协议IP协议以太网帧协议(MAC地址封装)ARP协议(IP->MAC) 4.6网络通信的过程封装分用 4.4网络模型 …...

redis入门3-在java中操作redis

Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…...

InSpec插件生态系统:扩展框架功能的完整教程

InSpec插件生态系统&#xff1a;扩展框架功能的完整教程 【免费下载链接】inspec InSpec: Auditing and Testing Framework 项目地址: https://gitcode.com/gh_mirrors/in/inspec InSpec作为一款强大的合规性测试框架&#xff0c;其真正的威力在于其可扩展的插件生态系统…...

环境管理从未如此简单:Miniconda-Python3.9镜像快速入门指南

环境管理从未如此简单&#xff1a;Miniconda-Python3.9镜像快速入门指南 1. 为什么选择Miniconda-Python3.9镜像 Python作为当今最流行的编程语言之一&#xff0c;在数据科学、机器学习和Web开发等领域有着广泛应用。但Python环境管理一直是开发者面临的痛点之一&#xff0c;…...

CLAP音频分类环境部署:Python3.8+PyTorch+Gradio一键配置指南

CLAP音频分类环境部署&#xff1a;Python3.8PyTorchGradio一键配置指南 想不想让电脑“听懂”声音&#xff1f;比如&#xff0c;上传一段音频&#xff0c;它就能告诉你这是狗叫、猫叫还是汽车鸣笛。这听起来像是科幻电影里的场景&#xff0c;但现在&#xff0c;借助一个叫CLAP…...

PP-DocLayoutV3部署教程:requirements.txt依赖版本兼容性验证指南

PP-DocLayoutV3部署教程&#xff1a;requirements.txt依赖版本兼容性验证指南 1. 引言&#xff1a;为什么需要关注依赖兼容性 当你准备部署PP-DocLayoutV3这个强大的文档布局分析模型时&#xff0c;可能会遇到一个常见但令人头疼的问题&#xff1a;明明按照文档安装了所有依赖…...

GPU算力高效利用:Pixel Language Portal在单卡多实例部署中的资源隔离与负载均衡教程

GPU算力高效利用&#xff1a;Pixel Language Portal在单卡多实例部署中的资源隔离与负载均衡教程 1. 引言&#xff1a;为什么需要单卡多实例部署 在AI应用开发中&#xff0c;GPU资源往往是稀缺且昂贵的。Pixel Language Portal作为一款基于Tencent Hunyuan-MT-7B的高端翻译工…...

如何快速批量下载知网文献?CNKI-download自动化工具终极指南

如何快速批量下载知网文献&#xff1f;CNKI-download自动化工具终极指南 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 对于学术研究者和学生来说&#xff0c;从知网&#xff0…...

如何让Apple Touch Bar在Windows完美运行?DFRDisplayKm驱动全攻略

如何让Apple Touch Bar在Windows完美运行&#xff1f;DFRDisplayKm驱动全攻略 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm Apple Touch Bar作为MacBook Pro的特…...

3分钟让Windows文件资源管理器焕然一新:ExplorerBlurMica毛玻璃效果完全指南

3分钟让Windows文件资源管理器焕然一新&#xff1a;ExplorerBlurMica毛玻璃效果完全指南 【免费下载链接】ExplorerBlurMica Add background Blur effect or Acrylic (Mica for win11) effect to explorer for win10 and win11 项目地址: https://gitcode.com/gh_mirrors/ex/…...

SAP移动类型全解析:从收货到移库,一文搞懂库存管理核心配置

SAP移动类型实战指南&#xff1a;解锁库存管理的核心密码 当你第一次在SAP系统中执行货物移动时&#xff0c;面对上百种移动类型代码&#xff0c;是否感到无从下手&#xff1f;作为全球500强企业广泛采用的ERP系统&#xff0c;SAP的库存管理模块以其严谨性和灵活性著称&#xf…...

C++的std--allocator_traits分配器特性与自定义内存管理的适配

C标准库中的内存管理一直是个既基础又复杂的主题。std::allocator_traits作为C11引入的分配器特性模板&#xff0c;为自定义内存管理提供了统一的适配接口&#xff0c;让开发者能在不重写整套分配逻辑的情况下&#xff0c;灵活扩展内存管理策略。无论是实现高性能内存池&#x…...