通过ARM汇编实现累加一个队列的所有元素

具体思路:先定义一个队列用来存储数据,在实现中,通过移位操作可以获知队列的长度(移位操作相比除法更加快速),同时注意在队列的存储中是一个字存储一个数据,但是移位和后面累加的操作中,队列指针的指向地址每次加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 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1f8ad14ad2e9d8c8327d5cd19131b436.html