嵌入式系统原理及应用第三章习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章软件作业习题
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