2Four-F касательно Strings.mac

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asterix, 30 авг 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    обычно когда строку вставляют по месту длина ее не требуется, а если требуется
    то можно объявить заранее и юзать sizeof(str), то же самое и в масме, поэтому нет смысла
    курочить макрос ;)
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    не знаю как тебе, но конструкция типа
    Код (Text):
    1. invoke WriteConsole,esi,$CTA("test",szTest),szTest_length,addr tmp,ebx
    объявление по месту выглядит очень симпотично, улучшает читабельность, а значит стиль программирования
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Весьма спорно. В данном конкретном случае я лично не вижу большого смысла. Вывод текста на консоль - жутко тормозной процесс и вызов strlen для каждой выводимой строки никак не скажется на скорости работы. А каждый раз вызывать WriteConsole, передавая ей 5 параметров + париться определять временную переменную... совсем не улучшает читабельность. Я в таких случаях делал просто: определял одну функцию PrintConsole. Консоль всего одна (точнее три, но нужен только вывод), поэтому открывается она один раз в самом начале работы и её хендл запихивается в глобальную переменную и PrintConsole принимает всего один параметр.

    Код (Text):
    1. PrintConsole proc psz:LPSTR
    2. local dwBytesWritten:DWORD
    3.     .if psz != NULL
    4.         invoke strlen, psz
    5.         .if eax
    6.             mov ecx, eax
    7.             invoke WriteFile, g_hConsole, psz, ecx, addr dwBytesWritten, NULL
    8.         .endif
    9.     .endif
    10.     ret
    11. PrintConsole endp
    И тогда вывод статического текста действительно выглядит очень симпотично ;)

    Код (Text):
    1. invoke PrintConsole, $CTA("test")
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Four-F согласен, твой пример хорош :) но имхо всё же не лишнее, кроме вывода на консоль ещё есть обычные файлы, сокеты, где бы желательно на каждом шагу проверять результаты записи, наконец может понадобиться простоая програмка которая всего несколько раз вызыватет такого рода функцию, и из-за неё вбивать процедуру просто лень.
    Кстати почему Вывод текста на консоль - жутко тормозной процесс ?
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Не знаю, но если взять любую консольную утиль, которая выводит много инфы, то вывод в файл util.exe >> bla.txt происходит практически мгновенно, а на экран... ну очень долго.