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

 WASM Phorum —› WASM.ASSEMBLER —› Неприятности с выравниванием в MASM

. 1 . 2 . >>

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


Дата: Сен 24, 2003 12:21:12

Привет.
Ну думал, что, что-то спрошу по этой теме

Итак. я хочу для цикла зделать так:
ALIGN 16

Компилятор не пускает, говорит, что выравнивание у сегмента меньше.

Я делаю так
_TEXT          segment   PAGE   public   'CODE' 


Получаю пощёчину

.\Calculation\asm\asm_fun.asm(20) : error A2015: segment attributes cannot change : Alignment

ALIGN 16

^((

Как быть?


Дата: Сен 24, 2003 12:40:03

В fasm'е и tasm'е проблем с этим не возникает.
В fasm'е макрос для выравнивания выглядит так:
macro align value
{
rb (value-1) - (RVA $ + value-1) mod value
}
Может и в масме нечто подобное можно сделать?

А вы еще спрашиваете почему мы fasm используем 8)


Дата: Сен 24, 2003 12:53:39

Black_mirror
Вы наврено не поняли..
В MASM есть ALIGN

Но Align без смысленно, если сегмент выровнен по меньшей границе, чем ALIGN


Дата: Сен 24, 2003 13:03:19

Edmond
Дык у тебя, наверное .386 в начале стоит :)) Поставь побольше - .686, например, даже четверка подойдет


Дата: Сен 24, 2003 13:04:35

Это ошибка компилятора или линкера? Возможно сегмент TEXT уже был объявлен с другим выравнивание. А по умолчанию у него вроде выравнивание 16 байт.


Дата: Сен 24, 2003 13:14:34 · Поправил: Four-F

[ Edmond: Как быть? ]

Очень просто - поменять .386 на .486. Тогда ALIGN 16 будет работать. Если ты конечно не собираешься свою прогу не 386 камне гонять ;-)

...Тьфу, блин, опять опередили ;-)


Дата: Сен 24, 2003 13:52:27

masquer
ОК, ну 386 да :)))
А почему так? Кто объяснит?


Дата: Сен 24, 2003 13:54:06

Four-F
...Тьфу, блин, опять опередили ;-)

:))

Это нужно в FAQ.. Я тут пишу Мини ДБ для FAQ.. :))


Дата: Сен 24, 2003 15:40:26

Аркадий Белоусов:

EH> Edmond: Как быть? ]
EH> Очень просто - поменять .386 на .486. Тогда ALIGN 16 будет работать. Если ты
EH> конечно не собираешься свою прогу не 386 камне гонять ;-)

Ты хочешь сказать, что для решения проблемы тебе посоветовали применить
директиву .486 вместо .386? Чушь полная. Разница только в том, что .486
допускает использование инструкций, имеющихся на 486-м, но не имеющемихся на
386. Всё. На выравнивание эта инструкция никак не влияет.


Дата: Сен 24, 2003 15:59:12 · Поправил: Four-F

[ Аркадий Белоусов: На выравнивание эта инструкция никак не влияет. ]

На выравнивание может и не влияет, а на использование директивы ALIGN влияет. Мне лень по докам рыть, но в любом случае, это работает и ты можешь сам легко в этом убедиться.


Дата: Сен 24, 2003 16:40:42

Edmond

А кто такой Аркадий Белоусов? :-)


Дата: Сен 24, 2003 19:03:07

Скорее всего _TEXT идёт как зарезервированный сегмент и его аттрибуты нельзя трогать.


Дата: Сен 24, 2003 19:04:24

Asterix
Вы не знаете Аркадия??? Гм..
Ну ничего, скоро узнаете :)))


Дата: Сен 24, 2003 19:21:33

AsmGuru62
Да???
А как де С++??? Хм.. Неее


Дата: Сен 24, 2003 20:11:05

Asterix
На "RTFM Helpers" не подписывался!? Ай-яй-яй.

Edmond
А почему господин Белоусов не участвует в форуме? (Он вообще по форумам не ходит)

. 1 . 2 . >>


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