在什么条件下,С 中的“if”和“if-else”在汇编时进行比较?

问题描述 投票:0回答:1

对于 x86 汇编,“cmp”指令设置两个标志:“ZF”和“CF”,允许通过一次比较确定两个整数是否等于或大于或小于。应该如何用 C 编写代码才能对所有三种情况仅执行一次比较?有 6 个选项可供选择:

if (x > y) { /*code1*/ } else if (x < y) { /*code2*/ } else { /*code3*/ }

if (x < y) { /*code2*/ } else if (x > y) { /*code1*/ } else { /*code3*/ }

if (x > y) { /*code1*/ } else if (x == y) { /*code3*/ } else { /*code2*/ }

if (x < y) { /*code2*/ } else if (x == y) { /*code3*/ } else { /*code1*/ }

if (x == y) { /*code3*/ } else if (x < y) { /*code2*/ } else { /*code1*/ }

if (x == y) { /*code3*/ } else if (x > y) { /*code1*/ } else { /*code2*/ } 
c if-statement assembly x86 comparison
1个回答
0
投票

一般来说,我们在 C 中所做的就是编写常规的 if-else 语句,而不考虑机器语言中发生的情况,并依靠编译器来优化它。

因此,以下 C 语句:

if( x > y )
    /* code1 */
else
    /* code2 */

将由一个像样的编译器进行优化,并启用足够的优化,如下所示:

    mov eax, [x]
    cmp eax, [y]
    jbe code2
    /* code1 */
    jmp after
code2:
    /* code2 */
after:
© www.soinside.com 2019 - 2024. All rights reserved.