if-else, switch, for/while循环流程控制的底层实现

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值