为什么这条BNE[ARMv7]指令似乎越过了我函数的末尾

为什么这条BNE[ARMv7]指令似乎越过了我函数的末尾,arm,Arm,以下是生成的ARM指令: 0000a138(2): e52db004 PUSH {r11} 0000a13c(2): e28db000 ADD r11, SP, #0 0000a140(2): e24dd00c SUB SP, SP, #12 0000a144(2): e50b0008 STR r0, [r11, #-8] 0000a148(2): e50b100c STR r1, [r11, #-12] 0000a14c(2): e51b3008 LDR r3, [r1

以下是生成的ARM指令:

0000a138(2): e52db004   PUSH {r11}
0000a13c(2): e28db000   ADD r11, SP, #0
0000a140(2): e24dd00c   SUB SP, SP, #12
0000a144(2): e50b0008   STR r0, [r11, #-8]
0000a148(2): e50b100c   STR r1, [r11, #-12]
0000a14c(2): e51b3008   LDR r3, [r11, #-8]
0000a150(2): e3530000   CMP r3, #0
0000a154(2): 1a000004   BNE #+16             <-----
0000a158(2): e51b3008   LDR r3, [r11, #-8]
0000a15c(2): e1a00003   MOV r0, r3
0000a160(2): e28bd000   ADD SP, r11, #0
0000a164(2): e8bd0800   POP {r11}
0000a168(2): e12fff1e   BX LR

看起来我确定函数结尾的方法出错了

以下是objdump的完整功能反汇编:

0000a138 <silly_add>:
    a138:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
    a13c:   e28db000    add fp, sp, #0
    a140:   e24dd00c    sub sp, sp, #12
    a144:   e50b0008    str r0, [fp, #-8]
    a148:   e50b100c    str r1, [fp, #-12]
    a14c:   e51b3008    ldr r3, [fp, #-8]
    a150:   e3530000    cmp r3, #0
    a154:   1a000004    bne a16c <silly_add+0x34>
    a158:   e51b3008    ldr r3, [fp, #-8]
    a15c:   e1a00003    mov r0, r3
    a160:   e28bd000    add sp, fp, #0
    a164:   e8bd0800    pop {fp}
    a168:   e12fff1e    bx  lr
    a16c:   e3a03000    mov r3, #0
    a170:   e50b3008    str r3, [fp, #-8]
    a174:   eafffff4    b   a14c <silly_add+0x14>
0000a138:
a138:e52db004推送{fp};(str fp,[sp,#-4]!)
a13c:e28db000添加fp,sp,#0
a140:e24dd00c子sp,sp,#12
a144:e50b0008 str r0[fp,#-8]
a148:e50b100c str r1[fp,#-12]
a14c:e51b3008 ldr r3[fp,#-8]
a150:e3530000 cmp r3,#0
a154:1a000004 bne a16c
a158:e51b3008 ldr r3[fp,#-8]
a15c:e1a00003 mov r0,r3
a160:e28bd000添加sp,fp,#0
a164:e8bd0800 pop{fp}
a168:E12FF1E bx lr
a16c:e3a03000 mov r3,#0
a170:e50b3008 str r3[fp,#-8]
a174:eafffff4 b a14c

看起来您在编译代码时没有进行任何优化,这就是为什么编译器或多或少遵循了您告诉它的代码路径。
0000a138 <silly_add>:
    a138:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
    a13c:   e28db000    add fp, sp, #0
    a140:   e24dd00c    sub sp, sp, #12
    a144:   e50b0008    str r0, [fp, #-8]
    a148:   e50b100c    str r1, [fp, #-12]
    a14c:   e51b3008    ldr r3, [fp, #-8]
    a150:   e3530000    cmp r3, #0
    a154:   1a000004    bne a16c <silly_add+0x34>
    a158:   e51b3008    ldr r3, [fp, #-8]
    a15c:   e1a00003    mov r0, r3
    a160:   e28bd000    add sp, fp, #0
    a164:   e8bd0800    pop {fp}
    a168:   e12fff1e    bx  lr
    a16c:   e3a03000    mov r3, #0
    a170:   e50b3008    str r3, [fp, #-8]
    a174:   eafffff4    b   a14c <silly_add+0x14>