Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод дробного числа, Помогите вывести дробное число на асме 
:(
    Опции темы
programmist
Дата 6.12.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!
Я работаю в делфи на асме. Мне нужно сложить два вещественных числа. Функция следующая:

function AddAsm(a, b:Extended):Extended;

Я пытаюсь сделать следующее:

Код

mov eax, a
mov ebx, b
add eax, ebx 


на что мне дельфовая прога выдаёт "Operand size mismatch". Я так понимаю, что.... что я ничего не понимаю :-))) что я делаю не так? Подскажите кто-нибудь.



PM MAIL   Вверх
CPlusPlusFAN
Дата 6.12.2005, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А слышал о таких регистрах: ST0,ST1,...,ST7.
Они предназначены для хранения чисел с плавающей точкой.
Ты делфист: глянь модуль math, там такого добра завались...
Добавлено @ 21:02
Попробуй
Код

fld a
fld b
fadd

PM MAIL ICQ Jabber   Вверх
St. Andrew
Дата 7.12.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чет я только не понял, где тут речь про вывод. smile Тут о расчете говорится. Команда Add работает только с целыми числами и, если не ошибаюсь, размером в слово. Для вещественных чисел используем сопроцессор. Чтобы вывести вещественное число на экран, логично сначала преобразовать его в показательную форму (мантисса и показатель степени), а потом специальную функцию для вывода писать. Если же точность не важна - можно просто округлить до ближайшего целого (frndint).
К сожалению, сам пока ни разу вещественные числа не выводил, т.к. не испытывал надобности. Но если кто поделиться практическим опытом - будет интересно.
--------------------
Оглянитесь вокруг! В мире так много прекрасного!
PM MAIL WWW ICQ   Вверх
CPlusPlusFAN
Дата 7.12.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще-то речь шла об асмовских вставках, а не о чистом асме.
Если выводить в асме на экран, то сначала подключить библиотеку fpu.inc, затем в 80 битовую переменную скопировать результат, а за тем вызвать функцию fpufltoa.
Вот код:
Код


include fpu.inc
includelib fpu.lib

.data

res dt ?
a dt 10.0
b dt 11.1
stdout dd ?
written dd ?
buf db 40 dup(?)

.code
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout,eax
fld a
fld b
fadd
fstp res
invoke fpuFLtoA, ADDR res, 20, ADDR buf, SRC1_REAL or SRC2_DIMM
invoke WriteConsoleA, stdout, ADDR buf, 40, ADDR written, 0
....

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

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

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


 




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


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

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