汇编:JA和JB工作不正确

Ras*_*sty 1 c++ x86 assembly fpu

由于我的主要操作系统是linux并且在visual studio上有项目,所以我决定使用在线编译器来实现它.我发现是很多人提出的.所以这是我的代码:

#include <iostream>

using namespace std;
int main(void) {
float a = 1;
float b = 20.2;
float res = 0;
float res1 = 0;

_asm { 

    FLD a
    FCOM b
    JA midi
    JMP modi           

    midi:
    FST res
    JMP OUT

    modi:
    FST res1
    JMP OUT


}
    OUT:
cout << "res = " << res << endl;
cout << "res1 = " << res1 << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的目标很简单,如果a是大于b不是把ares,否则res1.但它似乎就像我在变量中所拥有的一样,a它总是跳跃midi而且结果总是如此res = whatever is in a.希望你能帮忙.对不起,如果我的问题很愚蠢,我刚开始学习装配.谢谢:)

PS
同样的事情,JB但相反.它总是打印res1 = whatever is in b.

Wea*_*ane 5

这个页面:

FCOM将ST0与给定的操作数进行比较,并相应地设置FPU标志.

但是你JA midi正在测试CPU标志.

它继续:

FCOMI和FCOMIP的工作方式类似于FCOM和FCOMP的相应形式,但是将它们的结果直接写入CPU标志寄存器而不是FPU状态字,因此它们可以立即跟随条件跳转或条件移动指令.