1、实验二 汇编语言程序设计实验 1.1 实验目的 1进一步掌握使用ADS开发、调试ARM汇编语言程序的方法; 2掌握ARM汇编语言程序的基本结构和常用的伪操作; 3掌握实现ARM汇编语言分支、循环程序结构的方法,理解指令条件码的意义和使用方法。 1.2 实验设备 硬件:PC 机一台。 软件:Windows XP系统,ADS1.2 集成开发环境。 1.3 实验内容 在ADS下编写、调试以下程序: 1求一个数的阶乘(64位结果) 用ARM汇编语言设计程序实现求20!,并将其64位结果放在R9:R8中。 2对数据区进行64位结果累加操作。 先对内存地址0x3000开始的100个字内存单元填入0x100
2、000010x10000064字数据,然后将每个字单元进行64位累加结果保存于R9:R8。 3选择排序 对一个整数数组采用选择排序算法进行排序,结果仍旧放到源数组的位置。 1.4 实验参考程序 1、求一个数的阶乘(64位结果): AREA EXP1,CODE,READONLY CODE32 ENTRY MOV R8 , #20 MOV R9 ,#0 SUB R0,R8,#1 Loop MOV R1 , R9 UMULL R8 , R9 , R0 , R8 MLA R9 , R1 , R0 , R9 SUBS R0 , R0 , #1 BNE Loop B . END 2. 对数据区进行64位结
3、果累加操作 AREA NUMBERS,DATA,READWRITE dataBuff SPACE 400 AREA LEIJIA,CODE,READONLY ENTRY CODE32 BEGIN LDR R0,= dataBuff MOV R1,#0x10000001 MOV R2,#100 loop1 STR R1,R0,#4 ADD R1,R1,#1 SUBS R2,R2,#1 BNE loop1 LDR R0,= dataBuff MOV R9,#0 MOV R8,#0 MOV R2,#100 loop2 LDR R1,R0,#4 ADDS R8,R8,R1 ADC R9,R9,#0 S
4、UBS R2,R2,#1 BNE loop2 stop B stop END 3. 选择排序 AREA Select_Sort, CODE, READONLY ; 声明代码段 Select_Sort ENTRY ; 标识程序入口 LDR R0, =Datas ; 输入数据首地址 LDR R1, =Num ; 数据个数 LDR R1, R1 Sel_Sort MOV R1, R1, LSL #2 ; 将数据个数转化为数据尾地址 SUB R1, R1, #4 ADD R1, R0, R1 SUB R0, R0, #4 Sort_L1 LDR R4, R0, #4! ; R0 表示当前位置,R4 当
5、前最小数据 TEQ R1, R0 ; 检查是否排序结束 BEQ Sort_Finish MOV R2, R0 ; R2 表示当前指针位置 MOV R3, R0 ; R3 表示当前最小数据的位置 Sort_L2 LDR R5, R2, #4! ; 取出指针所指的数据 CMP R4, R5 ; 该数据与当前最小数据比较 BLT Sort_L3 ; 如果当前所指数据小于当前最小数据 MOV R3, R2 ; 更新当前最小数据 MOV R4, R5 Sort_L3 TEQ R1, R2 ; 对当前位置的判断是否结束 BNE Sort_L2 Sort_L4 ; 如果当前位置的判断结束 TEQ R0, R
6、3 ; 检查当前最小数据的位置是否就是当前位置 BEQ Sort_L1 SWP R4, R4, R0 ; 把当前最小数据和当前位置的数据交换 STR R4, R3 B Sort_L1 Sort_Finish Stop B Stop ALIGN Datas DCD 0xAABBCC11, 0xAABBCC66, 0xAABBCC77, 0xAABBCC99, 0xAABBCC22 DCD 0xAABBCC33, 0xAABBCC55, 0xAABBCC44, 0xAABBCC88, 0xAABBCC00 Num DCD 10 END 实验报告要求: z 实验报告内容包括实验目的、实验设备、实验内容、实验结果和实验总结。 z “实验内容”部分要求通过分析三个参考程序,画出程序流程图,不要求抄写源程序代码。