ARM——指令集仿真环境搭建

news2024/11/23 12:17:36

目录

一、ARM指令集仿真环境搭建

1.1指令和指令集

指令

指令集

1.2汇编的本质

汇编

C语言

1.3为什么学习汇编

1.4仿真

硬件仿真

软件仿真

1.5Keil

1.6环境搭建

1.7汇编工程创建

二、汇编

2.1汇编中的符号

2.2ARM指令集

 2.3简单的ARM程序


一、ARM指令集仿真环境搭建

1.1指令和指令集

指令

    能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...)

    指令在内存中以机器码(二进制)的方式存在

    每一条指令都对应一条汇编

    程序是指令的有序集合

指令集

    处理器能识别的指令的集合称为指令集

    不同架构的处理器指令集不同

    指令集是处理器对开发者提供的接口

1.2汇编的本质

汇编

    > 每条汇编都会唯一对应一条机器码,且CPU能直接识别和执行

      即汇编中所有的指令都是CPU能够识别和执行的

    > 汇编中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等

      都需要自己维护

C语言

    > 每条C语句都要被编译器编译成若干条汇编指令才能被CPU识别和执行

      即C语句中的指令CPU不一定能直接识别,需要编译器进行“翻译”

    > C中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等

      都是编译器来分配和维护

1.3为什么学习汇编

1.底层开发可能会读/写汇编代码
2.理解CPU是怎样执行程序的
3.理解C的本质,用汇编的思想写出高效的C代码

1.4仿真

硬件仿真

    通过硬件接口将CPU和内存中实际的信息读出来

软件仿真

    通过软件模拟CPU内部运行程序的状态

1.5Keil

            Keil MDK是用于基于ARM Cortex-M 微控制器的完整软件开发环境。它集成了uVision IDE

    C/C++编译器、调试器以及其他中间组件,支持众多芯片供应商,易于学习和使用.

1.6环境搭建

1.安装Keil集成开发环境

2.安装gcc交叉编译工具链

3.创建汇编工程,熟悉仿真环境的使用
keil4:
链接:https://pan.baidu.com/s/14601doeTSLFJCS_fH6gDQQ?pwd=ynu7 
提取码:ynu7 
ARM-gcc_windows:
链接:https://pan.baidu.com/s/1JRPbCr46HBz9Y81vkODpvw?pwd=vrh2 
提取码:vrh2 

本来打算用mdk5试试的时间太赶了,还是用keil4吧,有感兴趣的朋友可以评论分享一下。
安装方式和安装包在上面都一起分享了。还有新建第一个汇编项目的过程。

1.7汇编工程创建

1. 在任意路径下创建一个文件夹用于后续存放我们的工程(名字任意)

2. 双击打开 Keil

3. 在 Keil 界面下单击“Project”然后单击“New uVision Project...”创建一个新的工程
 
4. 在弹出的对话框中选择工程的存储目录(选择步骤 1 创建的文件夹)然后单击“打开”
 
5. 输入要创建的工程的名字( 不要有中文),然后单击“保存”将新建的工程保存到该目录

 

6. 在弹出的对话框中选择我们要使用的处理器,因为我们是软件仿真所以这里选择一个基 于 ARM 的处理器即可;这里我们选择“Samsung”下的“S3C2410”处理器,选中后右侧 会显示该处理器的相关信息,然后单击“OK”
 
7. Keil 会为我们选择的处理器自动生成一段汇编启动代码,这里我们单击“否”不使用其 生成的启动代码
 
8. 我们新建的工程中还没有任何文件,单击“New”图标新建一个文件
 
9. 如图单击“保存”图标,然后在弹出对话框中输入文件的名字( 不要用中文,汇编代码 使用.s 后缀),然后单击保存
10. 我们虽然新建了汇编文件,但是这个文件和我们的工程并没有任何关系,所以我们需要 将我们创建的文件添加到工程中;如图先展开“Target 1”,然后右击“Source Group 1”, 然后单击“Add Files to Group ‘Source Group 1’...”

 

11. 因为默认只显示.c 文件,所以在弹出的对话框中先选择文件类型为“All Files(*.*)”,然后 选中我们创建的汇编文件,然后单击“Add”添加文件到工程,最后单击“Close”
 
12. 回到主界面展开“Source Group 1”即可看到我们的文件了,右的编辑区可以编辑文件
 
13. 因为我们要使用自己安装的 gcc 编译器,所以这里需要指定下编译器的信息,如图单击 对应的图标,在弹出的对话框中选择“Folders/Extensions”,然后勾选“Use GNU Compiler” 使用 GNU 的编译器(弹出对话框选‘是’即可),然后在“GNU-Tool-Prefix”位置输入编 译器前缀“ arm-none-linux-gnueabi-”,然后在“GNU-Tool Folder”位置选择编译器路径 “ C:\Program Files (x86)\CodeSourcery\Sourcery_CodeBench_Lite_for_ARM_GNU_Linux” 最后单击“OK”完成设置
14. 如图单击“Target Options...”图标,在弹出的对话框中单击“Linker”,设置“Text Start” 即代码的起始地址为“0x00000000”,然后单击“OK”,这样我们写的代码的起始地址就是 从 0x00000000 开始存储
15. 如图所示,在编辑区可编辑汇编代码(可参考图中进行编辑),编辑完成后单击“保存”, 然后再点击“编译”即可编译汇编代码,在对话框的下方可以看到编译信息(警告和错误), 编译无误后我们可以单击“Debug”进行程序的仿真和调试
注 1:每次修改完代码之后必须先保存再进行编译
注 2:若编译后有以下警告信息,再次单击编译即可消除
Warning: arm-asm.s: Warning: end of file in comment; newline inserted
16. 如图所示为程序仿真界面,单击“复位”可复位程序,单击“单步运行”可单步调试, 单击“Debug”可退出仿真界面,在寄存器信息栏中我们可以看到程序运行过程中寄存器中 的值,在汇编源码栏中我们可以看到程序源码以及当前程序运行的位置,在反汇编栏我们可 以看到汇编代码对应的机器码以及内存地址等信息,在内存信息栏我们可以看到指定内存地 址中的内容,还有很多其他选项这里不再一一赘述... ..

二、汇编

2.1汇编中的符号

2.2ARM指令集

 

 2.3简单的ARM程序


.text			@表示当前为代码段
.global _start	@将_start定义为全局符号
_start:			@汇编入口

	MOV R1,#1	@汇编指令
	MOV R2,#2
	MOV R3,#3
stop:			@死循环防止程序跑飞
	B stop
.end			@汇编的结束

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

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

相关文章

Cyanine5 NHS ester |分子量:616.19|分子式:C36H42ClN3O4

Cyanine5 NHS ester |分子量:616.19|分子式:C36H42ClN3O4 外观:暗蓝色粉末 分子量:616.19 分子式:C36H42ClN3O4 溶解性:易溶于有机溶剂(DMF,DMSO和氯化物),难溶于水 …

Mob社会化分享集成ShareSDK

如何在项目已经集成 SMSSDK 的情况下集成 ShareSDk 到项目中,需要使用创建 module 的方式引入 ShareSDk,主要内容如下: 1.下载ShareSDK 2.引入 ShareSDK 3.创建 MainLibs Module 4.创建 OneKeyShare Module 5.在项目中引入 Module 6.配…

Unity Addressables资源管理 主设置面板

Addressables资源管理总目录 0.主设置菜单位置 位置1 位置2 1.Profiles 路径配置选项 这个是全局路径配置的选择 可以点击 Manager Profiles 打开路径配置面板 打包路径设置 2.Diagnostics 诊断设置 Send Profiler Events 打开这个选项,才能在Event Viewer窗口…

记录java枚举类在数据库、前后端交互时的序列化方式

实体类枚举属性持久化到数据库 1.EnumValue 2.配置 mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler 或 mybatis-plus:typeEnumsPackage: xxx 实体类中枚举属性自动转为EnumValue标记的属性值 从数据…

C++数学与算法系列之排列和组合

1. 前言 本文将聊聊排列和组合,排列组合是组合学最基本的概念,在程序运用中也至关重要。 排列问题:指从给定个数的元素中取出指定个数的元素进行排序。 组合问题:指从给定个数的元素中仅仅取出指定个数的元素,不排序…

Docker镜像

镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。 只有通过这…

【设计模式】工厂方法模式Factory(Java)

文章目录1. 定义2. 类图3. Java实现案例3.1 抽象类:Pizza和PizzaStore3.2 具体披萨:北京两种上海两种共四种3.3 具体披萨店:北京店和上海店3.4 测试主方法1. 定义 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类…

基于JAVA的XX公司固定资产管理系统的设计与实现

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 本课题研究对象是中小企业财务管理系统,设计采用自己开发实践和所学知 识,系统部分主要分为以下…

汽车主机厂Adams/Car悬架动力学开发最全攻略

​​​​​​​一、写在前面 实际经历告诉我们,当我们接触一个新事物或学习一项新的技能时,入门往往是最为困难的,迷茫、彷徨、无助…… 正是基于同样的经历,在掌握Adams/Car软件的应用后,作者即开始构思如何将自己的…

论文投稿指南——中文核心期刊推荐(电工技术)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

linux后台自定义后台服务service(已filebeat举例)

文章目录一、配置攥写1)安装filebeat和配置相关修改2)常用命令二、启动顺序1)命令循序2)systemctl添加自定义系统服务(服务填写指南)3)linux的systemctl命令详解及使用教程三、遇到的坑点和报错…

One-Hot 独热编码

1. 什么是独热编码 独热编码,又称一位有效编码。采用N位状态寄存器来对N个状态进行编码,直观来说就是有多少个状态就有多少比特,除了有效的比特为1外,其他都为0. 2. 独热编码过程 (1)将分类值映射到整数…

Simulcast与SVN

什么是Simulcast: 一个客户端向服务器发送高清,标清,低清三种视频流,服务器根据其他接收客户端的带宽情况分发不同的视频流。Simulcast不仅有客户端的工作,还有服务器的工作。 开启Simulcast的三种方式: Munging SDP方式 添加assr…

网络实验①——同Vlan下相互通信

实验要求: pc0与pc1互通pc2与pc3互通实验步骤: A交换机配置: enable config t hostname switch-A vlan 10 vlan 20 exit interface f0/1 switch access vlan 10 no shutdown interface f0/2 switch access vlan 20 no shutdown interface f0/…

无线耳机哪个品牌好一点?真无线蓝牙耳机推荐品牌

蓝牙耳机随着近几年的快速发展,已经成为了人们外出时必不可少的数码产品之一。而现如今,市面上的蓝牙耳机品牌众多,挑选起来让人眼花缭乱,人们在选择时不免陷入纠结。那么,无线耳机哪个品牌好一点?下面&…

day23【代码随想录】翻转二叉树、对称二叉树、相同的树、另一棵树的子树、完全二叉树的结点个数

文章目录前言一、翻转二叉树(力扣226)1、递归法1、使用前序遍历2、使用后序遍历2、迭代法1、层序遍历二、对称二叉树(力扣101)三、相同的树(力扣100)四、另一棵树的子树(力扣572)五、…

[附源码]Nodejs计算机毕业设计教师信息采集系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

docker容器中DPDK对网卡SR-IOV支持实验

主要是验证下容器运行DPDK,如何对SR-IOV进行支持 1 VF创建方法 在未开启SR-IOV时,通过DPDK提供的./dpdk-devbind.py脚本可知,当前系统一共有一块82599网卡,拥有2个网口,PCI的地址是18:00.0和18:00.1,如下图所示 启用…

华为配置动态路由ISIS协议

华为配置动态路由ISIS协议一、路由基础知识二、路由器配置接口IP地址(一)配置R1、R2、R3网络(二)配置R1、R2、R3环回网络接口(三)测试直连网络三、启动进程号,配置实体名称(一&#…

JVM之堆

堆的基本内容: Java堆(Java Heap)是虚拟机所管理的内存中最大的一块,Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,Java 世界里“几乎”所…