косвенное смещение... Проблемка...

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

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    buf db 20 dup (1)

    .code

    invoke strlen addr buf
    mov edx , eax

    ; А дальше проблемка... Если делаю так, работает...

    mov al , '5'
    mov addr buf+[edx] , al ; В конец строки пишем пятёрочку...

    ; Но если так, то не работает...

    lea esi , buf
    mov al , '5'
    mov esi+[edx] , al

    ; Комбинация [esi+edx} тоже... :-(

    : Где ошибка?
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Такого в системе команд ИА-32 не предусмотрено. Здесь и ошибка.
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Код (Text):
    1. mov byte[esi+edx],'5'
     
  4. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    mov byte ptr[esi+edx],'5'
    только тебе надо будет уменьшить значение возвращаемое после вызова lstrlen,так как твоя 'пятерочка' запишется как 21 байт,а длина строки 20...
    так что после вызова lstrlen поставь dec eax
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    mupsy
    > поставь dec eax
    Не факт, зависит от задачи.
    Если заменять последний символ, то декремент нужен, но нужна и проверка, что строка не пустая.
    Если добавлять в конец строки, то декремент не нужен, но нужна проверка, что не вышли за правую границу буфера.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну тут как бы только 2 варианта: или dec eax, или mov word ptr [...],'5'
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Чего такого не предусмотрено?
    Код (Text):
    1. mov [edx+esi],al
    Отлично компилируется и работает.
    TOLSTOPUZ ты в начале исходника .386 или выше поставил?
    Может у тебя код 16-битный генерируется...
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Вот чего:

    mov esi+[edx] , al