打印

从第一汇编程序引出的问题

[复制链接]
1080|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fangling87|  楼主 | 2008-11-5 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是《arm嵌入式系统基础教程》的一个示例。
; 文件名:TEST1.S
; 功能:实现两个寄存器相加
; 说明:使用ARMulate软件仿真调试
                    AREA     Example1,CODE,READONLY    
            ENTRY    
            CODE32  
START               MOV     R0,#0                    
            MOV     R1,#10
LOOP                BL     ADD_SUB                    
            B        LOOP                    

ADD_SUB
            ADDS     R0,R0,R1                
            MOV     PC,LR                      
            
            END                             
这个程序是无限执行的。
问题:如果将B        LOOP改为BPL       LOOP    程序还是无限执行。当R0=R0+R1执行了一定时间后一定会使条件码0100(即N=1),那么根据条件就不会执行
BPL     LOOP    ,也就是不会执行子程序ADD_SUB了。但是根据编译运行还是无限制执行同时还执行子程序ADD_SUB。我就不明白。希望各位朋友帮我明白其中的原因。谢谢!!!

相关帖子

沙发
kinglead| | 2008-11-6 17:22 | 只看该作者

我觉得应该是程序流程的问题

下面的是我改的程序,是可以正常结束的。所以我觉得楼主的程序中是因为即使程序跳出了loop还是会接下来执行add_sub部分,然后会把N标志清掉,程序会一直循环。
程序:
AREA     Example1,CODE,READONLY    
            ENTRY    
            CODE32  
START               MOV     R0,#0                    
            MOV     R1,#10
LOOP                BL     ADD_SUB                    
            BPL     LOOP                    
            B       STOP                    

STOP;这段程序也是我从ADS例程里偷来的,不知道是如何工作的,只知道这样就正常退出程序了。
            MOV     R0, #0x18                      
            LDR     R1, =0x20026                      
            swi     0x123456                      

ADD_SUB
            ADDS     R0,R0,R1                
            ADDS     R1,R0,R1                
            MOV     PC,LR                      
            END  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝