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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2009, 04:45   #1
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию Использование libc в FASM

Допустим импортировал я функцию sprintf из MSVCRT.DLL.
Задано число
Arg0 dt 34566.3352
Arg1 dq 3455.335

Вопрос состоит в том как передать его в аргументы?
invoke sprintf,szCh,"Hello world %f",Arg0
invoke sprintf,szCh,"Hello world %f",Arg1

Обе строки при отображении MSGBox-ом выглядят так:
Hello world 0.000000

Как передать туда аргумент? Регистр FPU, функции в аргументы тоже никак не передашь. Хочется иметь под рукой функцию_из_коробочки для отображения FLOAT-чисел.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 27.04.2009, 11:09   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Для cdecl-функций вроде cinvoke есть
--
Странно, как оно вообще работает?
invoke sprintf,szCh,"Hello world %f",Arg0 строка не заканчивается нулём, адрес левый

Код:
format PE GUI 4.0
include 'win32ax.inc'

section '.code' code readable executable

     ; работает, но qword передать не можем :)
     cinvoke sprintf, buf, fmt, dword[dbl], dword[dbl+4]
     invoke MessageBox, 0, buf, 0, 0

     ; падает
     cinvoke sprintf, buf, fmt, dword[sngl]
     invoke MessageBox, 0 ,buf, 0, 0

     ret

section '.data' data readable writable

  sngl dd 3.1415926535  ; 4 байта, single
  dbl  dq 3.1415926535  ; 8 байт, double
  buf  rb 255
  fmt  db 'Hello world %f',0

data import
  library user32,'USER32.DLL',\
          msvcrt, 'MSVCRT.DLL'

  import user32, MessageBox, 'MessageBoxA'
  import msvcrt, sprintf, 'sprintf'
end data
пыщь

Последний раз редактировалось JTG; 27.04.2009 в 12:48.
JTG вне форума Ответить с цитированием
Старый 12.06.2009, 05:20   #3
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Дополню старую тему:
_atof из MSVCRT возвращает результат в st0.
пример:
.data
string db "-124555.242"
dNum dq 0.0
.code
cinvoke atof, string
fstp qword[dNum] ; сохраняем переменную и чистим стек FPU.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учебник по FASM Roof Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 33 09.12.2013 23:16
LEA [FASM] m32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 03.10.2010 13:57
tasm>>fasm better Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 09.02.2009 19:34
Не компилируется исходник FASM nikleb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 09.03.2008 17:34
не компилируется исходник на FASM pro-john Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 15.01.2008 18:40