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

 WASM Phorum —› WASM.ASSEMBLER —› align против align

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


Дата: Мар 10, 2004 12:38:58

Народ, наверно я сошёл сЪ ума, но обойти MASM'овское ограничение немогу. Суть такая. Допустим я работаю с сегментом у которого выравнивание по умолчанию 4 байта и хочу использовать align 16 в нём, он, ессно, ругается. Изменять параметры сегмента ох как не хочется, как тут быть:?

P.S. org ($+15)/16 и ему подобное не проходит :(


Дата: Мар 10, 2004 12:40:10

И я знаю, что НЕ с ГлАголами пишется отдельно, просто настроение плохое!


Дата: Мар 10, 2004 13:17:57

.586 напиши в начала вместо .386


Дата: Мар 11, 2004 02:19:20

Как раз и написано .586p /* по крайней мере на masm 6.11 не работает. Более новые для доса использовать не могу - накладно */


Дата: Мар 11, 2004 17:46:48

[ Kirk: Изменять параметры сегмента ох как не хочется, как тут быть:? ]

Переопределить выравнивание сегмента нельзя. Но можно просто завести свой собственный сегмент.
;@echo off
;goto make

.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

mycode SEGMENT PAGE
mycode ENDS

mycode SEGMENT
start:
	xor eax, eax
	align 16
	xor eax, eax
	align 64
	ret
mycode ENDS
end start

:make

set exe=align

\masm32\bin\ml /nologo /c /coff %exe%.bat
\masm32\bin\link /nologo /subsystem:windows %exe%.obj

del %exe%.obj

echo.
pause


Выравнивание 64 благодаря PAGE. Если достаточно 16, то PAGE можно убрать. Сегмент можно слить с дефолтовым .code с помощью ключа merge.


Дата: Мар 12, 2004 02:49:17

Спасибо, но больше всего за merge, раньше я долго ломал голову над тем, как слить два сегмента кода с разными выравниваниями :-)


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