ARM——内存读写示例

.global _start
/*3 先对内存地址0xB000开始的100个字内存单元填入0x10000001~0x10000064字数据,然
后将每个字单元进行64位累加结果保存于[ R9:R8 ]中. (R9存放高位)*/
@ Author: DavidMahone
@ Date: 2010-10-02

_start:
    MOV R0,#0xB000    @ R0 = 0xB000存放基地址
    MOV R1,#0x10000000
 
    MOV R2,#0    @ R2为计数器
    MOV R3,#0x64    @ R3 = 100为循环中止条件
    MOV R5,#0    @用以存储比较结果
 
    MOV R8,#0    @ 存放结果低32位
    MOV R9,#0    @ 存放结果高32位

flag:
    ADD R2,R2,#1    @ R2++
    ADD R1,R1,#1    @ R1++
    STR R1,[R0],#4  @ R1 ——> Mem32[R0]  R0 += 4
  
    ADDS R8,R8,R1    @ R8 <—— R8 + R1
    ADC R9,R9,#0     @ 若上式产生进位,则R9 <—— R9 + C标志位
  
    SUBS R5,R3,R2    @ 当R5 = 0,即 R2达到100时,循环中止,跳出flag
    ADRNE PC,flag   @ 或者BNE flag
    B .   @程序在此处循环
.end

你可能感兴趣的:(ARM——内存读写示例)