Ошибки в строке? при нечетном кол-ве символов

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

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Выполняется следующий код:
    Код (Text):
    1.  
    2.     mov ebx,2
    3.     .REPEAT
    4.         mov al,byte ptr [StrRecv+ebx]
    5.         invoke  wsprintf,addr buf,addr format,al
    6.         invoke  lstrcat,addr textbuf1,addr buf
    7.         inc ebx
    8.         invoke  MessageBox,0,addr buf,0,0
    9.         mov al,byte ptr [StrRecv+ebx]
    10.     .UNTIL al == 124
    11.  


    MessageBox написал для проверки, посмотреть, что ж в буфере после выполнения. Заметил, что если длинна текста, который берется из hwndedit2 нечетная, то MessageBox как-то подозрительно выглядит, а если кол-во символов четное, то все ок. Даже не представляю в чем может быть проблема. Что я не так делаю?



    P.S. буффер объявлен как "buf db 256 dup(0)"
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    В каком смысле? Пытается удрать за пределы экрана?



    Неплохо бы знать, что в format'е находится.

    И вот так наверное лучше:


    Код (Text):
    1. [b]movzx    eax[/b],byte ptr [StrRecv+ebx]
    2. invoke  wsprintf,addr buf,addr format,[b]eax[/b]
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ActioN

    Это баг макроса invoke, который пытается преобразовать 8-битный операнд (al) в 32-битное значение, но делает это некорректно. Лечится так, как объяснил cresta. Имейте в виду, что размер любых значений в стеке должен быть кратен 4-м байтам! Иначе API-функции будут "странно" себя вести.
     
  4. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Странный MessageBox был без заголовка.

    В format'e находится "%d".

    cresta, Quantum, ура все отлично работает!!! Спасибо вам Большое и спасибо что существует такой прекрасный форум.