为什么这条BNE[ARMv7]指令似乎越过了我函数的末尾
以下是生成的ARM指令:为什么这条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
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>