Структура TEXTEQU

Тема в разделе "WASM.BEGINNERS", создана пользователем russianbil, 22 апр 2008.

  1. russianbil

    russianbil New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2008
    Сообщения:
    8
    Может ли кто просветить об нюансах
    структуры TEXTEQU

    Пишу

    .const
    k1 textequ <bufer1>

    .data

    bufer1 db "111111111",0
    bufer2 db "222222222",0


    Далее сам код, собственно



    invoke ...........,addr k1...................

    Всё нормально выполняется

    А вот далее проблема:
    Хочу поменять значение k1

    k1=<bufer2>

    Далее снова код

    invoke ...........,addr k1...................

    Но значение k1 осталось прежним!!!
    Почему?

    Сама процедура большая, нужно повторить её 2 раза с разным параметром k1
    Не хотелось бы её два раза прописывать из-за всего одного параметра...
    И в макрос тоже нехочется...
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Можно оспользовать макрос REPEAT или IRP или как там он называется...
     
  3. russianbil

    russianbil New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2008
    Сообщения:
    8
    Это понятно, что можно.

    Но хотелось бы именно textequ
    такая удобная штука. Правда работает только по учебнику.
    Или я не знаю какого-то нюанса.

    (Также как я раньше не знал, что длинный jmp за пределы процедуры на нужную метку можно сделать,
    обязательно прописав метку
    не
    metka1:
    а
    metka LABEL FAR
    Тогда только на неё можно прыгнуть в любое место программы. Спасибо Юров подсказал...

    Вот и насчёт TEXTEQU
    Это же удобная штука!
    Но все тут молчат, словно сговорились!
    Партизаны, ау!
    Почему его использовать нельзя?
    Его что, боги используют, что ли?
    Кто нибудь знает, как можно обновить TEXTEQU ???

    Не нужно писать слово ГУГЛ, плиз.
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    russianbil
    не знаю для чего нужен textequ, но вот такой код работает точно (смотри ехе в аттаче)
    Код (Text):
    1. .686P
    2. .model flat
    3. include windows.inc
    4. includelib user32.lib
    5. extern _imp__MessageBoxA@16:dword
    6. .code
    7. start: 
    8. k1 equ bufer1
    9.     push MB_OK
    10.     push offset k1
    11.     push offset k1
    12.     push 0
    13.     call _imp__MessageBoxA@16
    14. k1 equ bufer2
    15.     push MB_OK
    16.     push offset k1
    17.     push offset k1
    18.     push 0
    19.     call _imp__MessageBoxA@16
    20.              ret
    21. .data
    22. bufer1 db "111111111",0
    23. bufer2 db "222222222",0
    24. end start
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    russianbil
    Вот такое сочетание тоже жизнеспособно
    Код (Text):
    1. .686P
    2. .model flat
    3. include windows.inc
    4. include user32.inc
    5. includelib user32.lib
    6. .data
    7. bufer1 db "111111111",0
    8. bufer2 db "222222222",0
    9. .code
    10. start: 
    11. k1 textequ <bufer1>
    12.     invoke MessageBox,NULL,addr k1,addr k1,MB_OK
    13. k1 textequ <bufer2>
    14.     invoke MessageBox,NULL,addr k1,addr k1,MB_OK
    15. k1 equ bufer1
    16.     invoke MessageBox,NULL,addr k1,addr k1,MB_OK
    17. k1 equ bufer2
    18.     invoke MessageBox,NULL,addr k1,addr k1,MB_OK
    19.     retn
    20. end start
     
  6. russianbil

    russianbil New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2008
    Сообщения:
    8
  7. russianbil

    russianbil New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2008
    Сообщения:
    8
    Спасибо.
    Вместо того чтобы менять значение так как Вы советуете

    k1 textequ <bufer1>

    Я писал

    k1=<bufer1>

    А то что можно поменять константу EQU вообще непонятно...
    Просто везде написано, что константу EQU уже нельзя изменить... Она прописана раз и навсегда...
    Можно поменять только textequ
    Оказывается, можно... ?
     
  8. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    russianbil
    Многие авторы заимствуют идеи друг у друга, не удосужившись перепроверить их, так что только практика и еще раз практика;)
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    russianbil
    http://wasm.ru/print.php?article=macrodesign