ARM中局部标号的跳转问题

2019-07-16 09:37发布

添加RW数据初始化程序断后,完整的程序代码如下:   
;正文段=========================================================================
     AREA EXP6_1,CODE,READONLY
     ENTRY
     ARM
     ;数据区初始化代码段---------------------------------------------------------------
     IMPORT|Image$$RO$$Limit|
     IMPORT|Image$$RW$$Base|
     IMPORT|Image$$ZI$$Base|
     IMPORT|Image$$ZI$$Limit|
     LDR RO,=|Image$$RO$$Limit|            ;初始化数据首地址送RO
     LDR R1,=|Image$$RW$$Base|             ;RW区首地址送R1
     LDR R3,=|Image$$ZI$$Base|             ;ZI区首地址送R3

     CMP RO,R1
     BEQ %F1
0
     CMP R1,R3
     LDRCC R2,[R0],#4
     STRCC R2,[R1],#4
     BCC %B0
1
     LDR R1,=|Image$$ZI$$Limit|
     MOV R2,#0
2
     CMP R3,R1
     STRCC R2,[R3],#4
     BCC %B2
     ;用户逻辑代码段---------------------------------------------------------------
     LDR R0,=DATA1
     LDR R1,[R0]   
     LDR R3,=0x55555555
HALT
     B HALT
    ;静态数据区===================================================================
    AREA EXP6_1DT,DATA,READWRITE
DATA1  DCD 0x88888888
       DCD 0x99999999
    END  

问题:
程序运行到
CMP R0,R1
BEQ %F1
后如果R0=R1,跳转到局部标号1的段落后,执行完
LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
后,
是顺序执行标号2的语句
CMP R3,R1
STRCC R2,[R3],#4
BCC %B2
还是直接跳到 用户逻辑代码段
执行
     LDR R0,=DATA1
     LDR R1,[R0]   
     LDR R3,=0x55555555
HALT
     B HALT
还有:
      LDRCC R2,[R0],#4
     STRCC R2,[R1],#4
是实现什么工能的
请高人指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
z00
1楼-- · 2019-07-16 13:04
程序运行到
CMP R0,R1
BEQ %F1
后如果R0=R1,跳转到局部标号1的段落后,执行完
LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
后,
是顺序执行标号2的语句
CMP R3,R1
STRCC R2,[R3],#4
BCC %B2
还是直接跳到 用户逻辑代码段
执行
     LDR R0,=DATA1
     LDR R1,[R0]   
     LDR R3,=0x55555555
HALT
     B HALT

---------------------------------------------------
顺序执行标号2的语句
z00
2楼-- · 2019-07-16 14:25
CMP     r1, r3          ; 拷贝初始化数据
LDRCC   r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4        
STRCC   r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4

一周热门 更多>