Локальные переменные в процедурах
ных процедуры c помощью директив опр. сегментов, или лок.переменны-
ми считаются только данные, размещённые в стеке ниже BP?
Если да, то нет, локальными считаются переменные внутри одной функции (ниже BP/EBP)
тать, процедура должна обращаться к стеку?
MASM
.const
szCaption db "Foo", 0
.code
invoke MessageBox, hWnd, lpszMessage, offset szCaption, MB_ICONINFORMATION
ret
FooProc endp
Это статическая переменная. А локальные формируются в сегменте стека :D
Гы... В ассемблере, в частности в MASM, нет понятия статической переменной.
Это же не C или C++. И ЭТА переменная видна в других процедурах модуля.
ЗЫ Не хочу повторяться (в третий раз) - но ключевое слово здесь - удобство.
Дык и мне не понятно зачем может понадобиться отдельный сегмент для процедуры и почему не использовать один сегмент данных для всех процедур.
Можно ли определить локальный сегмент данных для локальных перемен
ных процедуры c помощью директив опр. сегментов, или лок.переменны-
ми считаются только данные, размещённые в стеке ниже BP?
Насколько локален будет сегмент?
Насколько я понимаю, под директивами опр. сегментов подразумеваются директивы типа .data, которые "закрывают" предыдущий сегмент и обозначают начало другого сегмента.
Та же .data будет при каждом использовании начинать сегмент каждый раз с одним и тем же "именем". В конце концов сегменты с одинаковыми именами будут объединены в один сегмент.
ных процедуры c помощью директив опр. сегментов, или лок.переменны-
ми считаются только данные, размещённые в стеке ниже BP?
ответ нет, т.е. можно но фактически это бесполезно потому, что данные всегменте .code можно будет изменить, а .data можно будет выполнить
Нет, нельзя!
Код можно только выполнять и читать, а данные - читать и записывать...
Посмотри флаги сегментов в PM.
А в реальном режиме - это и так можно.
Код можно только выполнять и читать, а данные - читать и записывать...
Посмотри флаги сегментов в PM.
А в реальном режиме - это и так можно.
это получается чт оесли в процедуре 3 сегмента, то для одной процедурки будет создано 3 дескриптора, БРЕД!!!
короче это не надо!!!!!!!!!!!
Нет. Сегменты с одинаковыми именами и атрибутами объединяются в одну секцию. А вот уже для разных секций создаются отдельные дескрипторы.
[quote=ahilles]короче это не надо!!!!!!!!!!![/quote]
Согласен.
2аффтар: Юзай либо локальные переменные как обычно, в стеке, либо глобальные, в секции данных.
ных процедуры c помощью директив опр. сегментов, или лок.переменны-
ми считаются только данные, размещённые в стеке ниже BP?
в языках высокого уровня локальные переменные - область стека .
в ассемблере можно использовать всё что угодно . надо только озаботится корректным выделением и освобождением памяти .
В любом случае они (что вне стека функции) уже будут считаться глобальными...