Переопределение инструкции mov макросом.

Тема в разделе "WASM.BEGINNERS", создана пользователем _Sl4yer, 21 авг 2009.

  1. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    Здравствуйте! Возникла проблема:
    Нужно переопределить макросом инструкцию mov. Для чего? Для удобства написания базонезависимого кода. По примеру будет понятно:

    Код (Text):
    1. macro mov arg1,arg2
    2. {
    3.    
    4.    
    5.    if (arg1 eqtype [0]) | (arg2 eqtype [0]) | (arg2 eqtype '')
    6.        
    7.         mov arg1,arg2
    8.    
    9.    else if (arg1 eqtype eax) & (arg2 eqtype eax)
    10.        
    11.         mov arg1,arg2
    12.        
    13.    else if (arg1 eqtype eax)
    14.        
    15.         mov arg1,dword[ebx + arg2 - DELTA]
    16.        
    17.    else if (arg2 eqtype eax)
    18.        
    19.         mov dword[ebx + arg1 - DELTA],arg2
    20.        
    21.    end if  
    22.    
    23. }
    Проблема вот в чем, пишу:

    Код (Text):
    1.     mov eax,eax
    2.     mov eax,1
    3.     mov eax,szTest
    4.     mov szTest,eax
    5.     mov eax,dwTest
    6.     mov dwTest,eax
    7.     mov dwTest,1
    8.     mov eax.[dwTest]
    9.     mov [dwTest],eax
    Получаю:

    Код (Text):
    1.   MOV EAX, EAX
    2.   MOV EAX, DWORD PTR DS:[EBX+FFBFEFEF]
    3.   MOV EAX, DWORD PTR DS:[EBX-12]
    4.   MOV DWORD PTR DS:[EBX-12], EAX
    5.   MOV EAX, DWORD PTR DS:[EBX-9]
    6.   MOV DWORD PTR DS:[EBX-9], EAX
    7.   MOV DWORD PTR DS:[401009], EAX
    В общем нихрена не то что надо. Мне нужна полная замена, и что бы там где надо учитывалась дельта. Возможно ли это? Господа подскажите пожалуйста, очень надеюсь.
     
  2. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    Прошу прощения, ошибка. Фасм предательски промолчал...

    Код (Text):
    1.    mov eax,eax
    2.     mov eax,1
    3.     mov eax,szTest
    4.     mov szTest,eax
    5.     mov eax,dwTest
    6.     mov dwTest,eax
    7.     mov dwTest,1
    8.     mov eax,[dwTest]
    9.     mov [dwTest],eax
    Код (Text):
    1.   MOV EAX, EAX
    2.   MOV EAX, DWORD PTR DS:[EBX+FFBFEFEF]
    3.   MOV EAX, DWORD PTR DS:[EBX-12]
    4.   MOV DWORD PTR DS:[EBX-12], EAX
    5.   MOV EAX, DWORD PTR DS:[EBX-9]
    6.   MOV DWORD PTR DS:[EBX-9], EAX
    7.   MOV EAX, DWORD PTR DS:[401009]
    8.   MOV DWORD PTR DS:[401009], EAX
    в первом коде в предпоследней строке была точка вместо запятой...
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    добавь else
    mov arg1, arg2
     
  4. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    max7C4, не, нефига..

    В общем, утро вечера мудренее:

    Код (Text):
    1. macro mov arg1,arg2
    2. {
    3.   if (arg1 eqtype DELTA) & ((arg2 eqtype eax) | (arg2 eqtype 0))
    4.  
    5.     mov dword[ebx + arg1 - DELTA],arg2
    6.    
    7.   else if (arg2 eqtype DELTA) & ((arg1 eqtype eax) | (arg1 eqtype 0))
    8.  
    9.     mov arg1, dword[ebx + arg2 - DELTA]
    10.  
    11.   else
    12.  
    13.     mov arg1, arg2
    14.    
    15.   end if
    16.    
    17.  
    18.    
    19. }
    Не работает только такая:

    mov eax,1

    конструкция. Хотя, вроде же явно указал.. не знаю даже.

    Ассемблируется

    MOV EAX, DWORD PTR DS:[EBX+FFBFEFEF]

    Как бы поправить, подскажите пожалуйста.
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    _Sl4yer
    Код (Text):
    1.   else if (arg2 eqtype DELTA) & ((arg1 eqtype eax) |[b] (arg1 eqtype 0)[/b])
    ?
     
  6. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    litrovith это меня с просони глюкануло \= скопипастил первое условие.
     
  7. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    _Sl4yer, та а хз что вы не скопипастили? почему бы не писать просто:
    Код (Text):
    1. mov eax, 1
    и
    Код (Text):
    1. My_mov eax, szTest
     
  8. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    люди не усложняйте себе "кодинг"!
     
  9. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    да это не понять наверно, в общем -то типа того вначале было, для учета дельты был отдельный макрос, но вот не устраивает меня так хоть убей \=

    Вот уж действительно не знаю, возможно ли сделать так как я хочу? Знатоки откликнитесь, а?
     
  10. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    _Sl4yer, жесть! молодёж что вообще не хочет думать?
     
  11. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    Да, действительно сглупил я что тему создал.
    Всем спасибо за внимание.