Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Арифметические операции с 48 битными чилами!!! 
:(
    Опции темы
Belij
  Дата 19.12.2003, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



butbut.gif

Помогите плиз, кто может с задачкой!Все книжки перерыл-нигде не нашел.
Как вычислить сумму двух чисел типа real (6 байт)confused.gif
Может у кого есть примерчики, вышлите на мыло!Буду благодарен!
P.S. одна оговорка-использование компилятора TASM!

Это сообщение отредактировал(а) Belij - 19.12.2003, 09:44
PM MAIL   Вверх
Chingachguk
Дата 19.12.2003, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Сопроцессор можно использовать ?


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Belij
Дата 19.12.2003, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если бы....=((( хотя может и нужно!я точно не знаю.. confused.gif
вообще эта фишка нужна в кодельнике,пищущемуся на паскале или дельфе, а там асмовская вставка с суммированием....

Это сообщение отредактировал(а) Belij - 19.12.2003, 13:36
PM MAIL   Вверх
Chingachguk
Дата 19.12.2003, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Так это две большие разницы !!!

Проще всего (если это без сопроцессора) написать на turbo pas код, использующий сложения чисел типа real (кажется, они 6 байт ? или double ?), но важно указать ключ {$E+} - использовать библиотеку эмуляции сопроцессора. Тогда при написании:

var

x,y,z: real;

z:=x+y;

Компиллятор в этом месте сделает вызов кода из библиотеки. Надо в отладчике войти в этот вызов и скоприровать этот код ;)



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Belij
Дата 19.12.2003, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



дык а прокатит?
ведь придется все это во встроенный пихать..

Это сообщение отредактировал(а) Belij - 19.12.2003, 20:26
PM MAIL   Вверх
Chingachguk
Дата 19.12.2003, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Тут главное - алгоритм вытянуть.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Belij
Дата 20.12.2003, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я уточнил условие поставленной задачи..и..оказывается сопроцессор использовать даже НУЖНО!!!
=(
как быть в этом случае!
и спасибо за идею с отладчиком.
PM MAIL   Вверх
Chingachguk
Дата 20.12.2003, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну тогда все проще.

Сопроцессор поддерживает САМ числа с плавающей запятой. Например:

Цитата

x dd 3.5
y dd 6.5

res dd ?

fld dword ptr  x ; Загрузить x в регистр сопроцессора ST(0)
fadd dword ptr y ; Добавить к регистру ячейку памяти y
fstp  dword ptr res ; Выгрузить в ячейку res


Как видно, программист здесь не сном ни духом не ведает. как и из чего сделаны числа с плавающей запятой. Компиллятор за него создал инициализированные данные (x,y).

Проблемы начинаются тогда, когда пытаешься, к примеру, сделать вывод таких чисел на экран (на ассемблере). Как сделать это, если не знаешь формата ?

Но такие проблемы решить можно, если, к примеру, использовать последовательное деление на 10. Я ее решал - если интересно, см. мою статью на wasm.ru.

Если же операции делать на ассмблере (на вставках в код паскаля или дельфи), а вывод - с помощью функций языка высокого уровня, то проблем быть не должно.

Однако. Я не уверен, что сопроцессор поддерживает 6-ти байтные числа с плавающей запятой. Он ТОЧНО поддерживает 4-х и 8-ми байтные числа. Возможно, 6-ти байтные - это рудимент старого паскаля, про который я уже упоминал - эпоха 286 или 486 SX.

Если так и есть, то вполне вероятно, что 6-ти байтные числа - это тот же формат, что и у обычных, 4-х или 8-ми байтных, только с другой мантиссой. Ведь real-число состоит примерно так:

Знак (старший бит);
Экспонента = старшая степень двойки и еще (кажется) +126 - 7 или 8 бит после старшего;
Мантисса - коэффициенты разложения числа по степеням двойки.

Например:

0.625 = 1/2 + 1/8 = 2^(-1) * ( 1 + 0*2^(-1) + 1*2^(-2) ).

Экспонента = -1

Подробнее см. в книге Зубкова С.В.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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