| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > интерфейс с языками высокого уровни |
| Автор: Zealot 9.3.2006, 10:30 |
| Доброго времени суток, уважаемые программисты! Я хочу задать вам вопрос, который вам, возможно, покажется тривиальным: используя асм в языках высшего уровня (pascal, C++, etc.) у меня возникла проблема: если есть процедура, например, procedure MyProc(a, b, c, d: real); stdcall; с параметрами типа real (8 байт, число с плавающей запятой) и мне нужно её вызвать из встроенного асма, то я пишу /например/: asm push 0.0 push 1.35 push 45.0 push 0.0 call MyProc end то возникает проблема: я передаю в стэк 16 байт, а процедура запрашивает 32! Далее классические виндовские ошибки в духе access violation и т. д. если делаю так: asm push 0 push 0.0 push 0 push 1.35 push 0 push 45.0 push 0 push 0.0 call MyProc end то всё прекрасно, в стэке 32 байта. Вроде всё OK, но, ставлю бряки в теле процедуры, и вижу, что процедура приняла не те значения! Подскажите пожалуста, как передать в стэк числа с плавающей запятой! P. S. и ещё, вопрос на засыпку: как определить, какого типа данные в регистре? (byte, char, real, etc.) заранее благодарю, Zealot |
| Автор: oleg1973 9.3.2006, 11:21 | ||
а может компилер просто не понимает что 45.0 есть число с точкой?
никак ) все зависит от "интерпритации" к примеру , AL=0х65 это может быть или просто число или символ ascii "A" ) |
| Автор: e-moe 14.3.2006, 21:58 | ||
| Ассемблер кодирует вещественные числа не так как Паскаль. из-за этого может быть ошибка. В ВР/ТР real выглядит так:
+ прочти статейку про Асм + паскаль на моем сайте http://labinskiy.googlepages.com/ (рекомендую старую версию статьи) |