Ошибка при компиляции

Тема в разделе "WASM.BEGINNERS", создана пользователем asd, 11 ноя 2005.

  1. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    вот код:

    call asd

    asd:

    pop ebp

    lea eax,[ebp+asd1-asd]

    asd1:

    внимание вопрос: почему компилятор выдаёт ошибку в строке

    lea.. ?

    error a2155: cannot use 16-bit register with a 32-bit addres
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    может у меня с компилятором геморой какой?

    компилирую: ml /c /coff /Cp proba.asm

    компилятор masm32 7.0 по-моему
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Вот так вроде должно работать (может быть ещё надо и offset перед asd1 и asd добавить) -
    Код (Text):
    1. lea eax,[ebp+[b]([/b]asd1-asd[b])[/b]]


    это баг masm.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    никакой это не глюк, нужно OFFSET юзать
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Убери скобочки вокруг offset'ов, и посмотри, какой это не глюк :derisive:





    ЗЫ: offset там совсем не обязателен.
     
  6. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    не, offset туда лучше ни записывать- masm какой-то левый код вообще может начать генерить.

    или как S_T_A_S_ сказал или
    Код (Text):
    1.  
    2.  call asd
    3.  asd: pop ebx
    4.         delta = asd1-asd ;макро переменная
    5.   lea eax, [ebx+delta]
    6.  asd1: nop
    7.  
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    нифига, в данном случае нам нужен адрес метки - значит OFFSET

    и ничего masm никогда левого не генерил
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Спасибо всем большое. Благодаря короткому lea код существенно уменьшился.

    lea eax,[ebp+(asd1-asd)] - работает без offset



    call asd

    asd: pop ebx

    delta = asd1-asd ;макро переменная

    lea eax, [ebx+delta]

    asd1: nop



    тоже работает



    lea eax,[ebp+offset asd1 - offset asd] - без () у меня не работает . Со () не пробовал.
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Asterix > в данном случае нам нужен адрес метки



    "Адрес метки" - это значение самой метки :) Так понимают и masm, и fasm, и даже С++.
     
  10. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    - ну это ты сгоряча... :)

    переодически глюки всплывают, однажды даже было: (2+4)*2 по мнению MASM-а почему-то равно 7 :)