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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 16:35   #1
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию Fabs

Здравствуйте. Меня интересует команда Fabs. Насколько я понял, она находит абсолютное значение(модуль) вершины стека. Как мне известно информацию в стеке изменять нельзя, следовательно что бы сделать модуль вершины стека, необходимо извлечь вершину поместить в какой либо регистр, там найти модуль и поместить назад в стек, чем собственно и занимается команда FABS. И вот мне интересно, в какой собственно регистр или возможно ещё куда-нибудь команда FABS помещает эту вершину. Или я что то недопонимаю? Помогите, пожалуйста разобраться.
Mr.Steroid вне форума Ответить с цитированием
Старый 16.02.2012, 18:22   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

fabs как и многие команды сопроцессора помещают результат на вершуну стека сопроцессора.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.02.2012, 20:12   #3
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
fabs как и многие команды сопроцессора помещают результат на вершуну стека сопроцессора.
Это понятно. Меня интересуют промежуточные действия, с точки зрения организации микропроцессора. То есть как происходит сам процесс получения модуля вершины стека.
Mr.Steroid вне форума Ответить с цитированием
Старый 16.02.2012, 21:42   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Не забивайте себе голову, ничего никуда не перемещается. Разберитесь с форматом чисел с плавающей точкой и поймете, что fabs всего сбрасывает старший знаковый бит числа. Это элементарное действие.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 17.02.2012, 05:46   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Mr.Steroid чтобы было понятнее
Код:
.data
N dd -1234.5678
.code
fabs N
fabs N == and N,7FFFFFFFh
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2012, 11:26   #6
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

А вот представим такую ситуацию. В вершине стека сидит вещественное отрицательное число представленное в дополнительном коде. Знак, порядок мантиса. Что же получается, Fabs просто сбросит значение знака в 0 и всё???
Mr.Steroid вне форума Ответить с цитированием
Старый 17.02.2012, 11:30   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Mr.Steroid
В дополнительном коде представлены целочисленные числа, они находятся в памяти и регистрах процессора. Сопроцессор работает только с вещественными числами, а они представлены в виде знак + модуль числа, читай книжки
Цитата:
Что же получается, Fabs просто сбросит значение знака в 0 и всё???
Да, так оно и происходит

Последний раз редактировалось Mikl___; 17.02.2012 в 11:36.
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2012, 11:33   #8
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Mr.Steroid
В дополнительном коде представлены целочисленные числа. В сопроцессоре вещественные числа представлены в виде знак + модуль числа, читай книжки
А не посоветуете книгу в которой можно это вычитать?
Mr.Steroid вне форума Ответить с цитированием
Старый 17.02.2012, 11:42   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Mr.Steroid
Брэдли . Программирование на языке ассемблера для персональной ЭВМ фирмы IBM.– М. : Радио и связь, 1988. – 448 с.
Магда Ю. Ассемблер для процессоров Intel Pentium. – Спб. : Питер, 2006. – 410 с.
Зубков С.В., Ассемблер для DOS, Windows и UNIX. – М. : ДМК Пресс, 2000. – 608 с.
Юров В. Assembler: специальный справочник.– Спб. : Питер, 2001.– 496 с.
Ю-Чжен Лю, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование и проектирование микрокомпьютерных систем.– М. : Радио и связь, 1987.– 512 с.
Intel ® 64 and IA-32 Architectures Optimization Reference Manual
Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture
Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M
Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z
Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1
Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2
Leiterman J.C. 32/64-BIT 80x86 Assembly Language Architecture. © 2005, Wordware Publishing, Inc (568 pages) 2320 Los Rios Boulevard Plano, Texas 75074
Turbo Assembler® Version 3.2 User's Guide Borland International. Inc 1800 Green Hills Road P.O. BOX 660001, Scotts Valley, CA 95067-0001
Статьи с сайта www.wasm.ru
Статьи на сайте sasm.narod.ru
Отличная статья с сайта www.rsdn.ru Холодилов С. Плавающая запятая Источник: RSDN Magazine #4-2007

Последний раз редактировалось Mikl___; 17.02.2012 в 11:45.
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2012, 11:48   #10
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Ого. Спасибо большое. И ещё вопрос. Вы написали что для вещественных применяется формат знак+матиса. А как же порядок?
И из интереса, Команда FABS же не может изменить значение знака прямо в самом стеке, наверное она вынимает из стека Вершину, помещает в какой либо регистр, затем меняет там знак и помещает обратно в вершину? Или же она меняет знак прямо в самом стеке? Меня просто интересует этот вопрос не столько с точки зрения программирования, а с точки зрения организации ЭВМ.
Mr.Steroid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функции pow и fabs victor5133 Помощь студентам 1 15.10.2011 12:07
fabs() не хочет работать Razza Общие вопросы C/C++ 2 28.12.2010 02:21