为什么在`bx lr`行之后执行以下ARM汇编代码?

时间:2017-05-16 13:16:14

标签: assembly arm

我正在调用来自C的ARM汇编函数。我希望它在第一个bx lr之后返回到C程序,而不是继续向下。

.global init_secure_monitor
init_secure_monitor:
        bx lr
        ldr r0, =msg
        bl puts
        mov pc, lr
        /* code */
        ldr r0, =msg
        bl puts
        @File ends

我可以看到2个msgs正在打印。但是没有人应该打印出来。我已使用这两种方法返回bx lrmov pc, lr

我做错了什么?

以下是C代码,我正在调用ARM。

   // end secure memory                                                                              |        @ -------------------------
                                                                                                      |        movs pc, lr
    printf("_reloc_begin: 0x%x\n", &_reloc_begin);                                                    |
    printf("_reloc_end  : 0x%x\n", &_reloc_end);                                                      |/*
                                                                                                      | * Monitor Initialization
    init_secure_monitor(norm_begin);                                                                  | *
    //init_secure_monitor(boot_linux_kernel_entry);                                                   | * This is called the first time the Secure world wishes to
    //init_secure_monitor(normal_world_func);                                                         | * transit to the Normal world.
    printf("You should not come to here!\n");  

0 个答案:

没有答案