ImageVerifierCode 换一换
格式:PPT , 页数:40 ,大小:2.84MB ,
资源ID:9024754      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-9024754.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理第一次实验.ppt)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

微机原理第一次实验.ppt

1、1,1,实验一 ARM汇编基础实验,2,2,一、实验目的,1. 掌握ARM汇编指令2. 学习掌握C与汇编混合编程基础3. 熟练使用ARM调试工具RVDS进行调试操作,3,3,二、实验内容,1熟悉ARM汇编2用ARM汇编实现1+2+.+N3C调用汇编实验(实现字符串拷贝功能)4汇编调用C实验5ARM汇编实现冒泡算法(选做),4,4,三、预备知识,1. ARM汇编、 C语言2. RVDS工具,5,5,四、实验设备与工具,硬件:PC 机Pentium100 以上软件:Windows操作系统,RVDS软件,6,6,五、实验原理,ARM中的C和汇编混合编程:1. 在汇编中使用C定义的全局变量2. 在汇编

2、中调用C的函数3. 在C中调用汇编的函数,7,7,汇编语言中使用C定义的全局变量,1. 在汇编中使用C定义的全局变量在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。 在汇编中调用C中定义的全局变量,需要在汇编中IMPORT 对应的全局变量。 IMPORT 伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义 。 例如:汇编文件asmfile.s想调用C文件cfile.c中定义的全局变量a,则在汇编文件asmfile.s前面要添加:IMPORT a,8,8,汇编中调用C函数,2. 在汇编中调用C的函数要在汇编中调用C文件中定义的函数,主要做两方面的工作: 首先:需要在汇编中

3、IMPORT 对应的C函数名。 其次:在调用该C函数之前还需要通过汇编语言传递该函数的 参数。C和汇编之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的使用ARM寄存器R0-R3来进行传递,多于4个时需要借助栈。函数的返回值通过R0来返回。,9,9,/*asmfile */ AREA asmfile, CODE, READONLY IMPORT cFunENTRYMOV R0, #22 MOV R1, #11 BL cFun MOV R4, R0 ; 函数返回值在R0中 END/*C

4、file, called by asmfile */ int cFun ( int a, int b ) return a - b; ,10,10,C中调用汇编函数,3.在C中调用汇编的函数在C中调用汇编文件中的函数,要做的主要工作有两个: 首先:是在C中声明函数原型,并加extern关键字; 其次:是在汇编中用EXPORT导出函数名,并用该函数名作为汇 编代码段的标识,最后用mov pc, lr返回。然后,就可以在C中使用该函数了。EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。,11,/*C file*/ extern void fun ( int *p );

5、 声明函数原型 int main ( ) int i; fun ( 返回语句END,C中调用汇编函数,12,RVDS简单使用介绍,13,创建新工程,步骤:1、点击开始菜单中的CodeWarrior for RVDS 打开 CodeWarrior IDE 主窗口;2、选择File-New进入“新建工程/文件“选项卡;3、在选项卡中选择ARM Executable Image;4、在Project name中输入新建工程的名字;5、在Location中选择工程文件的存放路径,如图35所示,按下确定后,RVDS将生成用户指定名称的工程。,14,14,图35,15,添加文件到工程,新建文件:1、选择F

6、ile-New进入“新建工程/文件”选项卡;2、点击选项卡中的File选项,选择Text File;3、在File name中填写要添加的文件名,在Location中选择该文件的保存路径;4、选中Add to Project选项;5、在下面的Project选项中选择上一步新建的工程;6、在Targets选项中选择Debug和Release,然后点击“确定”,具体如图36所示。,16,16,图36,17,17,图37,添加已有文件:在File工作区中点右键,选择Add Files,如图37所示。,18,18,设置工程配置选项,选择Edit-Debug Settings或是按“ALT+F7”进入工

7、程配置界面,并进行如下配置:1、选择配置界面下的Language Setting-Realview Assembler对RVDS下的汇编器进行配置,主要选择Architecture(即ARM架构类型)如图38所示。,19,19,设置工程配置选项,图38,20,20,设置工程配置选项,2、选择配置界面下的Language Setting-Realview Compiler对RVDS下的C编译器进行配置,主要选择Architecture。,图39,21,21,设置工程配置选项,3、选择配置界面下的Linker-Realview Linker对RVDS下的连接器进行配置,主要配置RO Base,设置

8、生成的可执行程序的下载地址。,图40,22,22,设置工程配置选项,4、选择配置界面下的Debugger-Realview Debugger对RVDS下的调试器进行配置,主要是选择RVD还是ADS环境下的调试器AXD进行调试。,图41,23,23,编译并连接,源程序编写好后,选择Project-Make或是快捷键“F7”对工程中的源文件进行编译并连接,生成带调试信息的可执行文件.axf文件。,图42,24,24,调试,选择Project-Debug或是快捷键“F5”启动RVD调试器,并调用生成带调试信息的可执行文件.axf文件。,图43,25,25,RVD调试器界面,图44为RVD界面,选择T

9、arget-Connect to target进入仿真器的选择。,图44,26,26,图45,选择ARMulator即为软件仿真,选择H-JTAG即为硬件调试。,27,27,单步调试和运行,选择Debug-Step Into或是“F11”即可单步运行,可以对源程序进行单步调试,也可以选择Debug-Run或是“F5”直接运行该程序。,图46,28,28,观察寄存器和内存,选择View-Registers就可以调用ARM寄存器界面,可以在调试过程中随时查看ARM寄存器的值;选择View-Memory可以调用内存界面,可以在调试过程中随时查看内存中的值。,图47,29,六、实验内容,1、运行RVD

10、S,建立工程文件,单步运行演示示例程序,深刻理解每一条指令,观察寄存器,内存空间的变化。此处提供六个示例实验:1)ARM数据处理指令寻址方式实验(必做)2)ARM内存访问指令寻址方式实验(必做)3)ARM堆栈指针寄存器实验(选做)4)ARM程序计数器实验(选做)5)ARM程序状态寄存器实验(选做)6)ARM工作模式切换实验(选做)请在剩余时间或课后完成选做内容。,30,寄存器读写实例,LDR指令执行前R0存放00000000,LDR指令执行后R0存放001000000,R0,31,大端模式与小端模式,小端模式:CPU对操作数的存放 采用低地址存放低字节,高地址存放高字节。大端模式CPU对操作数

11、的存放 采用低地址存放高字节,高地址存放低字节。,本实验采用小端模式。,32,写内存,STMIA指令把 R1-R3写到R0开始的地址,内存读写实例,写内存,STMIA指令执行前,33,寄存器读写实例,寄存器赋值前,寄存器赋值后,双击该位置,输入地址,然后回车,查看对应地址存储的数据值。,34,把R0(0x210000)开始的6个字读到R1-R5,R7,内存读写实例,LDMIA指令执行前,35,35,实验一,2、用ARM汇编实现1+2+.n的运算。在sum.s文件中,用汇编实现算法核心部分,需添加的代码参考流程图如下:,R0暂存累加和,R1自增1,36,36,3、理解C和汇编,并用汇编程序实现字

12、符串拷贝,并在C程序中调用该汇编程序。 在汇编文件testfile1.s中添加两行汇编代码,分别实现:(1)拷贝源字符串的一个字节到R2中;(2)将拷贝的字节复制到目标空间。注意事项: 1)C文件和汇编文件都必须加到工程中去,否则编译会报错。 2)C文件和汇编文件要拷贝到工程目录下。,实验二,37,37,4、在汇编中调用C函数。在汇编文件testfile2.s中相应位置添加汇编代码,通过调用C函数 g( ) ,实现1+2+3+glovb1,结果存在R8中。,实验三,38,38,5、用ARM汇编实现冒泡算法。(选做) 这种方法的基本思想:是将待排序的元素看作是竖着排列的“气泡”,较大的元素比较重

13、,从而要往下沉。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自上向下检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最重”的元素就沉到了最低位置;处理二遍之后,“次重”的元素就沉到了次低位置。在作第二遍处理时,由于最低位置上的元素已是“最重”元素,所以不必检查。一般地,第i遍处理时,不必检查第i低位置以下的元素,因为经过前面i-1遍的处理,它们已正确地排好序。,实验四(选做),39,冒泡排序算法流程图(参考) -较小的数值排放到后面,40,40,七、思考题,1、add替换成adds ,sub替换成subs有什么影响。 2、mov替换成movne有什么影响? 3、STMIA换成STMIB ,STMIA换成STMDA有什么区别。 4、思考用ARM汇编实现1+3+5+.+(2n+1)或者2+4+6+2n。 5、实验4中如果去除汇编代码中的“EXPORT strcopy”会有什么现象,为什么? 6、实验5中如果去除汇编代码中的“IMPORT ” 会有什么现象,为什么?,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报