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

 WASM Phorum —› WASM.ASSEMBLER —› Как определить размер структуры в FASM?

. 1 . 2 . >>

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


Дата: Мар 7, 2004 17:17:56

В MASM32 все просто: размер структуры = SIZEOF структура. А как быть в FASMе? Например есть структура:
struc SomeStruc
{
.mfSOI dd 0
.rfSOI dd 0
.mfData rb 400h
.rfData rb 400h
.UN rb 32h
.TD dd 0
}
Как поместить в регистр eax ее размер? Можно конечно и просто на бумажке размер посчитать но это уж вовсе смешно.


Дата: Мар 7, 2004 18:49:05

А что в фасме нету SIZEOF? У меня аналогичная проблема в IAS. Если кто знает что-то разумнее разности меток - заранее благодарен.


Дата: Мар 7, 2004 21:57:41

Valery
Нету там SIZEOF :( А с метками как управляться?


Дата: Мар 7, 2004 23:45:47

С файле struct.inc есть описание макроса struct, в нём есть поле size. Смотрите файл там, подробнее сказать не могу на FASM мало пишу.


Дата: Мар 8, 2004 07:04:26

Вот пример от JohnFound:

struc TMyData {
 .field1 dd ?
 .field2 dd ?
}

; for easy use of following construction there is a macro "struct"
; in FASM standard macro library.
; if you want to use "struct" macro, use:
;
; struct TMyData instead of virtual statement.
;
virtual at 0
 TMyData TMyData
 sizeof.TMyData = $
end virtual
; allocate some dynamic memory for array...
    invoke GetProcessHeap
    invoke HeapAlloc, eax, 0, 1000 * sizeof.TMyData
    mov   esi, eax
    xor   eax, eax
; Then use it as array of TMyData structures...
.fillloop:
    mov   [esi+eax+TMyData.field1], eax
    mov   [esi+eax+TMyData.field1], 1234h
    add   eax, sizeof.TMyData
    cmp   eax, 1000*sizeof.TMyData
    jne   .fillloop

;....


Дата: Мар 8, 2004 15:16:25

При всем уважении к JohnFound, ему удалось так запутать пример, что даже я не понял.. :)
Упрощая его пример, можно написать следующее:
struc TMyData {
    .field1    dd    ?
    .field2    dd    ?
}
struct TMyData          ; этот макрос как раз и считает размер структуры
...
mov     eax,sizeof.TMyData


Дата: Мар 8, 2004 16:23:52

Нет, размер структуры считает этот макрос:
virtual at 0
 TMyData TMyData
 sizeof.TMyData = $
end virtual


Дата: Мар 8, 2004 16:56:51

Хотя в файле \fasm\INCLUDE\MACRO\STRUCT.INC уже есть макрос:
; structure definition helper

macro struct name
 { virtual at 0
   name name
   sizeof.#name = $ - name
   name equ sizeof.#name
   end virtual }


Дата: Мар 10, 2004 21:30:34

Ну так я его и использую! :)) И его и указал! :)))


Дата: Мар 11, 2004 02:32:33

dz 3BePIOra

То что ты привел и подписал: ; этот макрос как раз и считает размер структуры - вовсе не макрос ;-)


Дата: Мар 11, 2004 05:34:21

Еще есть макросы struct / ends от Privalov'а на форуме fasm - там это автоматом.
В каких-то случаях они могут быть удобнее, хотя нет такой гибкости, как struc


Дата: Мар 11, 2004 08:14:43

Asterix
Я имел в виду макрос struct :))
Я и не утверждаю, что эта строчка - это макрос... :))


Дата: Мар 20, 2004 08:11:49

Хех, я это делаю примерно следующим образом:

TMyData TMyData ; К примеру
szTMyData dd $-TMyData


Дата: Мар 21, 2004 00:07:10

"Вопрос на засыпку" - как определить размер стандартной структуры? Писал сегодня прогу с использованием структуры OPENFILENAME, пришлось подсмотреть размер структуры в другой проге. А как определить ее размер автоматически?


Дата: Мар 21, 2004 01:33:33

sizeof.OPENFILENAME
:-)

. 1 . 2 . >>


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