AREA BlockData,DATA,READWRITE ;定义数据段
DATA1 DCD 2,5,0,3,-4,5,0,10,9 ;数组DATA1
DATA2 DCD 3,5,4,-2,0,8,3,-10,5 ;数组DATA2
SUM DCD 0,0,0,0,0,0,0,0,0 ;数组SUM
AREA Ex4_46,CODE,READONLY ;定义代码段
ENTRY
CODE32
START LDR R1,=DATA1 ;数组DATA1的首地址存入到R1
LDR R2,=DATA2 ;数组DATA2的首地址存入到R2
LDR R3,=SUM ;数组SUM的首地址存入到R3
MOV R0,#0 ;计数器R0的初始值置0
LOOP LDR R4,[R1],#04 ;取DATA1数组的一个数,同时修改地址指针
LDR R5,[R2],#04 ;取DATA1数组的一个数,同时修改地址指针
ADDS R4,R4,R5 ;相加并影响标志位
ADD R0,R0,#1 ;计数器加1
STR R4,[R3],#04 ;保存结果到SUM中,同时修改地址指针
BNE LOOP ;若相加的结果不为0则循环
END
如上一段是ARM处理器的汇编,用的是keil 4 mdk+jlink+TQ2440。定义两个数组,当调试的时候,把DATA1的地址加载到r1寄存器中。显示r1 = 0x40000000 但在查看内存窗口中查看0x40000000地址的内存数据时却显示的不是定义的数据2,5,0,3,-4,5,0,10,9 ,而是别的数。DATA2数组也是一样。不知道怎么回事。 |