Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.14;
Скачать: CL | DM;

Вниз

Вопрос по Assembler у   Найти похожие ветки 

 
Awex ©   (2001-12-26 12:36) [0]

Не подскажите как работать с вещественными числами без использования сопроцессора. Как я понимаю придется обходиться числами с фиксированной запятой. Нужно по крайне мере 4 действия, ADD, DIV, MUL, SUB, c ADD,SUB вопросов нет,
а вот DIV и MUL посложней....
Не кто не сталкивался с подобной задачей ?


 
MBo ©   (2001-12-26 12:52) [1]

А для чего? 386 или 486SX завалялась или с образовательными целями?
В старых книжках по ассемблеру бывают примеры процедур умножения 32-х разрядных чисел для 16-р процессора - из этого можно исходить. Наверно, где-нибудь есть и для вещественных чисел.


 
Старик   (2001-12-26 13:35) [2]

А были еще 4-x разрядные i4004. Класс !


 
Awex ©   (2001-12-26 15:05) [3]

>2Старик
Ага .. Были, еще и Z80 т...д.......
Но кажется был задан конкретный вопрос....

>2MBo & LL
1. Задача действительно для образовательных целей.
2. В век 286, 386 обходились без сопроцесора, и многие компиляторы, например тот же Pascal, мог по выбору или генерить код для сопроца или генерить код умуляции этих комманд. Хотелось бы знать принципы работы таких "эмулирующих комманд".
Может кто где видел в сети что ли бо подобное ?
Заранее спасибо.


 
Romkin ©   (2001-12-26 15:36) [4]

Все довольно просто, сначала выбираешь формат числа, к примеру, в Паскале тип real занимает 6 байт (48 бит)
Каждое такое число состоит из мантиссы и экспоненты (то и другое в двоичном виде), и при этом нормализовано, те имеет вид 1,001010111... * е^(10101), к примеру (в десятичном виде что-то подобное 3,456*10^3). Отсюда получается, что первый бит - всегда 1, и его используют для знака мантиссы.
В реал типе первый бит знак мантиссы, далее 39бит - мантисса (всего 40-бит),
8 бит экспонента (s(1),f(39),e(8)). Число расшифровывается так:
(-1)^s * 2^(e-129) * (1.f)
При производстве умножения - мантисы умножаются со знаком, экспоненты складываются (о переполнении сам подумай)
При сложении меньшее слагаемое сначала денормализуется - shr мантиссы на разницу между экспонентами, после этого складывается и нормализуется результат. и ТД. ТК все числа двоичные, все довольно легко


 
Awex ©   (2001-12-26 17:58) [5]

>2Romkin
Большое спасибо.
Засяду на ночку, попробую реализовать все в коде.

Еще раз большое спасибо.


 
Romkin ©   (2001-12-26 18:28) [6]

реализуй лучше сразу Double - стандарт IEEE
8 байт, most significant bit - как обычно знак, далее 11 бит - экспонента, 52 бита - мантисса
if 0 < e < 1024 then (-1)^s * 2^(e-1023) * (1.f)
if e=0 and f <> 0 then (-1)^s * 2^(-1022) * (0.f)
if e=0 and f=0 then (-1)^s * 0
if e=2047 and f=0 then (-1)^s * inf
if e=2047 and f<>0 then NaN (не число)
сравнивать удобно - просто как два целых



Страницы: 1 вся ветка

Текущий архив: 2002.02.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
1-42726
RUS1
2002-01-30 15:51
2002.02.14
как достать параметры , которые передаются вместе с exe при его запуске на выполнение


6-42821
SemFLY
2001-11-15 02:17
2002.02.14
Можно ли в приложение сервер ?


3-42686
vopros
2002-01-22 10:10
2002.02.14
Уважаемые не поможете примерчиком..


1-42724
Serg001
2002-01-30 16:16
2002.02.14
Народ, помогитееееееееееееееееее!


1-42799
Ron
2002-01-24 00:10
2002.02.14
Printer