|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 25, 2004 15:22:00 · Поправил: Безпощадный даос Добрый день! У меня такой вопрос: существует ли в фасме аналог масмовского оператора union? Например, как можно объявить вот такую вещь:
STRUCT somestruct
UNION
var1 dd ?
var2 dd ?
ENDS
var3 dd 0
var4 dd 0
ENDS
Дело в том, что я сейчас переделываю некоторые заголовочные файлы из Си, а там union активно используется. Вообще, возможно ли это? |
|
|
Дата: Июн 25, 2004 15:58:14 union или аналога в FASM нет. Возможно написать для таких целей макрос, но imho проще делать так: STRUC somestruct
{
; UNION
label var1 dword
var2 dd ?
; ENDS
var3 dd 0
var4 dd 0
} |
|
|
Дата: Июн 25, 2004 16:19:03 · Поправил: S_T_A_S_ Можно ещё так: STRUCT fix struc
ENDS equ
macro UNION [arg]
{
common local .size
.size=0
forward virtual at 0
arg
if .size < $
.size = $
end if
end virtual
common rb .size
}Используем:
STRUCT somestruct
{
UNION \
.var1 dd ?,\
.var2 dd ?
ENDS
.var3 dd 0
.var4 dd 0
ENDS
} |
|
|
Дата: Июн 28, 2004 04:22:44 Monk Твой пример не отражает специфики объединения, т.к. под обе переменные резервируется одинаковое пространство. |
|
|
Дата: Июн 28, 2004 09:13:28 А вот в фасме выкопал некий макрос:
; union macro
macro union _at, [_item, _type]
{
common
virtual at _at
forward
_item _type
common
end virtual
}
Это не оно? Что он вобще делает? |
|
|
Дата: Июн 28, 2004 18:19:18 Строка: union first,\
sec,dd,\
dal,db
first:
Развернётся в следующие строчки: first: sec dd 0 dal db 0 В общем макрос в приведённом виде не имеет ничего общего с Объединением. Однако если строки virtual at _at и end virtual поместить внутри forward то вероятно (не проверял) будет создано именно объединение т.е. несколько переменных по одному адресу. |
|
|
Дата: Июн 28, 2004 18:36:53 Ещё необходимо выделить места столько, сколько занимает самый большой из аргумантов. См. мой макрос выше. |
|
|
Дата: Июн 28, 2004 20:26:25 ясно. спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.093 |