diamond, ты прав. Я ошибся, т.к. писал по памяти, не очень вдумываясь в написанное и забыв про еще один возможный вариант. Сейчас посмотрел свой макрос: Код (Text): macro stdcall proc, [arg] { reverse pushd arg common call proc }
Кстати, никто не сталкивался с такой вещью. В версии 1.64 в 16-разрядном коде pushd CONST не приводил к генерации префикса размерности операнда, т.е. был эквивалентен pushw CONST (в 32-разрядном коде у pushw CONST также не было префикса). Помню долго искал ошибку в коде, пока не сообразил прогнать в отладчике и увидел, что код-то двухбайтовый, т.е. без префикса. Или это вообще нормально и так и должно быть?
Помедитировав понял, что был не прав... действительно применительно к регистрам и памяти размерность push должна определяться размером операнда, иначе придётся брать старший word из соседней переменной или старшей части регистра, что в общем-то не совсем то что нужно... хотя если это ничему не мешает тогда явно переопределять тип push dword [myWord]. Другое дело константы - они в 1.67.12 соответствуют размерности use32 и правильно реагируют на pushw, pushd, а для переменных и у pushd pushw всё равно размерность определяется операндом, а не окончанием d/w.
Э-э-э. Я тока учусь, но: invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString ; -это под MASM ;5-ый урок Iczelion'а как реализовать это в fasm? invoke TextOut,hdc,TestString, ??? ;sizeof.TestString - ошибка В мануале к FASM'у про sizeof не упоминается, а в инклудах имеется только: INCLUDE/MACRO/STRUCT.INC macro struct name { virtual at 0 name name sizeof.#name = $ - name name equ sizeof.#name end virtual } macro sizeof и т.п. отсутствуют Плиз хелп... (У меня FASM 1.47)
Попробуйте обойтись вообще без макросов (лично я их не очень люблю). Например, сделайте так: Код (Text): invoke lstrlen, TestString inc eax invoke TextOut,hdc,TestString, eax
neofit, например: TestString .............. sizeof_TestString = $-TestString ................ invoke TextOut,hdc,TestString, sizeof_TestString
sizeof в данном случае не макрос. Просто так объявляется символ, который может использоваться для определения размера структуры. Например, объявляешь структуру mystruct, тогда sizeof.mystruct содержит размер структуры.
Спасибо - оба способа: 1-ый-------------------------------------------------- invoke lstrlen,TestString inc eax invoke TextOut,[hdc],0,0,TestSrting,eax и 2-ой------------------------------------------------ sizeof_TestString = $-TestString ... invoke TextOut,[hdc],0,0,TestString,sizeof_TestString ---прекрасно работают и легки в понимании; с объявлением структуры тоже работает: struc db [data] ;здесь { common . db data .sizeof = $ - . -01h } ... TestString db 'some text',0 ;и здесь вместо db можно написать xx-например, ... ;чтоб для каждой db не обьявлялась .sizeof invoke TextOut,[hdc],0,0,TestString,TestString.sizeof Но если ".sizeof=$-.-01h" заменить на "sizeof.=$-.-01h", то выдает ошибку А что в FASM эквивалента MASM'овского "...,SIZEOF TestString" нету?
TestString db "TestString",0 SIZEOF.TestString=$-TestString ... invoke TextOut,hdc,0,0,TestString,SIZEOF.TestString