我用 gcc 在没有任何优化的条件下编译了一下。
不过 GNU 用的是 AT&T 的语法,和 intel 语法稍微有点区别。
主要是 mov a,b 是指把 a 存入 b。其它的在这里好像没体现。
这个是用三目运算符的。明显比你的那个要好一些。
401428: c7 44 24 0c 01 00 00 movl $0x1,0xc(%esp)
40142f: 00
401430: c7 44 24 08 02 00 00 movl $0x2,0x8(%esp)
401437: 00
401438: 8b 54 24 0c mov 0xc(%esp),%edx
40143c: 8b 44 24 08 mov 0x8(%esp),%eax
401440: 39 d0 cmp %edx,%eax
401442: 7d 02 jge 401446 <_main>
401444: 89 d0 mov %edx,%eax
401446: 89 44 24 04 mov %eax,0x4(%esp)
40144a: b8 00 00 00 00 mov $0x0,%eax
40144f: c9 leave
401450: c3 ret
401451: 90 nop
401452: 90 nop
401453: 90 nop
...
下面是用 if else 的。这个和你那第二个没有任何区别。
401428: c7 44 24 0c 01 00 00 movl $0x1,0xc(%esp)
40142f: 00
401430: c7 44 24 08 02 00 00 movl $0x2,0x8(%esp)
401437: 00
401438: 8b 44 24 0c mov 0xc(%esp),%eax
40143c: 3b 44 24 08 cmp 0x8(%esp),%eax
401440: 7e 0a jle 40144c <_main>
401442: 8b 44 24 0c mov 0xc(%esp),%eax
401446: 89 44 24 04 mov %eax,0x4(%esp)
40144a: eb 08 jmp 401454 <_main>
40144c: 8b 44 24 08 mov 0x8(%esp),%eax
401450: 89 44 24 04 mov %eax,0x4(%esp)
401454: b8 00 00 00 00 mov $0x0,%eax
401459: c9 leave
40145a: c3 ret
40145b: 90 nop
...