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

 WASM Phorum —› WASM.ASSEMBLER —› Директива org $ в FASM. Недочет или фича?

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


Дата: Окт 28, 2004 21:53:58

Добрый вечер.

Имеется кусок кода (пример):
	mov eax,$
	ret
	org $-1
	nop
	mov eax,$

компилируется он в следующее:
FASM:
00000288: B888104000   mov    eax,00401088 ;првавильный адрес
0000028D: C3           ret                 ;этого не должно быть видно
0000028E: 90           nop
0000028F: B88E104000   mov    eax,0040108E ;-здесь должно быть 00040108F

MASM:
 00000400: B800001040  mov    eax,40100000 ;верно 
 00000405: 90          nop                 ;ret не видно
 00000406: B806104000  mov    eax,00401006 ;адрес правильный

Это в FASM'е так должно быть?


Дата: Окт 29, 2004 00:35:04

org directive sets address at which the following code is expected to appear in memory.
Из руководства по фасму. С моими скудными познаниями английского языка из вышенаписанного следует, что появление следующего за директивой кода будет по адресу, указаноому в директиве. На процесс компиляции это никак не влияет.


Дата: Окт 29, 2004 01:05:04

появление следующего за директивой кода будет по адресу, указаноому в директиве.
ну так вот именно...
Адрес то мы меняем на предыдущий, а он не меняется


Дата: Окт 29, 2004 02:09:31

похоже в fasme эта директива влияет только на адреса, ассоциируемые с метками и командами во время компиляции,
команды же не накладываются, а записываются последовательно

mov eax,$
ret
_this:
org $-1
nop
mov eax,$
call _this

В этом примере call'иться будет не nop,
a mov eax,$


Дата: Окт 29, 2004 07:10:06

org $-1 в FASM не работает так, как это принято в некоторых других ассемблерах - это связано с внутренними особенностями реализации.
Как правило, нужного результата можно добиться при помощи директив virtual или store, а то и просто if / end if.


Дата: Окт 29, 2004 19:33:30

Как сказал Turkishorg directive sets address at which the following code is expected to appear in memory.expected переводиться, как вероятной. То есть компелятор нойдя дерективу org будет считать, что последующий код вероятно находиться в указонном месте памяти.Поэтому команда org $-1 срабатывает, как $=$-1.


Дата: Окт 30, 2004 21:21:10

S_T_A_S_
нужного результата можно добиться при помощи директив virtual или store, а то и просто if / end if.

Просто нужно "замазать" в зависимости от некоторых условий, код сгенерированный другим макросом.


Дата: Окт 31, 2004 05:27:34

Используй store.
Вообще, покажи код, что-нибудь придумаем :-)


Дата: Окт 31, 2004 19:05:25

Вообще, покажи код, что-нибудь придумаем
в принципе уже обошел проблему, просто пришлось не использовать конструкцию, так же как и на MASM'е (я про org $-1), сделал по другому.
На вопрос, заданный мной первоначально, ответ получил.
Всем спасибо.


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