布尔值评估 C++ ASM 代码



我目前正在测试各种代码行,以丰富我在汇编(X86,特别是现在(和使用MS VC++的知识。与其他编译器(gcc(相比,我对机器如何生成代码的不同部分一无所知

我遇到了一个布尔评估行,它导致了以下 ASM 代码:

void boolean_literals() {
    /*true/false*/
01133A2E C6 45 FB 01          mov         byte ptr [b],1  
    bool b = 6 == 6; 
01133A32 0F B6 45 FB          movzx       eax,byte ptr [b]  
01133A36 85 C0                test        eax,eax  
01133A38 74 04                je          boolean_literals+2Eh (01133A3Eh)  
    if (b) {
01133A3A C6 45 FB 00          mov         byte ptr [b],0  
        b = false;
    }

问题是 - 我实际上看不到 ASM 中的布尔值:

mov         byte ptr [b],1 

任何编译器选项可以解决此问题或w/e?:)

布尔值计算在这里:

test        eax,eax  
je          boolean_literals+2Eh (01133A3Eh)  

Test表演:flags = eax and eax将设置ZF=1 if eax == 0 .
je将跳到ZF=1从而完成布尔测试。

如果启用优化,编译器很可能会发现测试结果始终:-)为真,因此将完全省去测试。在这种情况下,只需要以下代码。

mov         byte ptr [b],1    //b = true

最新更新