Зачем в программе процедура окна, если она ни разу не вызывается?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 16 дек 2008.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Теперь про поиск. Я вчера не извинился (а надо было), что людям мозги запудрил с этим поиском. Но я действвительно не виноват. Забарахлило у меня CTRL+F. Во втором туториале не могу найти слово "прототип". И я в своём уме. Просто "про" находится, а "прот" уже нет. Не знаю, я что случилось. Так же и с поиском SW_SHOWDEFAULT было, возможно.
     
  2. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Файл winuser.h я не использовал. Никогда. Поэтому и не понимал, о чём идёт речь. И не как бы не понимл, а не понимал. Я за С уже месяца 2 не сажусь. Знаете, я все расширения забыл уже, яна них внимания никогда не обращал просто.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Y_MurСпасибо
    ...Там выше разведены понятия прикладного и системного программирования. Хоть картина проясняется.
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Y_Mur, ну и где же я тут не прав? Повторил полностью мои слова и еще отправил на учебу. А насчет QWORD в стек - скомпилировал. Получаем:
    Код (Text):
    1. 0040104A > > FF35 07404000  [b]PUSH DWORD PTR DS:[404007][/b]
    2. 00401050   . FF35 03404000  [b]PUSH DWORD PTR DS:[my_qword][/b]
    3. 00401056   . 83EC 02        SUB ESP,2
    4. 00401059   . 66:FF35 014040>PUSH WORD PTR DS:[my_word]
    5. 00401060   . A0 00404000    MOV AL,BYTE PTR DS:[my_byte]
    6. 00401065   . 50             PUSH EAX
    ну и где здесь запись 8 байт в стек? я так, простите, и 1000h положу. Так что я бы советовал внимательнее читать ответы в темах. Мои слова
    я считаю, что не были ничем опровергнуты. Иначе так и параметр String вместо PChar ввести можно (по аналогии с делфи). Мы в конце концов говорим про ассемблер, а не макросы. Пусть на голом асме положит QWORD в стек - хотелось бы на это посмотреть. А макросы - ни в коем случае к асму не относятся (как собственно и операционная система)

    Так что с матчастью у меня все на отлично!
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    amvoz
    Замечание к посту 60:
    Противоречий в приведенных цитатах не вижу.
    Да нет. Авторская. Как раз потому, что Вы сами пишете тело. И как раз поэтому транслятору совсем не обязательно о ней знать.
    Опять неверно. Вы уведомляете транслятор как раз только о тех функциях, которые импортируете извне. А для своих функций этого делать совсем не нужно.
    P.S. Прошу прощения. Разумеется, всё вышесказанное относится к компоновщику, а не к транслятору. Что же до транслятора, то ему просто нужно знать идентификатор на момент обращения к нему, независимо от того, чья эта функция: внешняя или Ваша собственная.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MSoft
    Ну тем не менее два байта в 32-битном режиме всё таки можно положить в стек. :) Через префикс 66h.
     
  7. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    и сколько байт в стеке они будут занимать?
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MSoft
    Я, вроде, написал: "Два байта". Да Вы посмотрите на свой собственный пример из поста 64. Выравнивание стэка на четырёхбайтную границу при отправке туда двухбайтного значения достигается искусственно: sub esp,2.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    MSoft
    а поскольку речь шла о прототипе функции то как я и показал - во первых существуют параметры (qword) которые соответсвуя одному аргументу в proto занимают не ровно 4 байта ;), а во вторых "значение имеет не только количество аргументов", а и их тип тоже, и если он не соответствует заявленному в прототипе то компилятор будет ругаться и не напрасно - это основная полезность invoke - предупреждать о возможности трудноуловимых ошибок при несовпадении типов, и чем меньше вероятность таких ошибок тем хуже, поскольку тем труднее их ловить при отладке ;).
    для простого помещения QWORD в стек это конечно не дзен, а для передачи функции результата своих FPU вычислений самое оно :))
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    l_inc
    выкидываю белый флаг и покидаю тему (с твердой убежденностью, что это не есть правильно/красиво/дзенно, но технически возможно)

    а как насчет QWORD?
     
  11. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    нуууу, еще б rep movsb предложил :)
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MSoft
    Это не мой спор. :) Но ИМХО Y_Mur прав, т.к. о QWORD говорилось в контексте числа и размера аргументов. Аргумент типа QWORD - один аргумент, занимающий восемь байт. Несмотря на то, что записывается в стэк он несколькими инструкциями. Ну и в конце концов можно говорить о 64-битном режиме.
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    а ещё и коварно ;))
    Код (Text):
    1. .data
    2.   szTitle db 'demo', 0
    3.   szBug   db 'глюк из-за стека',0
    4. .code
    5. start:
    6.      push ax
    7.      invoke MessageBox, NULL, addr szBug, addr szTitle, MB_OK
    8.      pop ax
    9.   invoke ExitProcess, NULL
    10. end start
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    l_inc
    авот здесь в корне не согласен. Ладно, тему я уже покинул полупобежденным :)