ARM汇编,变量定义的位置不同,为什么程序时而出问题呢?
http://bbs.elecfans.com/forum.php?mod=attachment&aid=MTQ3MTE2fGRmMzEwMGFlODMwM2IzMGY5YWM1NTE5YmUxNWRiNTk5fDE1MDk2OTMwMjU%3D&request=yes&_f=.pdf
(上面的链接是本文的pdf)
例如一个求1+2+…+10的汇编程序,要求结果保存在变量SUM中.
第一次汇编程序如下:
AREA EXAMPLE_SUM,READONLY
SUM DCD 0
ENTRY
CODE32
INIT LDR R0,=10 ;R0保存求和序列中最后一个元素
MOV R1,#0X00 ;R1保存求和中间结果
W_LOOP ADD R1,R1,R0
SUBS R0,R0,#0X01
BHI W_LOOP
ADR R2,SUM ;R2指向SUM
STR R1,[R2] ;保存结果
NOP
NOP
END
程序执行到END时候就出错了呢?
如下:
(图1,还没有出错)
(图2,再往下就出错了)
(图3,显示出错提示,这是怎么回事啊?)
第二次我把变量SUM定义的地方换一个位置,程序就可以正常执行不出错,如下:
AREA EXAMPLE_SUM,READONLY
ENTRY
CODE32
INIT LDR R0,=10 ;R0保存求和序列中最后一个元素
MOV R1,#0X00 ;R1保存求和中间结果
W_LOOP ADD R1,R1,R0
SUBS R0,R0,#0X01
BHI W_LOOP
ADR R2,SUM ;R2指向SUM
STR R1,[R2] ;保存结果
NOP
NOP
SUM DCD 0
END
运行结果如下:(图片4,无错运行)
这是为什么呢?为什么变量定义位置不同,竟会导致程序出错呢?