我将从用户收到的一些输入与一些数字进行比较,无论比较如何,都会进行相同的跳转。
用户输入定义如下:
.data?
userInput REAL4 ?
当我比较它时,我使用:
cmp userInput, 18200
jge _tb0 ;This jump is always taken
但是我测试userInput
小于,等于,大于18200
,但它仍会跳转到相同的标签。
我刚开始从this教程开始学习汇编,到目前为止教学效果很好,但是没有太多信息,我在网上找到一个好的,详细的教程,以便我可以学习我做错了什么。
更新
在阅读了一些关于使用FPU进行浮点数学运算之后,我想出了以下变量代码:
.data?
userInput real4 ?
.const
tb0_max real4 18200.00
和以下用于比较的代码:
fld userInput
fcom tb0_max
jge _tb0
然而,我仍然得到与以前相同的结果,无论作为用户输入给出的值,我都跳转到_tb0
更新2:
在与FPU进行比较后阅读this后,我发现以下代码应该,根据文章,允许我将比较状态从FPU移到CPU这样我就可以使用常规的CPU比较指令:
fld userInput
fcom tb0_max
fstsw ax
fwait
sahf
jge _tb0
但是我仍然遇到同样的问题,因为userInput小于常量18200.00而不管userInput
,所以compare总是会产生结果答案 0 :(得分:2)
cmp
本身正常运作。但是你没有正确使用它。 REAL4
是浮点类型。 cmp
仅适用于整数操作数。要么使用整数,要么学习如何比较浮点值。
答案 1 :(得分:1)
由于您想要将单个精确浮点数( userInput )与整数( 18200 )进行比较,您可以暂时将其作为整数存储,然后执行比较:
.data?
userInput REAL4 ?
tempInteger dd ?
...
fld userInput
fistp tempInteger
cmp tempInteger, 18200
jge _tb0