fcom
только устанавливает биты состояния fpu, а не флагов cpu, поэтому вы не можете напрямую использовать условный переход. Существует инструкция fcomi
, но это доступно только при использовании процессора P6 + и ассемблера, который понимает такие инструкции. По словам Майкла Пётча, для tasm вам нужна хотя бы версия 5.3. Обходным путем является передача бит состояния fpu в флагов cpu с использованием fstsw ax
и sahf
.
отметить также, что в любом случае, соответствующие биты состояния FPU C0
, C2
и C3
получить переданы CF
, PF
и ZF
соответственно, так что вы должны использовать условный переход, который проверяет эти флаги. В вашем случае это означает jae
.
Смотрите также раздел 8.1.4 Ветвление и условные Хода на кодах условий в Руководстве Intel® 64 и IA-32 архитектур программного обеспечения разработчик Тома 1: Базовая архитектуре и конечно же набор инструкций ссылке как обычно.
Вы хотите, чтобы 'fcomi' не' fcom' (при условии, что у вас есть P6 +), иначе вставьте «fstsw ax; lahf', потому что 'fcom' устанавливает только флаги fpu, а не cpu. Также вы должны использовать 'jae' not' jge', так как 'SF' и' OF' обнуляются (это причина безусловного перехода), и только 'ZF' и' CF' имеют смысл. – Jester
Я пытался использовать fcomi, но при запуске tasm.exe myTask.asm получил ошибку «Неверная инструкция». – IvanSorokin
Работает только с P6 +, вам может потребоваться включить этот набор команд ('.686' или слишком много, tasm является древним) – Jester