Добрый вечер. Имеется кусок кода (пример): Код (Text): mov eax,$ ret org $-1 nop mov eax,$ компилируется он в следующее: FASM: Код (Text): 00000288: B888104000 mov eax,00401088 ;првавильный адрес 0000028D: C3 ret ;этого не должно быть видно 0000028E: 90 nop 0000028F: B88E104000 mov eax,0040108E ;-здесь должно быть 00040108F MASM: Код (Text): 00000400: B800001040 mov eax,40100000 ;верно 00000405: 90 nop ;ret не видно 00000406: B806104000 mov eax,00401006 ;адрес правильный Это в FASM'е так должно быть?
org directive sets address at which the following code is expected to appear in memory. Из руководства по фасму. С моими скудными познаниями английского языка из вышенаписанного следует, что появление следующего за директивой кода будет по адресу, указаноому в директиве. На процесс компиляции это никак не влияет.
появление следующего за директивой кода будет по адресу, указаноому в директиве. ну так вот именно... Адрес то мы меняем на предыдущий, а он не меняется
похоже в fasme эта директива влияет только на адреса, ассоциируемые с метками и командами во время компиляции, команды же не накладываются, а записываются последовательно mov eax,$ ret _this: org $-1 nop mov eax,$ call _this В этом примере call'иться будет не nop, a mov eax,$
org $-1 в FASM не работает так, как это принято в некоторых других ассемблерах - это связано с внутренними особенностями реализации. Как правило, нужного результата можно добиться при помощи директив virtual или store, а то и просто if / end if.
Как сказал Turkishorg directive sets address at which the following code is expected to appear in memory.expected переводиться, как вероятной. То есть компелятор нойдя дерективу org будет считать, что последующий код вероятно находиться в указонном месте памяти.Поэтому команда org $-1 срабатывает, как $=$-1.
S_T_A_S_ нужного результата можно добиться при помощи директив virtual или store, а то и просто if / end if. Просто нужно "замазать" в зависимости от некоторых условий, код сгенерированный другим макросом.
Вообще, покажи код, что-нибудь придумаем в принципе уже обошел проблему, просто пришлось не использовать конструкцию, так же как и на MASM'е (я про org $-1), сделал по другому. На вопрос, заданный мной первоначально, ответ получил. Всем спасибо.