私は算術演算を実行するMASM32プロジェクトに取り組んでいます。浮動小数点ユニットを使用するには、コプロセッサ(8087命令セット)を使用する必要があります。だから、私の浮動小数点の制限は、100.0
であり、すべての数は制限よりも小さくなければならない。私は2つの数値を合計し、結果を比較しようとしていますが、うまくいきません。float sumを比較する
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
include c:\masm32\include\masm32rt.inc
.data
;Variables de comparación.
FP_max DD 100
;Variables volcadas de la tabla de símbolos.
_a DD 25
_b DD 80.0
.code
start:
fild _a
fild _b
fadd
fcom FP_max ;compare ST(0) with the value of the real8_var variable
fstsw ax ;copy the Status Word containing the result to AX
sahf ;transfer the condition codes to the CPU's flag register
ja overflow ;when all flags are 0
jmp end_program
overflow:
print "ERROR: overflow.", 13, 10, 0
jmp end_program
end_program:
invoke ExitProcess, 0
end start
質問:私は間違っていますか?どのようにそれを修正することができますか?ありがとう!
あなたは 'fstsw ax' /' sahf'を使ったかのように 'fcomi'を使ってフラグを直接設定できます。 (私は考えているppro、つまり過去20年間のx86が必要です) –