资源描述:
《微机实验报告(含思考题)实验1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一ARM汇编基础实验1.掌握ARM汇编指令2.学习掌握C与汇编混合编程基础3.熟练使用ARM调试工具RVDS进行调试操作1.熟悉ARM汇编2.用ARM汇编实现1+2+...+N3.C调用汇编实验(实现字符串拷贝功能)4.汇编调用C实验5.ARM汇编实现冒泡算法(选做)1.ARM汇编、C语言2.RVDS工具硬件:PC机Pentium100以上软件:Windows操作系统,RVDS软件1.在汇编中使用C定义的全局变量在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。在汇编中调用C中定义的
2、全局变量,需要在汇编中IMPORT对应的全局变量。IMPORT伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义。例如:汇编文件asmfile.s想调用C文件cfile.c中定义的全局变量a,则在汇编文件asmfile.s前面要添加:IMPORTa2.在汇编中调用C的函数要在汇编中调用C文件中定义的函数,主要做两方面的工作:首先:需要在汇编中IMPORT对应的C函数名。其次:在调用该C函数之前还需要通过汇编语言传递该函数的参数。C和汇编之间的参数传递是通过ATPCS(ARMThumbProce
3、dureCallStandard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的用ARM寄存器R0-R3来进行传递,多于4个时借助栈。函数的返回值通过R0来返回。3.在C中调用汇编的函数在C中调用汇编文件中的函数,要做的主要工作有两个:一:是在C中声明函数原型,并加extern关键字;二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用movpc,lr返回。然后,就可以在C中使用该函数了。EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中
4、引用。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汇
5、编实现1+2+….n的运算。;功能:计算1+2+3+4+...+N;说明;N>=0,当N=0时结果为0,当N=1时结果为1NEQU100;定义N的值100AREAExamples,CODE,READONLY;声明代码断Examples3ENTRY;标识程序入口CODE32ARM_CODELDRSP,=0X30003F00;设置堆栈指针ADRR0,THUMB_CODE+1;BXR0;跳转并切换处理器状态LTORG;声明文字池CODE16THUMB_CODELDRR0,=N;设置子程序SUM_N的入口参数
6、BLSUM_N;调用子程序SUM_NBTHUMB_CODE;SUM_N;功能:计算1+2+3+......+N;入口参数:R0N的值;出口参数:R0运行结果;占用资源:R0;说明:当N=0时结果为0,当N=1时结果为1;若运算溢出,结果为0SUM_NPUSH{R1-R7,LR};寄存器入栈保护MOVSR2,R0;将n的值复制到R2,并影响相应条件标志BEQSUM_END;若N=0,则返回CMPR2,#1BEQSUM_END;若N=1,则返回MOVR1,#1;初始化计数器R1=1MOVR0,#0;初始化
7、计数器R0=1SUN_L1;------------------------------------------;用汇编实现算法核心部分ADDR0,R0,R1;BVSSUM_END;CMPR1,R2;BCSSUM_END;ADDR1,R1,#1;BSUN_L1;------------------------------------------SUM_ENDMOVR8,R0;将结果保存在R8中POP{R1-R7,PC};寄存器出栈,返回END2、理解C和汇编,并用汇编程序实现字符串拷贝,并在C程序中调
8、用该汇编程序。Arm汇编:;文件名:TESTFILE11.S;功能:从C语言中调用汇编语言;说明:使用ARMulate软件仿真调试AREAExample1,CODE,READONLY;声明代码段Example1CODE32;声明32位ARM指令IMPORT__mainEXPORTstrcopystrcopy;------------------------------------------LDRBR2,[R1],#1STRBR2,[R0],#1CMPR