Конференция "Начинающим" » BASM в DELPHI, проблема с Offset`ами [D7]
 
  • vastani (12.04.10 12:56) [0]
    приведу упрощенный вариант BASM проблемы, надеюсь решение всеже есть:

    procedure proba();
    asm
    @a:
      nop
      nop
    @b:
      mov  eax, (offset @b - offset @a)
      ret
      DW word( offset @b - offset @a)
    end


    Я привёл два места в коде (они нужны именно такими), которые ни в какую НЕ ХОТЯТ компилится как КОНСТАНТЫ, т.е. получается вроде, что BASM не в состоянии вычислить дельту между оффсетами и (offset @b - offset @a) для него неподдерживается??? Уж чего только не пробовал и скобочки дополнительные и другие извраты включая математические умножить/разделить на константу, все чушь и бред отчаяния, очень надо и вся задумка в проекте сводится на нет только от этой проблемы, ну не верится что нет выхода в ассемблерном блоке, может я не знаю просто. Почему: (offset @b - 100) - запросто, а дельта оффсетов - нет? Что не так?
  • Rouse_ © (12.04.10 15:39) [1]
     lea eax, @b
     sub eax, offset @a

  • vastani (12.04.10 16:03) [2]
    с регистрами можно попордоваться, понятно, НО таблица значений DW ...,
    которые хочется "втянуть" из ассемблерных исходников (рабочих и проверенных) в процедуру делфи и как BASM дает большое разочарование... неужели никак?
    Вынести DW ... в CONST скажем и оформить как ARRAY() можно, но тогда OFFSET`ы обрамлённые ASM.....END; как констаты в этот(и) массив(ы) не попадают никак... Неделю бьюсь, гуглю, рыщу, никакой зацепки не вижу.
    Все статическое, готовое и проверенное рассыпается, как мечта, неужели ручками все только динамически делать, т.е. в VAR создавать, и "наливать" их вычисляя дельты через некую придуманную дополнительную инициализационную подфункцию по некому параметру.... Жжжжуть и жесть!  Легче забыть, пожалуй про мечту. Нарвался я на вилы похоже.
  • Anatoly Podgoretsky © (12.04.10 17:09) [3]
    А так можно
     DW word(@b - @a)
  • vastani (12.04.10 17:54) [4]
    У меня на DELPHI 7 устойчивый "Inline assembler syntax error" в данном варианте, как и в массе предыдущих интерпретаций выражения в скобках. Хоть так,
    asm
    @a:
     nop
     nop
    @b:
     DW ( @b - @a )
    end;


    хоть еще че нить, не хочет гад константу посчитать....
    Быть может BASM человечески доработан на каком нибудь Delphi 2010  (CodeGear 2010)???
  • Сергей М. © (12.04.10 18:04) [5]

    > Все статическое, готовое и проверенное рассыпается


    Сотвори из "статического, готового и проверенного" obj-модуль и прилинкуй к дельфийскому проекту.
  • Anatoly Podgoretsky © (12.04.10 18:59) [6]

    > У меня на DELPHI 7 устойчивый "Inline assembler syntax error"
    > в данном варианте, как и в массе предыдущих интерпретаций
    > выражения в скобках. Хоть так,

    Я бы сначала написал бы как у тебя, и потом бы искал другое решение, как ты понимаешь, мне даже Дельфи запускать неохота.
  • vastani (12.04.10 21:54) [7]

    > Сотвори из "статического, готового и проверенного" obj-модуль
    > и прилинкуй к дельфийскому проекту

    делал так, но... это было первым вариантом, если быть кратким не подходит b гемора своего полно тоже...

    > Я бы сначала написал бы как у тебя, и потом бы искал другое
    > решение

    я и пишу какое решение мне нужно, сузив проблему до ЕДИНСТВЕННОЙ - получение в совокупности дельт оффсетов, как фиксированных констант в таблице значений DW ... и именно внутри ASM.......END;
    Последний мой пост - уже и конкретнее дальше некуда. Нужно обеспечить компиляцию именно ОТОГО участка. Если НЕ решить этой ерунды (казалось бы), то получается мой проект и задумка лишены смысла, либо перепахивать, как камикадзе весь ASM исходник так, чтобы он "нравился" этому кастрату - BASM.
    Не хочу DLL или OBJ решений, хотелось бы чтобы "все было родное" и отладчиком пошагово лазить, как у себя дома в IDE и редактировать и компилить соответственно...
  • Sha © (13.04.10 00:05) [8]
    Еще на BASMе неудобно программировать корчеватели.
    Совсем плохой язык.
 
Конференция "Начинающим" » BASM в DELPHI, проблема с Offset`ами [D7]
Есть новые Нет новых   [134433   +21][b:0][p:0.001]