在执行fcomp-Operation之后,我对fpu中标志的行为有疑问。 fpu-stack没有溢出,在两个代码片段中都是参与比较操作的相同值。
为什么此代码有效:
fldz ;[0]
fadd dword [esp+4] ;[x]
fld1 ;[1][x]
fcomip st0, st1 ;compare 1, x
;[x] because fcomip pops the 1
je xeins ;falls x = 1: special routine
fld1 ;[1][x]
fxch st0, st1 ;[x][1]
fcomi st0, st1 ;compare x, 1
jc xinval ;if x < 1 (carry = 1): special routine
这段代码不是吗?
fldz ;[0]
fadd dword [esp+4] ;[x]
fld1 ;[1][x]
fcomip st0, st1 ;compare 1, x
;[x] because fcomip pops the 1
je xeins ;if x = 1: special routine
fld1 ;[1][x]
fcomip st0, st1 ;compare x, 1
jc xinval ;if x < 1 (carry = 1): special routine