第三章 软件作业习题
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 MOVEQ R1,#0 STR R1,[R0] CEASE
BCEASE END
;R1 比 R2小 ; 两个数相等
5、存储器从0x400000开始的100个单元中存放着ASCII码,编写程 序,将其所有的小写字母转换成大写字母, 对其它的ASCII码不做变
换。 解:
AREA procedure5,CODE,READONL Y ENTR Y CODE32 START
MOV R0,#0x400000 MOV R1,#0
LOOP LDRB R2,[R0,R1]
CMP R2,#0x61 ;与‘a'比较
小于转到BLO NEXT
NEXT ;0x7A 为 CMP R2,#0x7B
‘z' SUBLO R2, R2,#0x20
;小于转换 STRBLO R2,[R0,R1];
小于保存 NEXT
ADD R1,R1,#1
CMP R1,#100 BNE LOOP CEASE
BCEASE END
6、编写一程序,查找存储器从0x400000开始的100个字中为0的数 目,将其结果存到0x400190中。
解:
AREA procedure6,CODE,READONLY ENTR Y
CODE32 START
MOV RO , #0x400000
MOV R7, #100
MOV R1, #0 LOOP
LDR R2 , [R0] , #4
CMP R2, #0
ADDEQ R1, R1, #1 SUBS R7, R7, #1
BNE LOOP
STR R1 , [R0]
CEASE BCEASE
END
;控制循环变量 ;保存0的数目 ;取数 ;比较为0 为0加1 修改控制变量 ;保存0的数目
7、编写一程序,存储器中从 0x400200开始有一个64位
数。(1) 将取反,再存回原处;
(2) 求其补码,存放到0x400208
处。 解:
AREA procedure7,CODE,READONL Y ENTR Y CODE32
START
LDR R0 =0x400200
LDR R2,=0xFFFFFFFF ;取低32位数 LDR R1,[R0]
CEASE
EOR R1,R1, R2
STR R1,[R0] ADDS R1,R1, #1 STR R1,[R0, #8] LDR R1,[R0, #4] EOR R1,R1, R2 STR R1,[R0, #4] ADC R1,R1, #0 STR R1,[R0, #12]
;取反
;存低32位反码 又加1为求补 ;存低32位补码 ;取高32位数 ;取反
;存高32位反码 ;高32位求补 ;存高32位补码
BCEASE END
8编写一简单ARM匚编程序段,实现1+2+…+100的运算 解:
AREA procedure8,CODE,READONLY ENTR Y 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
控制循环 中为累加和