У меня есть следующий код сборки:
%include 'rw32.inc'
[segment .data use32]
a dd 2.0
b dd 1.0
[segment .code use32]
prologue ; macro -- inicialization
fld dword [a]
fld dword [b]
fcom
jc greater
jmp less
greater:
fxch
less:
call WriteDouble
call WriteNewLine
epilogue ; macro -- termination
rw32.inc — это служебная библиотека, включающая инициализацию и завершение программы, а также другие функции. WriteDouble — выводит на экран st0 WriteNewLine — просто вставляет новую строку.
и я хочу, чтобы это сравнило числа «a» и «b» и напечатало большее. Моя логика такова: получить оба числа в стеке. По fcom ставим флаги. Если флаг переноса равен 1, число «а» больше, поэтому его нужно переключить с помощью «b», чтобы он находился на вершине стека. В противном случае «b» больше и просто распечатайте результат.
Но кажется, что программа никогда не переходит на ярлык «больше». Как это можно исправить, пожалуйста? Спасибо.
Generally, most programs test the condition code bits immediately after a comparison. Unfortunately, there are no conditional jump instructions that branch based on the FPU condition codes. Instead, you can use the fstsw instruction to copy the floating point status register ...
- person Alex F   schedule 17.12.2014