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

11 篇文章 1 订阅
8 篇文章 0 订阅

目录

一、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			@汇编的结束

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 在arm指令仿真实验的第4课中,主要介绍了数据处理指令、逻辑指令和移位指令的使用方法和功能。 首先,数据处理指令主要用于对数据进行基本的运算和处理。例如,ADD指令可用于将两个操作数相加,并将结果存储到目标寄存器中;SUB指令可用于将一个操作数减去另一个操作数,并将结果存储到目标寄存器中。通过对这些数据处理指令的学习和实践,我们可以掌握如何在arm指令集中进行简单的算术运算和数据处理。 其次,逻辑指令主要用于进行逻辑运算和比较操作。例如,AND指令可用于对两个操作数进行逻辑与运算,并将结果存储到目标寄存器中;OR指令可用于对两个操作数进行逻辑或运算,并将结果存储到目标寄存器中。这些逻辑指令的应用可以帮助我们理解和运用arm指令集中的逻辑运算功能。 最后,移位指令用于对数据进行位移操作。例如,LSL指令可用于将一个操作数向左进行逻辑左移,并将结果存储到目标寄存器中;LSR指令可用于将一个操作数向右进行逻辑右移,并将结果存储到目标寄存器中。通过学习和实践移位指令,我们可以灵活地对数据进行位移操作,从而增强了数据处理的灵活性和效率。 总而言之,在arm指令仿真实验的第四课中,我们学习了数据处理指令、逻辑指令和移位指令的使用方法和功能。通过掌握这些指令,我们可以更好地理解和运用arm指令集中的数据处理、逻辑运算和位移操作功能,从而提高程序的效率和灵活性。 ### 回答2: 在ARM指令仿真实验的第4课中,我们将学习关于数据传输指令的内容。数据传输指令ARM处理器非常重要的一部分,它们用于数据的读取和存储。 在本课中,我们将重点学习LDR(Load)和STR(Store)指令。LDR指令用于将数据从内存中加载到寄存器中,而STR指令则将数据从寄存器存储到内存中。 首先,我们会学习LDR指令的使用方法和一些示例。我们将探讨如何使用LDR指令将整数、浮点数和字符串等不同类型的数据加载到寄存器中。我们还会讨论如何使用加载和存储指令来访问数组和结构体等复杂的数据结构。 接下来,我们会详细讲解STR指令的使用方法。我们将学习如何使用STR指令将寄存器中的数据存储到内存中的特定位置。我们还会讨论如何使用存储指令来更新数组和结构体等复杂数据结构的值。 在实验过程中,我们将通过一些示例程序来加深对LDR和STR指令的理解。我们将使用ARM指令仿真器来执行这些程序,并通过监视寄存器和内存的方式来验证指令的正确性。 通过完成这个实验,我们将掌握如何使用LDR和STR指令来进行数据的读取和存储。这对于理解ARM处理器的工作原理和编程非常重要。这些指令也被广泛应用于各种嵌入式系统和移动设备中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇努力学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值