1微机实验报告含思考题河畔下的实验_第1页
1微机实验报告含思考题河畔下的实验_第2页
1微机实验报告含思考题河畔下的实验_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子 科技 大学实验报告学 号学生:课程名称:任课老师:实验项目名称 实验一 ARM 汇编基础实验【实验目的】掌握 ARM 汇编指令学习掌握C 与汇编混合编程基础熟练使用ARM 调试工具 RVDS 进行调试操作【实验内容】熟悉ARM 汇编用ARM 汇编实现 1+2+.+N3C 调用汇编实验(实现字符串拷贝功能)汇编调用C 实验ARM 汇编实现冒泡算法(选做)【预备知识】ARM 汇编、 C 语言RVDS 工具【实验设备和工具】硬件:PC 机 Pentium100 以上:Windows 操作系统,RVDS【实验原理】1.在汇编中使用C 定义的全局变量在汇编和C 之间进行一些数据的传递,最简便的办法

2、就是使用全局变量。在汇编中调用C 中定义的全局变量,需要在汇编中 IMPORT 对应的全局变量。IMPORT 伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义 。例如:汇编文件asmfile.s 想调用 C 文件cfile.c 中定义的全局变量 a,则在汇编文件 asmfile.s前面要添加:IMPORTa2.在汇编中调用C 的函数要在汇编中调用 C 文件中定义的函数,主要做两方面的工作:首先:需要在汇编中IMPORT 对应的 C 函数名。其次:在调用该C 函数之前还需要通过汇编语言传递该函数的参数。C 和汇编之间的参数传递是通过 ATPCS(ARM Thumb Procedure

3、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

4、 和汇编,并用汇编程序实现字符串拷贝,并在C 程序中调用该汇编程序。在汇编文件testfile1.s 中添加两行汇编代码,分别实现:拷贝源字符串的一个字节到 R2 中将拷贝的字节到目标空间注意事项:1.C 文件和汇编文件都必须加到工程中去,否则编译会报错。2.C 文件和汇编文件要拷贝到工程目录下。3、在汇编中调用C 函数。在汇编文件testfile2.s 中相应位置添加汇编代码,通过调用 c 函数 (g结果存在R8 中。)实现 1+2+3+glovb1,【实验结果和程序】1、用ARM 汇编实现 1+2+.n 的运算。;功能:计算 1+2+3+4+.+N;说明;N=0,当N=0 时结果为 0,当

5、N=1 时结果为 1N EQU 100;定义N 的值 100AREA Exles,CODE,READONLYENTRY;标识程序;代码断Exles3CODE32ARM_CODELDR SP,=0X30003F00;设置堆栈指针ADR R0,THUMB_CODE+1;BX R0LT;跳转并切换处理器状态;文字池CODE16THUMB_CODELDR R0,=N BL SUM_NB THUMB_CODE;设置子程序 SUM_N 的;调用子程序 SUM_N参数;SUM_N;功能:计算 1+2+3+N;参数:R0 N 的值;出口参数:R0 运行结果;占用资源:R0;说明:当N=0 时结果为 0,当N=

6、1 时结果为 1;若运算溢出,结果为 0SUM_NPUSH R1-R7,LR MOVS R2,R0 BEQ SUM_END CMP R2,#1BEQ SUM_END;寄存器入栈保护;将 n 的值到R2,并影响相应条件标志;若N=0,则返回;若N=1,则返回MOV R1,#1;初始化计数器 R1=1MOV R0,#0 SUN_L1;初始化计数器 R0=1;用汇编实现算法部分ADD R0,R0,R1;BVM_END;CMP R1,R2;BCM_END;ADD R1,R1,#1;B;SUN_L1SUM_ENDMOV R8,R0 POP R1-R7,PC;将结果保存在R8 中;寄存器出栈,返回END2

7、、理解C 和汇编,并用汇编程序实现字符串拷贝,并在C 程序中调用该汇编程序。Arm 汇编:;文件名:TESTFILE11.S;功能:从C 语言中调用汇编语言;说明:使用ARMulate仿真调试AREACODE32Exle1,CODE,READONLY;代码段Exle132 位ARM 指令;IMPORT mainEXPORT strcopystrcopy;LDRB R2,R1,#1STRB R2,R0,#1CMPBNER2,#0strcopyMOV;PC,LREND;文件结束C 语言:/*文件名:main.c功能:完成字符串的拷贝*/#include extern void strcopy(ch

8、ar *d ,char *s);main(void)char *srcstr = aaaa;char dststr = bbbb;prf(Before copying:n);prf( %s %sn,srcstr,dststr);strcopy(dststr,srcstr);prf(After copying: n);prf( %sn%sn,srcstr,dststr);return (0);3、在汇编中调用C 函数。Arm 汇编:;文件名:TESTFILE8.S;功能:从汇编语言中调用C 语言;说明:使用ARMulate仿真调试IMPORT gAREACODE32 ENTRYExle1,COD

9、E,READONLY;代码段Ex32 位ARM 指令le1;IMPORTglovb1START;MOV R0,#1 MOV R1,#2 MOV R2,#3LDR R3,glovb1BLgMOV R8,R0;ENDC 语言:/*文件名:main.c;文件结束功能:完成求和*/*glovb1;glovb1=10;g(a,b ,c,d)return a+b+c+d;【思考题】1、add 替换成 adds ,sub 替换成 subs影响。答:运算结果不影响 CPSR 中相应标志位的值,跳转指令因为上一步的 CPSR 的值没有改变而无法正确执行。2、mov 替换成 movne影响?答:只有在上一步计算结

10、果为不相等时才执行。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 2+4+6+.+2n:将 add r1,r1,#1 改为改为 add r1,r1,lsl#1sub r1,r1,#1add r1,r1,lsl#1.5、实验 4 中如果去除汇编代码中的“EXPORT strcopy”会现象,为什么?答:C 语言无法调用用 strcopy 函数。因为EXPORT 伪指令用于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论