|
|
| Посл.отвђт | Сообщен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 |