【发布时间】:2020-07-08 14:11:30
【问题描述】:
嘿,伙计们,我的期末考试即将到来,目前正在学习装配,我正在努力解决一件事,我也无法真正找到答案。 假设我有 2 个双值 x1=-0.5 ,x2=1.0 我想比较 x1 和 x2,但遗憾的是其中一个是有符号的(x1),另一个是无符号的, 我想使用 Condition ,假设 #C 相当于
"While(x1<=x2)"
所以我使用以下代码:
_find_delta2 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,0
L1:
MOV AX,0
FLD CNT
FMUL QWORD PTR [BP+22];ST0=I*H
FADD QWORD PTR [BP+6]; STO0=I*H+X1
FST TMP ; TMP=I*H+X1
FCOMP QWORD PTR [BP+14] ; ST0 COMPRAE WITH X2
FSTSW AX
SAHF
JNL DONE
遗憾的是,在第一个循环中,尽管 x1=-0.5, x2=1.0,但似乎满足条件 我该如何解决这个问题? 谢谢!
【问题讨论】:
-
我已经标记了 CPU 架构。如有错误请更正标签。另外,请提供minimal reproducible example,因为您的代码 sn-p 无法按原样复制。至少添加设置 x87 堆栈的代码和具有所需值的
BP+14。 -
嘿fuz,我已经添加了代码段,我还想要一个关于如何比较无符号和有符号双数的一般解释
-
什么是“AX 标志”?
fstsw ax后跟sahf是正确的,你只需要在jae(或jnb)之后。 -
它们看起来像是浮点数,是吗?这意味着它们都始终是签名的。
-
@Soske 请不要张贴代码图片。而是将您的代码作为文本发布。再说一遍:我对minimal reproducible example 比你的完整代码更感兴趣。您的大部分逻辑与您的问题无关,但是您比较的数字的值很重要!也就是说,这就像用户 ecm 已经提到的有符号/无符号比较问题。