




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 ARM汇编基础实验 1.掌握ARM汇编指令 2.学习掌握C与汇编混合编程基础 3.熟练使用ARM调试工具RVDS进行调试操作 1熟悉ARM汇编 2用ARM汇编实现1+2+.+N 3C调用汇编实验(实现字符串拷贝功能) 4汇编调用C实验 5ARM汇编实现冒泡算法(选做) 1. ARM汇编、 C语言 2. RVDS工具 硬件:PC 机Pentium100 以上 软件:Windows操作系统,RVDS软件 1.在汇编中使用C定义的全局变量 在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。 在汇编中调用C中定义的全局变量,需要在汇编中IMPORT 对应的全局变量。 IMPORT 伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义 。 例如:汇编文件asmfile.s想调用C文件cfile.c中定义的全局变量a,则在汇编文件asmfile.s前面要添加: IMPORT a 2.在汇编中调用C的函数 要在汇编中调用C文件中定义的函数,主要做两方面的工作: 首先:需要在汇编中IMPORT 对应的C函数名。 其次:在调用该C函数之前还需要通过汇编语言传递该函数的 参数。 C和汇编之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的用ARM寄存器R0-R3来进行传递,多于4个时借助栈。函数的返回值通过R0来返回。 3.在C中调用汇编的函数 在C中调用汇编文件中的函数,要做的主要工作有两个: 一:是在C中声明函数原型,并加extern关键字; 二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇 编代码段的标识,最后用mov pc,lr返回。然后,就可以 在C中使用该函数了。 EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。 1、用ARM汇编实现1+2+.n的运算。 2、理解C和汇编,并用汇编程序实现字符串拷贝,并在C程序中调用该汇编程序。 在汇编文件testfile1.s中添加两行汇编代码,分别实现: 拷贝源字符串的一个字节到R2中 将拷贝的字节复制到目标空间 注意事项: 1.C文件和汇编文件都必须加到工程中去,否则编译会报错。 2.C文件和汇编文件要拷贝到工程目录下。 3、在汇编中调用C函数。 在汇编文件testfile2.s中相应位置添加汇编代码,通过调用c函数g()实现1+2+3+glovb1,结果存在R8中。 1、用ARM汇编实现1+2+.n的运算。 ;功能:计算1+2+3+4+.+N ;说明;N=0,当N=0时结果为0,当N=1时结果为1 N EQU 100 ;定义N的值100 AREA Examples,CODE,READONLY ;声明代码断Examples3 ENTRY ;标识程序入口 CODE32 ARM_CODE LDR SP,=0X30003F00 ;设置堆栈指针 ADR R0,THUMB_CODE+1 ; BX R0 ;跳转并切换处理器状态 LTORG ;声明文字池 CODE16 THUMB_CODE LDR R0,=N ;设置子程序SUM_N的入口参数 BL SUM_N ;调用子程序SUM_N B THUMB_CODE ;SUM_N ;功能:计算1+2+3+.+N ;入口参数:R0 N的值 ;出口参数:R0 运行结果 ;占用资源:R0 ;说明:当N=0时结果为0,当N=1时结果为1 ;若运算溢出,结果为0 SUM_N PUSH R1-R7,LR ;寄存器入栈保护 MOVS R2,R0 ;将n的值复制到R2,并影响相应条件标志 BEQ SUM_END ;若N=0,则返回 CMP R2,#1 BEQ SUM_END ;若N=1,则返回 MOV R1,#1 ;初始化计数器R1=1 MOV R0,#0 ;初始化计数器R0=1 SUN_L1 ;- ;用汇编实现算法核心部分 ADD R0,R0,R1; BVS SUM_END; CMP R1,R2; BCS SUM_END; ADD R1,R1,#1; B SUN_L1 ;- SUM_END MOV R8,R0 ;将结果保存在R8中 POP R1-R7,PC ;寄存器出栈,返回 END 2、理解C和汇编,并用汇编程序实现字符串拷贝,并在C程序中调用该汇编程序。 Arm汇编: ;文件名:TESTFILE11.S ;功能:从C语言中调用汇编语言 ;说明:使用ARMulate软件仿真调试 AREA Example1,CODE,READONLY ;声明代码段Example1 CODE32 ;声明32位ARM指令 IMPORT _main EXPORT strcopy strcopy ;- LDRB R2,R1,#1 STRB R2,R0,#1 CMP R2,#0 BNE strcopy MOV PC,LR ;- END ;文件结束 C语言: /* 文件名:main.c 功能:完成字符串的拷贝 */ #include extern void strcopy(char *d ,char *s); int main(void) char *srcstr = aaaa; char dststr = bbbb; printf(Before copying:n); printf( %s %sn,srcstr,dststr); strcopy(dststr,srcstr); printf(After copying: n); printf( %sn %sn,srcstr,dststr); return (0); 3、在汇编中调用C函数。 Arm汇编: ;文件名:TESTFILE8.S ;功能:从汇编语言中调用C语言 ;说明:使用ARMulate软件仿真调试 IMPORT g AREA Example1,CODE,READONLY ;声明代码段Example1 CODE32 ;声明32位ARM指令 ENTRY IMPORT glovb1 START ;- MOV R0,#1 MOV R1,#2 MOV R2,#3 LDR R3,glovb1 BL g MOV R8,R0 ;- END ;文件结束 C语言: /* 文件名:main.c 功能:完成求和 */ int *glovb1; glovb1=10; int g(int a, int b ,int c,int d) return a+b+c+d; 1、add替换成adds ,sub替换成subs有什么影响。 答:运算结果不影响CPSR中相应标志位的值,跳转指令因为上一步的CPSR的值没有改变而无法正确执行。 2、mov替换成movne有什么影响? 答:只有在上一步计算结果为不相等时才执行。 3、STMIA换成STMIB ,STMIA换成STMDA有什么区别。 答:第一个是将每次写入前地址+4改为地址-4,第二个是将每次写入前地址+4改为+1 4、思考用ARM汇编实现1+3+5+.+(2n+1)或者2+4+6+.+2n。 答:实现1+3+5+.+(2n+1): 将 add r1,r1,#1 改为 add r1,r1,lsl #1 sub r1,r1,#1 2+4+6+.+2n: 将 add r1,r1,#1 改为 add r1,r1,lsl #1 . 5、实验4中如果去除汇编代码中的“EXPORT strcopy”会有什么现象,为什么? 答:C语言无法调用用strcopy函数。因为EX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医院行政岗笔试考试题及答案
- Unit 5 Music说课稿-2025-2026学年高中英语人教新课标必修二-人教新课标2004
- 2025年3月茶艺师中级复习题与答案
- 2025届广东省云浮市云城区高三年级上册起调研模拟测试(一)历史试题(解析版)
- 2025年能源工程考试题目及答案
- 2025年高考上海物理试题+解析
- 小班幼师演讲题目及答案
- 2025汽车租赁合同范本示范
- 常州初三数学考试卷子及答案
- 2025房产交易买卖合同模板
- 中建动臂塔吊爬升方案
- 2024年成人高考成考(专升本)艺术概论试卷与参考答案
- CHINET2024年上半年细菌耐药监测结果
- 《ROS机器人操作系统基础》 课件全套 劳动 项目1-8 ROS 机器人操作系统的认知-机器人仿真环境搭建与仿真操作
- 个人信访材料模板范文
- 解读国有企业管理人员处分条例(2024)课件(全文)
- DL∕T 1870-2018 电力系统网源协调技术规范
- (完整版)中华民族的爱国主义传统
- 卫生技术人员到基层服务考核鉴定表
- 小学作息时间、课程表
- 小学语文四年级下册语文修改病句60题练习及答案
评论
0/150
提交评论