помогите чайнику !! cannot use 16-bit register with a 32-bit address

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

  1. mutate

    mutate New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    5
    начал писать под винду:

    инструкции такие

    .386

    .model flat,stdcall

    option casemap:none



    далее всяческий код, типа


    Код (Text):
    1.  
    2.   mov   esi, offset slpRootPathName
    3.   mov   edi, offset commandl_2
    4.   mov   ecx,2
    5.   rep   movsb
    6.  




    само собой проходит, но есть у меня много древнего кода, который я хучу тут использовать

    типа:


    Код (Text):
    1.  
    2. mov [si],al
    3. mov [di+3],dl
    4.  




    ну так ML его не пропускает:



    second.asm(154) : error A2155: cannot use 16-bit register with a 32-bit address

    second.asm(171) : error A2155: cannot use 16-bit register with a 32-bit address



    код рабочий, но править не хочу, дофига надо будет править.
     
  2. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    Раньше (в DOS) память была страничная и адрес ограничивался размером страницы 65536 (16-bit). А в Win32 можно писать в пределах 4-х гигабайт (32-bit).

    Поэтому если пишешь под Win32, то указатели используй 32-битные - ESI,EDI вместо SI,DI и т.п.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    В ДОСе небыло страниц. Там были сегменты, по 64 к .

    А вот страница по умолчанию 4 к весит.
     
  4. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    TermoSINteZ

    виноват - перепутал :)