Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2010, 09:05   #1
Ispotiq
 
Регистрация: 08.05.2010
Сообщений: 5
По умолчанию Распределение Максвелла в TASM

Доброго утра всем. Начинаю писать прогу для построения графика распределения Максвелла по скоростям. Сразу возникает уйма вопросов ибо формула для построения графика очень объемная и сложная. Для начала первый вопрос: скорость молекул изменяется от 0 до 4000 м/c, и по формуле это число нужно возвести в квадрат. В обычный 16 битный регистр это не влезет. Как обойти эту проблему?
Ispotiq вне форума Ответить с цитированием
Старый 08.05.2010, 09:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Открою вам секрет: давно уже почти все архитектуры дсктопов и системы для них 32 и 64 битны... Соответственно с 32 и 64 битными регистрами. + есть всякие сопроцесоры, MMX, SSE со своими регистрами....
p51x вне форума Ответить с цитированием
Старый 08.05.2010, 13:33   #3
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

ну дык регистры то есть и 32 разрядные а туда значит влазиет (2^32)-1 = 4294967295
на крайняк можно заюзать пару DX:AX
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 08.05.2010, 14:28   #4
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Подписываюсь под вышенаписанным) Воспользуйтесь 32-битными регистрами или парами 16-битных регистров.
В крайнем случае, воспользуйтесь сопроцессором.
kogemrka вне форума Ответить с цитированием
Старый 09.05.2010, 00:24   #5
Ispotiq
 
Регистрация: 08.05.2010
Сообщений: 5
По умолчанию

спасибо за советы, но теперь непойму как поступить с k = 1,38·10–23 Дж/К – постоянная Больцмана. Каким образом организовать ввод данного числа и так же осуществить вычисления ведь в формуле необходимо 1/(k^3) и извлекать корень. Формула: http://ru.wikipedia.org/wiki/%D0%A0%...BB%D0%BB%D0%B0 формула под номером 11! функция плотности вероятности для модуля скорости.
Ispotiq вне форума Ответить с цитированием
Старый 09.05.2010, 00:37   #6
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Числа двойной точности с плавающей точкой обеспечивают относительную точность около 16 десятичных цифр и масштабы в диапазоне от 10^-308 до примерно 10^308 (источник: wiki)

Тебе должно вполне хватить. Для вычислений с нецелыми числами используй сопроцессор (FPU). Он и результат с приемлемой точностью сохранить сумеет, и корень квадратный извлечь могёт и много чего ещё. Не представляю, как решать без FPU такие задачи...

Для ознакомления, как с ним работать, советую почитать книгу Зубкова "Ассемблер для DOS, Windows и Unix, главу 2.4 и далее. (если возникнут трудности где её найти - пиши в личку, пришлю).
kogemrka вне форума Ответить с цитированием
Старый 09.05.2010, 14:37   #7
Ispotiq
 
Регистрация: 08.05.2010
Сообщений: 5
Подмигивание

Книгу почитал, действительно у сопроцессора куча полезных функций, и если я правильно понял то работать будет сопроцессор так как указано в комментах? и на выходе будет число 32?

(до знака "!" значение в ST(0), а после в ST(1))
MOV b, 2

;ST(0) !ST(1)
FILD b
;b ==> ST(0) !-
;b !-
PROSCHET_NACHALO:


MOV V, 4
FILD V
;V !b
FIMUL V
;V*V !b
FIST V
;ST(0) ==> V !b где (V=V*V)
FMUL ST(0), ST(1)
;b*V*V !b
FISTP P
;ST(0) ==> P !b

;P=b*V*V

;b !-
FSTP
;- !- убрали значение из стека и ST(0) свободен
Ispotiq вне форума Ответить с цитированием
Старый 10.05.2010, 13:24   #8
Ispotiq
 
Регистрация: 08.05.2010
Сообщений: 5
По умолчанию

Еще вопрос: есть ли в TASMe у сопроцессора команда округления значения в регистре ST до целого значения, что б при этом значение оставалось в ST? Либо подскажите как это сделать. И! как работает команда FSCALE у сопроцессора и зачем она нужна
Ispotiq вне форума Ответить с цитированием
Старый 10.05.2010, 16:19   #9
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Цитата:
Сообщение от Ispotiq Посмотреть сообщение
Еще вопрос: есть ли в TASMe у сопроцессора команда округления значения в регистре ST до целого значения, что б при этом значение оставалось в ST?
Разумеется, есть. Цитирую:
Цитата:
  • Команда:
    FRNDINT
  • Назначение:
    Округлить до целого
  • Процессор:
    8087
Округляет значение ST(0) до целого числа в соответствии с режимом округления, заданным битами RC.
Округление может происходить в сторону нуля, положительной бесконечности или отрицательной бесконечности, в зависимости от значения битов RC.

Цитата:
Сообщение от Ispotiq Посмотреть сообщение
И! как работает команда FSCALE у сопроцессора и зачем она нужна
Блин, опять придётся отвечать цитатой из Зубкова.

Цитата:
  • Команда:
    FSCALE
  • Назначение:
    Масштабировать по степеням двойки
  • Процессор:
    8087

Умножает ST(0) на два в степени ST(1) и записывает результат в ST(0). Значение ST(1) предварительно округляется в сторону нуля до целого числа.
Книга Зубкова - шикарнейший русскоязычный справочник по всем ассемблерным командам. Люто советую держать электронную версию под рукой и обращаться по всем вопросам в первую очередь к ней.
kogemrka вне форума Ответить с цитированием
Старый 10.05.2010, 16:40   #10
Ispotiq
 
Регистрация: 08.05.2010
Сообщений: 5
По умолчанию

спасибо за твоё терпение и помощь. Информации очень много, все переварить и понять как применить тяжело, и многое пропускается вследствии моей рассеянности.
___________________________________ ________________________________
Умножает ST(0) на два в степени ST(1) и записывает результат в ST(0). Значение ST(1) предварительно округляется в сторону нуля до целого числа.
___________________________________ ________________________________
За это отдельный респект! стало намного понятнее.
Ispotiq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
пуассоновское распределение Dafka Помощь студентам 0 30.03.2010 21:15
(BC 3.1) Распределение памяти! Lawliet32 Помощь студентам 8 28.12.2009 23:49
Распределение памяти Jeni Общие вопросы Delphi 6 31.03.2008 19:59