| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> ARM——指令集仿真环境搭建 -> 正文阅读 |
|
[游戏开发]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程序
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/22 19:03:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |