if-else 的实现
任意编写一段 if-else 用作测试,如下:
var i = 20
if i > 10 {
i = 1
} else {
i = 2
}
通过汇编代码来看计算机为了做出 if-else 的选择进行了哪些工作。编译后的汇编代码如下:
TestSwift`main:
0x1000033a0 <+0>: pushq %rbp
0x1000033a1 <+1>: movq %rsp, %rbp
0x1000033a4 <+4>: subq $0x60, %rsp
0x1000033a8 <+8>: leaq 0x8e39(%rip), %rax ; TestSwift.i : Swift.Int
0x1000033af <+15>: xorl %ecx, %ecx
0x1000033b1 <+17>: movq $0x14, 0x8e2c(%rip) ; demangling cache variable for type metadata for Swift.Array<Swift.UInt8> + 4
0x1000033bc <+28>: movl %edi, -0x4c(%rbp)
0x1000033bf <+31>: movq %rax, %rdi
0x1000033c2 <+34>: leaq -0x18(%rbp), %rax
0x1000033c6 <+38>: movq %rsi, -0x58(%rbp)
0x1000033ca <+42>: movq %rax, %rsi
0x1000033cd <+45>: movl $0x20, %edx
0x1000033d

本文深入探讨了Swift编程中if-else、switch和for/while循环的底层实现,通过汇编代码分析了cmp指令如何修改标志位,以及如何通过条件跳转指令实现流程控制。讲解了如何通过标志位(如CF、PF、AF、ZF、SF等)进行条件判断,以及在不同条件下的跳转策略。
679

被折叠的 条评论
为什么被折叠?



