Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 16.12.2017, 22:32   #1
WereW
Новичок
 
Регистрация: 16.04.2017
Сообщений: 1
Репутация: 10
По умолчанию Сравнение вещественных чисел

Будто бы простая задача: сравнить два действительных числа в стеке, то, которое является меньшим - вытолкнуть. Но почему-то работает некорректно - между 6 и 9 выберет 6 как больше, но между 6 и 4 выберет 4 большим
TASM
Код:

getMax:
        fcom st(1)
        ja B_max
        jmp fin
        B_max:
        fstp trash
        fin:
    ret

WereW вне форума   Ответить с цитированием
Старый 17.12.2017, 00:47   #2
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

fcom записывает результат не во флаги CPU, а в слово статуса FPU. Его надо сначала извлечь:
Код:

fcom st(1)
fstsw ax
sahf
ja ...

Во флаги CPU записывает fcomi (fucomi, fcomip, fucomip):
Код:

fcomi st,st(1)
ja ...

Но это уже для Pentium Pro+ (.686)
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Старый 17.12.2017, 05:06   #3
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,128
Репутация: 926
По умолчанию

Привет, 7in!
Вещественные числа между собой вполне можно и при помощи целочисленных CMP, TEST, SUB сравнивать, сперва по знаку, потом по модулю. Первыми битами идет степень, если степени одинаковы, то сравниваются мантиссы. А если не по модулю, то придется запомнить, что положительные вещественные сравниваются аналогично целочисленным, а у отрицательных сравнение идет в "обратную сторону"...

Последний раз редактировалось Mikl___; 17.12.2017 в 05:09.
Mikl___ вне форума   Ответить с цитированием
Старый 19.12.2017, 18:32   #4
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Привет, Mikl___!
Если числа находятся в регистрах, то боюсь, cmp, test, sub тут не помогут
Да и даже при сравнении чисел в памяти – какой смысл разводить эту "бодягу"? С несколькими тормознутыми jcc-инструкциями и пр.
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив,состоящий N (N>1) вещественных чисел. Найти среднеарифметическое значение чисел массива. nikola_orsha Паскаль 2 11.10.2016 14:05
Дана последовательность из 100 вещественных чисел. Определить , со скольких чётных чисел она начинается SnS Lazarus, Free Pascal, CodeTyphon 2 22.09.2013 18:48
Сравнение вещественных чисел. _PROGRAMM_ Assembler 12 20.09.2012 22:47
Дана последовательность вещественных чисел. каждая пара чисел задает границы отрезка. Найти количество целых чисел на отрезках 'studentka' Помощь студентам 6 30.11.2011 18:35
Дано n вещественных чисел а1, а2,…,аn. Определите число соседств двух чисел разного знака (Паскаль) bambam Помощь студентам 1 29.11.2011 11:36


19:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru