ARM-伪操作

news2024/11/22 14:07:05

目录

协处理器指令

伪操作

安装交叉编译工具

  Makefile

进入命令:vi ASM-ARM.s

宏定义

make之后查看ASM-ARM.dis反汇编文件

预编译指令

申请一个字的空间 .word

申请多个字节空间

嵌套编程

方式一:汇编跳转到C

方式二:C跳转到汇编

方式三:C内嵌汇编


协处理器指令

  • 数据运算
  • 内存访问
  • 与主处理器通信

协处理器指令

    1.协处理器数据运算指令

CDP

      2协处理器储存器访问指令

STC 将协处理器中的数据储存到存储器

LDC 将存储器中的数据读取到协处理器中

      3.协处理器寄存器传送指令

MRC 将协处理器中寄存器的数据传送到ARM处理器中的寄存器

MCR 将ARM处理器寄存器中的数据读取到协处理器寄存器中

  • 协处理器CP15

CP15管内存的

如果ARM直接操作内存,就操作到物理内存了。

ARM不直接操作内存,arm找一个助理,这个助理是CP15。这时候ARM想访问内存怎么办?

ARM先把想访问的内存地址(虚拟地址)给CP15,CP15将这个地址转换为物理地址。然后去物理地址取数据,取出数据之后,再返给ARM

->指令

LDR R1,[R2]

->伪指令

LDR R1,=0X12345678

LDR R1,=STOP 把STOP的地址给R1

LDR R1,STOP   把STOP的地址中的内容给R1 

问:伪操作是谁规定的

伪操作

 1、不同编译器的伪操作语法不同

安装交叉编译工具

A)说明

    交叉编译工具链:arm-none-linux-gnueabi-gcc 

    注:arm-none-linux-gnueabi-:交叉编译工具链的名字,名字就是一个代号,在工作中用的不一定是这个,不同的公司用的交叉编译工具链的名字不同

B)获取

     自己去gnu官网获取交叉编译工具链的源码,自己进行编译生成对应的交叉编译工具链。不推荐:编译过程很繁琐

     直接从芯片厂家获取交叉编译工具链

     直接跟开发板的生成厂家获取交叉编译工具链

     直接找主管获取交叉编译工具链(单位)

C)安装:

  • 在ubuntu的家目录(~)下,创建toolchain 

  mkdir toolchain 

  • 拷贝gcc-4.6.4.tar.xz到toolchain目录下

cp 目录/gcc-4.6.4.tar.xz ~/toolchain

  • 解压缩交叉编译工具链

 tar -xvf gcc-4.6.4.tar.xz

  • 配置环境变量

   打开 sudo vi  /etc/bash.bashrc 

  • 在最后一行添加以下内容:

 export PATH=$PATH:/home/hq/toolchain/gcc-4.6.4/bin/

  •  修改为自己的路径
  • 使环境变量立即生效

  source /etc/bash.bashrc 

  • 测试交叉编译工具链是否安装成功

  arm-none-linux-gnueabi-gcc  -v

  • 打印以下内容,表示成功

gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002) 

 3、使用工程模板

  Makefile

  • Makefile的一些基本概念

  目标 : 依赖 命令

  • Makefile的基本工作原理

(1)当我们make xx时,Makefile会自动执行xx这个目标下的命令语句。

(2)当我们make xx时,是否执行命令是取决于依赖的,依赖如果成立才可以执行。

(3)当直接make时,和make 第一个目标 效果是一样的。第一个目标实际就是默认目标。 

  • make的依赖性

   make会一层又一层的去找文件的依赖关系。直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会退出,并报错,而对于所定义的命令的错误或是编译不成功,make根本不care。make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后边的文件还是不在,那么对不起,我就不工作啦。、

  • Makefile分析

cc编译  ld 链接 objdump反汇编 -g gdb调试 -00 表示优化 -c 表示生成目标文件

elf是编译好的链接文件 是个可执行文件

  • VI 打开文件

进入命令:vi ASM-ARM.s

宏定义

.text  @代码段
.global _start @将_start声明成一个全局的符号,其他.s文件也可以引用
_start: @汇编的入口
    .EQU PI,12 @汇编的宏定义
    MOV R1,#PI
.end 

make之后查看ASM-ARM.dis反汇编文件

预编译指令

MOV R1,#1
.if 1       @预编译:0不会编译此段  1编译此段
MOV R2,#2
.endif

申请一个字的空间 .word

MOV R1,#1
.word 0x12345678
MOV R2,#2

申请多个字节空间

MOV R1,#1
.SPACE 20,0XFF
MOV R2,#2

嵌套编程

方式一:汇编跳转到C

------------S----------
MOV R1,#1
BL Func
MOV R2,#2
------------C----------
void Func(void);编译器最后一句话会自动编译为MOV PC,LR
{
}

方式二:C跳转到汇编

------C------------ 把汇编的标号看做C的函数
extern Func1(void);
void Func(void
{
  int a;
  a++;
  Func1();
  a=0;
}
----------s--------
Func1
    MOV R1,#1
    MOV PC,LR

方式三:C内嵌汇编

-----C-----
void Func1(void)
{
    int a;
     a=1;
     asm
     {
       "MOV R1,#1\n"
       "MOV R2,#2\n"
     };
     a=2;
}
 

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

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

相关文章

2023/5/30面试小结

一、本应会但并不会的题 1.用js写一个栈 class Stack {constructor() {this.items [];}// 添加元素到栈顶push(element) {this.items.push(element);}// 移除栈顶元素并返回pop() {return this.items.pop();}// 返回栈顶元素peak() {return this.items[this.items.length - …

HashMap有哪些线程安全的处理方式(面试题)

HashMap有哪些线程安全的处理方式&#xff08;面试题&#xff09; 概念1. synchronizedMap(Map<K,V> m)2. ConcurrentHashMapConcurrentHashMap Jdk1.7 vs Jdk1.8 概念 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作&#xff0c;并允许使用 null 值和 null…

数字孪生3D可视化技术在数字化水利行业中的应用

城市供水数字孪生系统是一种基于web3d开发和数字孪生技术构建的智能运维系统&#xff0c;它可以将实际设备与虚拟模型相结合&#xff0c;实现对城市供水系统的实时监测、预测和优化。 智慧供水系统是智慧水务建设的新目标与新高度&#xff0c;能够实现城市内部原水供水以及污水…

ASEMI单向可控硅BT169D参数,BT169D规格,BT169D大小

编辑-Z 单向可控硅BT169D参数&#xff1a; 型号&#xff1a;BT169D 断态重复峰值电压VDRM&#xff1a;600V 平均通电电流IT(AV)&#xff1a;0.6A R.M.S通电电流IT(RMS)&#xff1a;0.8A 通态浪涌电流ITSM&#xff1a;10A 平均栅极功耗PG(AV)&#xff1a;0.1W 峰值门功率…

Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)

Curl 官方下载地址 可下载不同平台不同版本的安装包。 这里写目录标题 1.是什么1.1 curl1.2 bat和cmd 2.常用命令2.1 发送GET请求并显示响应头信息2.2 显示详细的请求和响应信息2.3 限制重定向次数2.4 带Json数据的Post请求发送2.5 带文件的Post请求发送2.6 使用代理服务器发送…

付费订阅故事难讲,腾讯音乐如何“过河”?

作者 | 艺馨 豆乳拿铁 排版 | Cathy 监制 | Yoda 出品 | 不二研究 腾讯音乐如何“过河”&#xff1f; 近日&#xff0c;腾讯音乐娱乐集团&#xff08;下称“腾讯音乐”&#xff0c;01698.HK&#xff09;公布了2022全年及2023年一季度财报。 腾讯音乐是一家提供在线音乐及…

使用 LangChain 和 Elasticsearch 的隐私优先 AI 搜索

作者&#xff1a;Dave Erickson 在过去的几个周末里&#xff0c;我一直在 “即时工程” 的迷人世界中度过&#xff0c;并了解像 Elasticsearch 这样的矢量数据库如何通过充当长期记忆和语义知识存储来增强像 ChatGPT 这样的大型语言模型 (LLM)。 然而&#xff0c;让我和许多其他…

波奇学STL:String入门和迭代器

目录 ​编辑 Constructor/Destructor/Operator Constructor:构造函数 Iterator:迭代器 begin()/end():迭代器像指针一样访问问函数 个人对迭代器的理解 rbegin()/rend():迭代器反向移动 除了用迭代器访问元素外string类还可以[]下标 Capacity:容量&#xff1f; s.siz…

Hystrix入门使用 服务熔断 服务降级 服务雪崩

一、概念 hystrix停止更新&#xff0c;理念优秀。 分布式系统面临的问题: 对于复杂的分布式体系&#xff0c;有数十个依赖&#xff0c;依赖不可避免的错误。 服务会出现雪崩&#xff0c;高可用受到破坏。 Hystrix就是用于解决分布式系统延迟和容错的开源库。 保证在一个依赖出…

Python五彩气球

文章目录 前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字 五彩气球气球类漂浮函数气球函数六一祝福 尾声 前言 六一要来啦&#xff0c;快来领取博主精心准备的五彩气球吧&#xff01; Turtle基础 小海龟(Turtle)是Python中画图的一…

SpringBatch历史数据的清理方案及实现

SpringBatch历史数据的清理方案及实现 需求背景 SpringBatch的程序已经运行了将近一年&#xff0c;数据量已经达到了一定的数据量级别。 对SpringBatch历史数据的清理也被提上日程。 但是SpringBatch的代码中似乎没有找到清理历史数据的代码&#xff0c;在官方文档中也没有…

一、STM32程序下载软件_FlyMCU

1、软件简介 (1)FlyMCU是一款STM32下载程序的软件。 (2)FlyMCU采用ISP下载方式。 (3)ISP&#xff1a;在线系统编程。 (4)FlyMCU支持STM32F1、STM32F2、STM32F4系列&#xff0c;其他暂不支持&#xff0c;后续应该也不会更新了。 (5)STM32芯片的ISP下载&#xff0c;只能使用…

LINUX系统编程-----中

文章目录 进程间的通信管道popen 和 pclosepipeFIFO 共享内存system V 版本的共享内存创建/获取共享内存 共享内存涉及的函数共享内存的通信两个进程同时对共享内存进行读写 信号量使用信号量保护共享资源消息队列死锁 信号内核不可中断状态 进程间的通信 管道 在操作系统中&…

【备战秋招】每日一题:4月1日美团春招(二批)第三题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Electron简单开发

文章目录 1.参考网站2.HelloWold编写2.1新建空文件夹2.2node初始化2.3安装electron依赖2.4添加.gitignore 文件2.5创建main.js文件和index.html2.6运行electron应用 3.打包 接到一个任务&#xff0c;将electron集成到solidworks中&#xff0c;所以记录一下electron的简单操作&a…

【操作系统】05.文件管理

文件管理 文件的属性 文件内部数据的组织 文件之间的组织 操作系统向上层提供功能 创建文件 删除文件 打开文件 关闭文件 读文件 写文件 文件的逻辑结构 无结构文件 有结构文件 顺序文件 文件的物理结构 磁盘块&#xff08;文件块&#xff09; 连续分配 优点 对于机…

操作系统 四、文件管理

文章目录 4.1 文件的逻辑结构4.2 文件目录4.2.1 目录结构4.2.1.1 单级目录结构4.2.1.2 两级目录结构4.2.1.3 多级目录结构4.2.1.4 无环图目录结构 4.2.2 索引结点(FCB的改进) 4.3 文件的物理结构4.3.1 连续分配4.3.2 链接分配4.3.2.1 隐式链接4.3.2.2 显式链接 4.3.3 索引分配 …

稠密点云获取方法(二)

作为高分辨率三维重建的方法之一,从单张图像生成稠密三维点云在计算机视觉领域中一直有着较高的关注度。 以下文献提出了一种针对二维和三维信息融合的方法以解决三维点云稀疏难以检测远处的目标的问题。 Multimodal Virtual Point 3D Detection 该文献提出一种将 RGB 传感器…

【Mysql】| 超详细常见bug及解决方案

目录 一. &#x1f31f; 引入话题二. &#x1f31f; 引出bug1.1 查看bug1.2 Problem Solving2.1 查看bug2.2 Problem Solving3.1 字段长度异常3.2 Problem Solving 三. &#x1f31f; 最后 一. &#x1f31f; 引入话题 MySQL是一款广泛使用的开源数据库管理系统&#xff0c;它…

小白了解Docker容器技术

一、什么是Docker&#x1f451; 有一个最常见的例子来很好的帮我们简单了解Docker容器技术&#xff1a; 当我们在一台计算机中配置好了环境&#xff0c;花费了极大的时间和精力成功开发部署好了一个应用。准备尝试在不同操作系统、不同环境下部署这个应用时&#xff0c;我们需要…