我是一个初学者(UNI的第一年)。我使用VisualStudio和x86配置。这是我的功能:
int hex(int x) {
__asm {
MOV EAX, x
CMP EAX, 9
JG jumpto
ADD EAX, 48
MOV x, EAX
jumpto:
ADD EAX, 55
MOV x, EAX
}
return x;
}
JG条件有问题,或者我没有正确理解。我对CMP和JG行的理解是:
1.将EAX与9进行比较(x与9)。
1.如果它大于9,它将跳转到“jumpto”(哇,这听起来很愚蠢)。
1.如果它不是更大,它只是读取JG和jumpto之间的线。所以我基本上认为它的工作原理类似于if/else
我的问题是,如果它不是更大,程序仍然读取在“跳转到”段中的行(ADDEAX,55 ;MOV x,EAX),据我所知,这是不应该的。
有没有人能给我解释一下(就像我是个孩子或者尽可能简单)为什么它不起作用。我是希望之星。谢谢。
我又试了一次谷歌,如果我没有犯错误的话,它只是让我对如果/否则的事情更有信心。
2条答案
按热度按时间qco9c6ql1#
正如@ChrisMM在评论中指出的,你所拥有的大致相当于:
......而你大概想要的东西更像是:
正如他所指出的,你可以通过在你现在拥有的
jumpto
标签之前添加一个无条件跳转来得到这个,所以添加48和添加55是相互排斥的。另一种更有效的可能性是类似于下面这样的:
这将变成如下所示:
2skhul332#
所以我基本上认为它就像if/else
这是正确的,但是即使是高级语言也会在
else
之前有某种跳转,所以执行可以在endif
继续:现在在汇编中你必须自己编写跳转:
更简单的方法: