发布时间 : 星期六 文章嵌入式系统原理及应用第三章习题更新完毕开始阅读
第三章 软件作业习题
3、将存储器中0x400000开始的200字节的数据,传送到0x400800开始的区域。 解:
AREA procedure3,CODE,READONLY
ENTRY CODE32 START
MOV R0,#0x400000 LDR R1,=0x400800 MOV R7,#200
LOOP LDRB R2,[R0],#1 STRB R2,[R1],#1
SUBS R7,R7,#1
BNE LOOP CEASE
B CEASE END
4、编写程序,比较存储器中0x400000和0x400004两无符号字数据的大小,并且将比较结果存于0x400008的字中,若两数相等其结果记为0,若前者大于后者其结果记为1,若前者小于后者其结果记为-1。 解:
AREA procedure4,CODE,READONLY ENTRY CODE32 START
MOV R0,#0x400000
LDR R1,[R0],#4 ;取第1个数 LDR R2,[R0],#4 ;取第2个数
CMP R1,R2 ;将两个数相比较 MOVHI R1,#1 ;R1比R2大
MOVLO R1,#-1 ;R1比R2小 MOVEQ R1,#0 ;两个数相等 STR R1,[R0]
CEASE
B CEASE END
5、存储器从0x400000开始的100个单元中存放着ASCII码,编写程序,将其所有的小写字母转换成大写字母,对其它的ASCII码不做变换。 解:
AREA procedure5,CODE,READONLY ENTRY CODE32 START
MOV R0,#0x400000 MOV R1,#0
LOOP LDRB R2,[R0,R1]
CMP R2,#0x61 ;与‘a’比较 BLO NEXT ;小于转到NEXT CMP R2,#0x7B ;0x7A为‘z’ SUBLO R2, R2,#0x20 ;小于转换 STRBLO R2,[R0,R1] ;小于保存 NEXT
ADD R1,R1,#1 CMP R1,#100 BNE LOOP
CEASE
B CEASE END
6、编写一程序,查找存储器从0x400000开始的100个字中为0的数目,将其结果存到0x400190中。 解:
AREA procedure6,CODE,READONLY ENTRY
CODE32 START
MOV R0,#0x400000
MOV R7,#100 ;控制循环变量 MOV R1,#0 ;保存0的数目 LOOP
LDR R2,[R0],#4 ;取数 CMP R2,#0 ;比较为0 ADDEQ R1,R1,#1 ;为0加1
SUBS R7,R7,#1 ;修改控制变量 BNE LOOP
STR R1,[R0] ;保存0的数目
CEASE
B CEASE END
7、编写一程序,存储器中从0x400200开始有一个64位数。 (1)将取反,再存回原处;
(2)求其补码,存放到0x400208处。 解:
AREA procedure7,CODE,READONLY ENTRY CODE32 START
LDR R0,=0x400200
LDR R2,=0xFFFFFFFF
LDR R1,[R0] ;取低32位数 EOR R1,R1,R2 ;取反
STR R1,[R0] ;存低32位反码 ADDS R1,R1,#1 ;又加1为求补 STR R1,[R0,#8] ;存低32位补码 LDR R1,[R0,#4] ;取高32位数 EOR R1,R1,R2 ;取反
STR R1,[R0,#4] ;存高32位反码 ADC R1,R1,#0 ;高32位求补 STR R1,[R0,#12] ;存高32位补码 CEASE
B CEASE END
8、编写一简单ARM汇编程序段,实现1+2+…+100的运算。 解:
AREA procedure8,CODE,READONLY ENTRY CODE32 START
MOV R2,#100 MOV R1,#0 LOOP
ADD R1,R1,R2 ;R1 SUBS R2,R2,#1 ;R2 BNE LOOP
CEASE
B CEASE END
中为累加和 控制循环