微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > ARM汇编,变量定义的位置不同,为什么程序时而出问题呢?

ARM汇编,变量定义的位置不同,为什么程序时而出问题呢?

时间:10-02 整理:3721RD 点击:

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,无错运行)


这是为什么呢?为什么变量定义位置不同,竟会导致程序出错呢?


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top