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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 13:32   #1
AMSPeople
 
Регистрация: 22.04.2014
Сообщений: 5
Вопрос Добавить в стек float-Значение

Как заменить:
Код:
PUSH    DWORD [EBP + 36]
PUSH    DWORD [EBP + 32]
так, что бы из вышеуказанного регистра в стек добавлялись float-значения? Т.е. по адесу EBP + 32 и EBP + 36 находяться действительные числа, а не целые.
AMSPeople вне форума Ответить с цитированием
Старый 22.04.2014, 16:52   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Я вас удивлю, но данные команды помещают в стек 4 байта и все. А целые там, флоаты, или 4 чара... это уж как вы их потом будете интерпретировать.
p51x вне форума Ответить с цитированием
Старый 22.04.2014, 17:16   #3
AMSPeople
 
Регистрация: 22.04.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Я вас удивлю, но данные команды помещают в стек 4 байта и все. А целые там, флоаты, или 4 чара... это уж как вы их потом будете интерпретировать.
Значит распишу попдробней проблему. Есть некая программа со своим скриптовым языком. Вызов одной из функций этого языка выглядит так:
Код:
local pGdipFillPieI = ghGDIPDll:GetProcAddress_("GdipFillPieI");

FillPie = ASM.Assemble(string.format([[
	USE32
	ORG		100h
	
	PUSH 	EBP
	MOV 	EBP, ESP
	
	PUSH	DWORD [EBP + 36]
	PUSH 	DWORD [EBP + 32]
	PUSH 	DWORD [EBP + 28]
	PUSH	DWORD [EBP + 24]
	PUSH	DWORD [EBP + 20]
	PUSH 	DWORD [EBP + 16]
	PUSH 	DWORD [EBP + 12]
	PUSH 	DWORD [EBP + 8]
	
	CALL 	%u
	
	POP 	EBP
	RETN
]], pGdipFillPieI));
EBP + смещение - это параметры вызова функции GdipFillPieI. Так вот, 2 параметра:
Код:
PUSH	        DWORD [EBP + 36]
PUSH 	DWORD [EBP + 32]
нужно переделать, потому что там должны быть действительные (float) числа.
AMSPeople вне форума Ответить с цитированием
Старый 22.04.2014, 17:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как вам уже сказали туда передаются 4 байта, а не целое как вы думаете
вопрос в другом что вы должны в указанное смещение положить то что вам надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.04.2014, 17:25   #5
AMSPeople
 
Регистрация: 22.04.2014
Сообщений: 5
По умолчанию

Т.е. в асме нельзя явно указать, что в стек нужно положить флоат тип из регистра EBP + 32?
Вызов функции такой:
Код:
FillPie(hGraphics, hBruh, 150, 80, 100, 100, 45.0, 90.0);
45.0 и 90.0 - в скриптовом языке программы - целые числа и невозможно ей сказать, что это float. Я хотел через асм указать это..

Последний раз редактировалось AMSPeople; 22.04.2014 в 17:27.
AMSPeople вне форума Ответить с цитированием
Старый 22.04.2014, 17:42   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Т.е. в асме нельзя явно указать, что в стек нужно положить флоат тип из регистра EBP + 32?
Чем байты флоата отличаются от байтов целого? Запахом, цветом или вкусом? Байты они и есть байты, а вот как их интерпретировать дело программиста и команд.

Цитата:
Вызов функции такой
Ну так может стоит указать вашему компилятору (интерпретатору) скриптового языка
Код:
FillPie(hGraphics, hBruh, 150, 80, 100, 100, 45.0f, 90.0f);
а то он может и до даблов расширять и пихать.

Последний раз редактировалось p51x; 22.04.2014 в 17:45.
p51x вне форума Ответить с цитированием
Старый 22.04.2014, 17:47   #7
AMSPeople
 
Регистрация: 22.04.2014
Сообщений: 5
По умолчанию

Так я и хочу чтобы асм мое число интеприторовал как float.
Еще раз повторяю, что в программе, в которой пишется код, невозможно указывать тип переменной. Поэтому и появилось желание (вообще аозможно ли), чтобы асм как-то сконвертировал целое число во флоат.
AMSPeople вне форума Ответить с цитированием
Старый 22.04.2014, 17:57   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от AMSPeople Посмотреть сообщение
45.0 и 90.0 - в скриптовом языке программы - целые числа и невозможно ей сказать, что это float. Я хотел через асм указать это..
Как-то так, но размерности, возможно, придется уточнить в доке по FPU:
Код:
asm
    FILD dword ptr [EBP + 32]
    FST dword ptr [EBP + 32]
end;
Vapaamies вне форума Ответить с цитированием
Старый 23.04.2014, 09:13   #9
AMSPeople
 
Регистрация: 22.04.2014
Сообщений: 5
По умолчанию

Цитата:
Как-то так
Так не проходит. В сабже для компиляции асемблированных встаок используется FASM. Так вот, он ругается.. на FILD и ptr. Не знает он этих инструкций...
AMSPeople вне форума Ответить с цитированием
Старый 23.04.2014, 12:24   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Так бы и говорил. В FASM ptr не надо писать, просто dword. У меня скомпилировалось.
Vapaamies вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить значение из следующей записи KOHCEPBATOP SQL, базы данных 2 29.11.2012 15:49
вывести на экран значение типа float Faton 11 Общие вопросы C/C++ 4 28.11.2012 12:27
Возможно ли в массив типа char записать первым элементом значение переменной типа float? Green Gin Общие вопросы C/C++ 2 05.12.2011 01:50
Ошибка типа cannot convert `float*' to `float' for argument `1' ... Trackman Помощь студентам 3 23.05.2011 17:09
Массив имеет тип float, переменная же, куда записывается значение int. Sabin4ik Общие вопросы C/C++ 1 28.04.2011 21:47