Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
LupusEques
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 39
1

Сравнение вещественных чисел

16.12.2017, 18:45. Просмотров 809. Ответов 10
Метки нет (Все метки)

Будто бы простая задача: сравнить два действительных числа в стеке, то, которое является меньшим - вытолкнуть. Но почему-то работает некорректно - между 6 и 9 выберет 6 как больше, но между 6 и 4 выберет 4 большим
Assembler
1
2
3
4
5
6
7
8
    getMax:
        fcom st(1)
        ja B_max
        jmp fin
        B_max:
        fstp trash
        fin:
    ret
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2017, 18:45
Ответы с готовыми решениями:

Сравнение вещественных чисел
Помоготе пожалуйста с задачкой. Нужно сравнить 2 вещественных числа и записать...

Деление вещественных чисел в сопроцессоре
Задание: Составить и отладить программу на ассемблере для нахождения результата...

Неточное умножение вещественных чисел
Помогите, пожалуйста! Мне нужно умножить 0.95 на 60 при заданном режиме...

Ассемблерная вставка, деление вещественных чисел
Если числа целого типа, то все нормально работает, а с вещественными всегда...

CMP: Происходит неправильное сравнение вещественных чисел
Дорого времени суток! Написал программу с простейшим ветвлением. Возникла...

10
ФедосеевПавел
Модератор
3668 / 2037 / 842
Регистрация: 01.02.2015
Сообщений: 6,774
16.12.2017, 22:02 2
Лучший ответ Сообщение было отмечено LupusEques как решение

Решение

После сравнения fcom нужно поместить флаги сравнения из FPU в CPU.
Есть два способа, в зависимости от древности CPU
Assembler
1
2
3
4
5
                fcom st(1)
                fstsw   ax
                sahf
 
        ja      B_max
Assembler
1
2
3
4
5
6
7
8
FPU_Stat dw ?
..............
                fcom st(1)
                fstsw   FPU_Stat
                mov ax, FPU_Stat
                sahf
 
        ja      B_max
1
LupusEques
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 39
16.12.2017, 22:18  [ТС] 3
ФедосеевПавел, второй способ сработал - спасибо
0
ФедосеевПавел
Модератор
3668 / 2037 / 842
Регистрация: 01.02.2015
Сообщений: 6,774
16.12.2017, 22:25 4
При работе в masm32 (32-разрядные приложения для Windows) используются процессоры, "понимающие" первый вариант.

Строки 69-74 из Вычислить сумму ряда с заданной точностью
0
Jin X
4334 / 1353 / 161
Регистрация: 14.12.2014
Сообщений: 2,557
Записей в блоге: 7
Завершенные тесты: 2
17.12.2017, 00:05 5
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Цитата Сообщение от LupusEques Посмотреть сообщение
второй способ сработал - спасибо
Зачем делать такое извращение, когда первый вариант явно проще и быстрее???

Есть инструкции для .686 (Pentium Pro+), которые записывают результат сразу во флаги: fcomi, fcomip, fucomi, fucomip:
Assembler
1
2
fcomi st,st(1)  ; указывается 2 регистра, первый из которых всегда st, он же st(0)
ja ...
Добавлено через 1 минуту
И вместо вот этого
Цитата Сообщение от LupusEques Посмотреть сообщение
ja B_max
jmp fin
B_max:
Не проще ли написать просто jna fin (он же jbe fin)?
2
LupusEques
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 39
17.12.2017, 12:34  [ТС] 6
Цитата Сообщение от Jin X Посмотреть сообщение
Есть инструкции для .686 (Pentium Pro+)
К сожалению - Illegal instruction
0
Jin X
4334 / 1353 / 161
Регистрация: 14.12.2014
Сообщений: 2,557
Записей в блоге: 7
Завершенные тесты: 2
17.12.2017, 13:44 7
LupusEques, в TASM этого нет, он слишком древний
Только MASM (UASM). Ну и fasm, NASN, разумеется (без директивы) и пр.
1
proc3nt
волшебник
649 / 510 / 152
Регистрация: 26.05.2012
Сообщений: 1,438
18.12.2017, 03:15 8
Цитата Сообщение от Jin X Посмотреть сообщение
NASN
оЧепятка
NASM
0
Ol44
703 / 84 / 15
Регистрация: 10.07.2016
Сообщений: 146
18.12.2017, 18:22 9
Цитата Сообщение от Jin X Посмотреть сообщение
в TASM этого нет, он слишком древний
У меня на Тасме5.1 есть
0
Jin X
4334 / 1353 / 161
Регистрация: 14.12.2014
Сообщений: 2,557
Записей в блоге: 7
Завершенные тесты: 2
18.12.2017, 23:41 10
Ol44, а вот это интересно. Я установил TASM 5.4 (типа). По факту же TASM под Windows версии 5.4, а вот для DOS только 4.1. Где брать 5.1 ?
0
Ol44
703 / 84 / 15
Регистрация: 10.07.2016
Сообщений: 146
20.12.2017, 21:36 11
Я уже сейчас и не найду откуда брал, там с 5.0+ до 5.3 версии от tE!
Откуда 5.4? Но наверно это не сильно важно, главное фишка этих версий для меня это .686 и .mmx
0
20.12.2017, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2017, 21:36

Представление вещественных чисел в памяти ЭВМ
Помогите разобраться как представляются вещественные числа в памяти ЭВМ...

Ввести матрицу А вещественных чисел размерности NxN
Ввести матрицу А вещественных чисел размерности NxN.

Массив из вещественных чисел в ассемблерных вставках на FreePascal
Всем привет!=) Пишу программу на ассемблере, возникла проблема с обработкой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru