Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение мантиссы из 4-х байт float-числа 
:(
    Опции темы
bint
Дата 29.12.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Задача имеет принципиальное значение, т.к. плавающая запятая вообще не рассматривается. т.к. формат данных в программе не подразумевает ее использование.

Устройство присылает пакет из данных, в котором по адресу addr прописывает число в формате float.
Пример:

4B D0 67 42 - это число 57.9534... Нужно выделить мантиссу числа - 579534, порядок - 2 и знаки.

Кто-то сможет помочь с этим?

Добавлено через 1 минуту и 47 секунд
Все что смог найти никак не помогло. Мантисса получается 68****** и т.д.
Реально замучился.
PM MAIL ICQ   Вверх
JAPH
Дата 29.12.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



4267D04B
0 10000100 11001111101000001001011
знак = 0 = "+"
смещённый порядок = 10000100 = 132, несмещённый = 5
мантисса = 11001111101000001001011
число = 1,11001111101000001001011 << 5 = 111001,111101000001001011 = 57,953582763671875


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bint
Дата 29.12.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Подождите-подождите! Ради всего святого, помедленнее. Я ничего не понял.

Цитата
смещённый порядок = 10000100 = 132, несмещённый = 5

Объясните пож. почему несмещенный 5.

Цитата
мантисса = 11001111101000001001011

Это понятно.

Цитата
число = 1,11001111101000001001011 << 5 = 111001,111101000001001011 = 57,953582763671875

Как получилось это число? Его то мне и нужно.

У меня не получается .953582763671875 Что нужно сделать чтобы получить дробную часть? И пож. объясните как первокласснику: это на это плюс это.

Это сообщение отредактировал(а) bint - 29.12.2007, 21:13
PM MAIL ICQ   Вверх
JAPH
Дата 29.12.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Формат числа таков:
старший бит = знак,
8 бит = порядок + 127 (127=смещение),
младшие = мантисса.

Число = 1,мантисса * 2^порядок


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bint
Дата 29.12.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Огромное спасибо, хотя так ничего и не понял.
Расскажите как простыми действиями получить отдельно целую часть и дробную из 4-х байт числа.
А что означает этот знак "^" ?
PM MAIL ICQ   Вверх
JAPH
Дата 29.12.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



^ - возведение в степень.

Итак. Разбиваем число на 1бит+8бит+23бит.
Цитата
0 10000100 11001111101000001001011

1 бит отвечает за знак, 0 = "+", 1 = "-".
8бит - это смещённый порядок. Несмещённый порядок = смещённый - 127.
23бит = мантисса.
Далее
Цитата
Число = 1,мантисса * 2^порядок


Что конкретней непонятно?


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bint
Дата 29.12.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Давайте по порядку разберемся.

Цитата
Итак. Разбиваем число на 1бит+8бит+23бит.
0 10000100 11001111101000001001011

Спасибо, это понял.

Цитата
8бит - это смещённый порядок. Несмещённый порядок = смещённый - 127.

Скажите, зачем нужен "смещенный" порядок и зачем "несмещенный". Каковы функции этих порядков?

Видите ли, для Вас это просто, а для это пока "китайская грамота". Вот, смотрю на нее и нифига не понимаю. А разобраться необходимо.
PM MAIL ICQ   Вверх
JAPH
Дата 29.12.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Цитата
Скажите, зачем нужен "смещенный" порядок и зачем "несмещенный"

1. чтобы число ноль хранить как 00000000000000000000000000000000, тогда несмещённый порядок = -127, а 2^-127 - эт мало.
2. чтобы не мучаться со знаком ещё и для порядка smile

Обычное число 111001,111101000001001011 приводится к виду 1,11001111101000001001011 * 2^00000101, где 00000101 - несмещённый порядок. Далее к нему прибавляется 127, получаем смещённый порядок 10000100. Мантисса - всё, что в дробной части после 1,. саму единицу перед запятой пишут только в 10байтном формате.

Добавлено через 2 минуты и 54 секунды
число хранится в экспоненциальной форме. Аналог 1.345E-5.
1,11001111101000001001011 * 2^00000101. Т.е. добиваются, чтоб в целой части оказалась только единица.

Это сообщение отредактировал(а) JAPH - 29.12.2007, 22:16


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bint
Дата 29.12.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Прошу прощения за бестактный вопрос - Вы не стукнетесь ко мне в асю, т.к. Вашей аси я не нашел. Пожалуйста, это очень важно.
PM MAIL ICQ   Вверх
JAPH
Дата 30.12.2007, 01:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Задача свелась к тому, что нужно из числа в формате с плавающей точкой выделить знак, целую часть и семь первых цифр дробной части. Решение -
Код
        mov    eax, f
        btr    eax, 31
        setc    sign
        mov    ecx, eax
        shr    ecx, 23
        sub    ecx, 127
        and    eax, 007FFFFFh
        or    eax, 00800000h
        test    ecx, 80000000h
        jz    @1
        neg    ecx
        shr    eax, cl
        jmp    @2
@1:        shl    eax, cl
@2:        mov    edx, eax
        shr    edx, 23
        shl    eax, 9
        mov    integer, edx
        mov    ebx, 10000000
        mul    ebx
        mov    float, edx



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
bint
Дата 30.12.2007, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Не ожидал такого понимания! Респект JAPH-у!
И конечно не ожидал такого виртуозного владения ассемблером - в течение нескольких минут готовый, оптимизированный код. У меня просто слов нет.
Или может просто раньше не попадались мастера, поэтому так удивительно.
Наверное это подарок мне на НГ. smile 
PM MAIL ICQ   Вверх
dumb
Дата 30.12.2007, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(bint @  30.12.2007,  04:30 Найти цитируемый пост)
Респект JAPH-у!
поставлю-ка я за тебя JAPH'у плюсик... smile
PM MAIL   Вверх
W4FhLF
Дата 30.12.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Вообще-то есть специальные команды для этого: FXTRACT F2XM1 FSCALE. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1187 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.