具体思路:先定义一个队列用来存储数据,在实现中,通过移位操作可以获知队列的长度(移位操作相比除法更加快速),同时注意在队列的存储中是一个字存储一个数据,但是移位和后面累加的操作中,队列指针的指向地址每次加4还是加8主要看自己的机子是32位还是64位的机子。然后后面就是主要的实现部分了,大家应该都可以看懂。
ARM代码如下:
ARRAY_SIZE EQU 40
AREA HOMEWORK4,CODE,READWRITE
ENTRY
START
MOV R0,#0
LDR R1,=ARRAY_DATA
MOV R2,#0
MOV R3,#0
LDR R4,=RESULT
MOV R5,#ARRAY_SIZE
ADD R5,R0,R5,LSR #2
INIT
ADD R0,R0,#1
STR R0,[R1]
ADD R1,R1,#4
CMP R0,R5
BNE INIT
BEQ SUM
SUM
LDR R3,[R1]
ADD R2,R2,R3
SUB R1,R1,#4
CMP R0,#0
SUB R0,R0,#1
BNE SUM
STR R2,[R4]
BEQ STOP
STOP
B STOP
ARRAY_DATA
SPACE ARRAY_SIZE
RESULT
DCD 0
END