序运行前的各寄存器和存储器的状态以及数据,可以看到字符串被存储在0x802c开始的地址中,每个字符占一个字节,因此可以知道,在往外读取的时候应该一次读取一个字节,R1的值是字符个数,再运行的时候,每读取一个字符,R1就加一,这样到最后就能统计到这个字符串总的字符个数。
图二是程序运行结束时的寄存器的数据,可以看到R1最后统计的字符个数是0x0c,也就是11个,而R2当前的值是0x00,也就是0结束标志,这刚好符合事先给定的字符串“HelloARM”。
f2、实验总结:实验中比较容易出错的地方就是读取字符串中的每个字符,单个字符在存储器中是以一个字节的ASCII码来存储的,所以每次读取完指针加一就好。
f合并两个有序数组到第三个数组
一、实验目的
1、熟悉掌握比较跳转结构,能在程序中对复杂的跳转结构处理的清晰明朗,设计良好的判断语句。
2、深入理解存储器中数组的存放顺序,能够按照程序给定的条件按需取出需要的数据进行处理
二、实验内容
已知BUF1中有N1个按从小到大排序的互补相等的字符号,BUF2中有N2个按从小到大排序的互不相等的字符号,将BUF1和BUF2中的数合并到BUF3中按从小到大的顺序排序,且互不相等。
三、实验主要步骤
1、打开ADS,新建一工程,再新建一个s的源文件,将其添加到工程中去,开始编写源代码。
2、链接、编译源文件,检查语法错误。
3、用debug进行调试,观察寄存器的状态,由于此处的数据量较少,因此可以点击单步运行,一直到运行到stop,在此期间观察R1R10的变化。
四、实验代码
AREAsymbolCODEREADONLYENTRYCODE32
fN1EQU10N2EQU5N3EQU15
STARTLDRR0BUF1LDRR1BUF2LDRR2BUF3MOVR30MOVR40MOVR50
LOOPIADDR6R0R3LSL2ADDR7R1R4LSL2ADDR8R2R5LSL2LDRR9R6LDRR10R7CMPR9R10BLTLOOPJBGTLOOPKBEQLOOPCMPR5N3BEQSTOP
LOOPJSTRR9R8ADDR3R31ADDR5R51ADDR3R31CMPR3N1BLTLOOPIBLOPI
LOPISTRR10R804ADDR4R41ADDR5R51ADDR7R1R4LSL2LDRR10R7CMPR4N2BLTLOPI
LOOPKSTRR10R8
fADDR4R41ADDR5R51CMPR4N2BLTLOOPIBLOPJ
LOPJSTRR9R804ADDR3R31ADDR5R51ADDR6R0R3LSL2LDRR9R6CMPR3N1BLTLOPJ
LOOPSTRR9R8ADDR3R31ADDR4R41ADDR5R51
CMPR3N1BLTLOOPIBEQLOPICMPR4N2BLTLOOPIBEQLOPJ
STOPMOVR00x18LDRR10X20026SWI0X123456
AREADataDATAREADWRITEBUF1DCD0x030x120x200x210x430x500x700x750x900x91BUF2DCD0x210x440x450x500x99BUF3DCD0x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00
END
五、实验总结与分析
1、实验分析
f实验中用到了复杂的判断和跳转,r