· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› wsprintf

Посл.отвђт Сообщенiе


Дата: Июн 27, 2004 17:20:14

Вывожу на экран число 12345
.......
.data
buf db 15 dup(?)
ifmt db "%d",0
dig dd 12345
........
.code
........
invoke wsprintf, ADDR buf, ADDR ifmt, dig
invoke WriteConsoleA, stdout, ADDR buf, sizeof buf, ADDR cWritten,0

А если заменить "dig dd" на "dig dw"
то как тогда надо изменить ifmt чтобы можно было вывести на экран?


Дата: Июн 27, 2004 18:11:20

wsprintf тут не причём.
invoke ложит в стек DWORD'ы, так что если написать dig dw - что тогда будет в стеке?


Дата: Июн 27, 2004 18:19:44

ясно, а как тогда мне вывести word?


Дата: Июн 27, 2004 18:27:38

не все-таки че-то не понял, че он туда положит? положит указатель на word, тока в чем разница, не понял


Дата: Июн 27, 2004 19:19:37

ладно, понял надо переписать значение из word в dword и его толкать в стек
.data
dig dw 12345
dig2 dd ?
......
.code
xor eax,eax
mov ax, dig
mov dig2, eax
invoke wsprintf, ADDR buf, ADDR ifmt, dig2


Дата: Июн 27, 2004 19:35:35 · Поправил: S_T_A_S_

[ crazz : все-таки че-то не понял, че он туда положит? положит указатель на word, ]

Чтобы invoke положил в стек указатель, надо написать offset или ADDR.
(ADDR указывают случае, если адрес нужно вычислять командой LEA, в вашем случае правильней писать offset, т.к адрес известен во время компиляции).
В случае с dig, в стек поместится значение.

> надо переписать значение из word в dword и его толкать в стек

И лучше это делать так:
.data
	dig	dw 12345
......
.code
	movsx	eax, word ptr dig
	invoke	wsprintf, offset buf, offset ifmt, eax


Дата: Июн 27, 2004 19:55:33

спасибо за помощь


Дата: Июн 28, 2004 18:59:50

А вот другой вопрос.
Чем можно преобразовать число с точкой в строку?
По-моему, wsprintf не поможет.


Дата: Июн 28, 2004 19:06:32

ага, wsprintf про флоаты не знает. а вот msvcrt.dll - знает


Дата: Июн 28, 2004 19:46:20

SolidCode
Поиск по форуму.


Дата: Окт 4, 2004 05:32:32

ssx
„ага, wsprintf про флоаты не знает. а вот msvcrt.dll - знает“

А эта библиотека всегда есть в свеже-поставленной Винде любой версии?


Дата: Окт 4, 2004 05:47:40

SolidCode
"MSVCRT.DLL exists on every Windows 95 with a new service pack installed, or with Microsoft Internet Explorer 4 or later, and on all other Windows 4.x or later (Windows 98, Windows NT 4, or later)."


Дата: Окт 4, 2004 12:44:42

CRTDLL.DLL есть даже в Win95 Gold, и в ней есть swprintf.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.205