Неработает CreateFile. Помогите!!

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

  1. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Osen
    Рано еще msdn читать, лутше пускай Iczelion'а покурит, к тому же кто-то его примеры на fasm переводил. А то вдруг не понравится что вместо DWORD, там LPRECT или LPDWORD :) это же еще надо венгерскую нотацию учить, нафиг время свое тратить на это не благодарное дело. Лутшеэтовремякулмегапрограммистыпотратятнадополнительныебредовыевопросы.

    Semiono
    А в общем я вам советую на Visual Basic, программировать.
     
  2. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    777
    я сказал, что handle это значение, а bool это тип, хотя видимо это не важно (никому), програмирование ещё не привыкло ко мну...

    ----
    ага thnx! за Windows Data Types типы благодарю, ато я не увидел там, проглядел... угу!

    не сердчайте на мене, я справлюсь!
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Semiono
    Handle это тоже тип ;) ну пусть оно привыкает :)))
     
  4. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Semiono
    Тип и значение, не одно и тоже.
    Вдумайся в фразу: Переменная, типа А, имеет значение В.
    на яву (C):
    A var = B; //(в твоем случае HANDLE hVar = 0x12345678;
    на асме:
    var A B ;в твоем случае var HANDLE 0x12345678; или проще var dd 0x12345678
    То есть по сути в асме нет ТИПОВ как таковых, есть тока директивы, указывающие на размер переменной, dd (dword) dw (word) db (byte)
    Типы в асме пишут только чтоб было удобно просматривать листинг, сопровождать его. Так сразу понятно, для чего служит переменная (хотя часто это делает само имя переменной, например FileHandle или hFile)
     
  5. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    По сути в ассемблере переменных вообще нет :) А есть метки, вот они и выступают в роли переменных, и процедур(а что такое метка?, а это адрес в памяти, представленный ввиде имени). И это наглядно демонстрирует стандарт AT&T SysV/386.

    Мы все за вас! Справляйтесь!
     
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    777
    Ну да, если рассматривать асм как философию, то логика присутствует конечно!
    А если говорить об ассемблере как о сути происходящего, то это одни лишь биты, байты, да и то их тоже нет!.. Я лично не сторонник тех вещей, как обычно в книжках пишуть, что асм это язык или это не язык... это лишь досужий спор. Но когда надо вникнуть в сам код, нужны какие-то "очертания" мыслей, чтоб не потеряться. Я уже привык к некоторым програмистским понятиям, поэтому сразу за них ухватываюсь... венгерская запись FileHandle тоже рулёз =) Меня вообще поражает узкое применение фасма, мояб воля заставил всех выбросить си и переходить на асм - суть тот же си,
    я имею ввиду когда под win32 (:
     
  7. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Это не венгерская запись, это название переменной. К пример LPSTR, LPWSTR, lpStr, lpwStr или hFile - вот это венгерская запись имен типов и переменных соответственно.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Semiono
    Халиварщик, а то что у ассемблера портируемость хуже, это конечно ничего не значит.
    Да и на сях сейчас в основном пишут только жестяньщики.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    TermoSINteZ, Arthur
    Я бы всё таки не стал утверждать, что в асме нет ни типов ни переменных ;)
    Нет строгой проверки типов как в С++, требующей если обозывал переменную handle, то обращайся к ней либо только как к handle либо явно указывай, что хочешь её временно переопределить. Но для асма такая проверка явный перебор. Кстати не будете же вы утверждать, что в С без плюсов тоже нет типов - раз нет их строгой проверки :))
    И метки в традиционном понимании, это то, что размещается в сегменте кода и заканчивается двоеточием :), а имена переменных это то что предшествует директивам db, dw, dd и т.д. Кстати масм ругается когда метка с двоеточием попадает в сегмент данных и имхо правильно делает - не нужно валить эти понятия в одну кучу.

    В общем ваши рассуждения от типах и переменных применимы и к программированию вообще, но в Hi-level языках где язык оторван от реализации в машинном коде эти рассуждения менее очевидны ;)
     
  10. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Y_Mur
    Я не спорю что в Intel-стиле ассемблерах, особенно дитя баалы (да не опустится на меня гнев его, и его детей и последователей) присутствуют директивы определения данных (ака переменных). Я хотел сказать что ассемблер (имею ввиду транслятор) понимает переменную как простую метку, вот и все. Конечно я стер абстрактность, рассуждая о том что переменных как таковых не существует.

    А вот fasm'у чхать в какой секции (да-да именно в секции, а не сегменте, что это вам win32 - dos что ли) пишешь метку, имхо он по своему тоже прав :)
     
  11. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Y_Mur
    Согласен с вами, но всеже в асме нет типов, так же как и заметил Arthur нет переменных. Метка, говорит компилятору о нахождении некоторых данных\комманд, а директива предназначалась для интерпретации (в случае данных) при дальнейшем использовании.
    Смотрите:
    Код (Text):
    1. metk:
    2. db 1
    3. db 2
    4. db 3
    5. db 4
    6. ....
    7. start:
    8. mov ax,[metk]
    а можно и так написать
    Код (Text):
    1. metk:
    2. dw 1234
    3.  
    4. start:
    5. mov ax,[metk]
    по сути инструкция mov выполнится одинаково.
    Таких примеров много.
    Так что я не могу согласится только в одном
    ИМХО в традиционном ассемблере, метки как раз говорили компилятору адреса, которые он и подставлял в мнемокоды команд, для получения желаемого результата.
    И кстати для тех, кто не в курсе, изначально, когда программы писали в мнемокодах, адреса вычисляли в ручную, а потом придумали ассемблер и в большей степени, для возможности использовать метки.. ибо процедуры вычисления адресов слишком трудные по сравнению со знаниями мнемокодов. Поправте если не прав :)
     
  12. _Aspire

    _Aspire New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2008
    Сообщения:
    62
    Никогда бы не подумал )))))
     
  13. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    _Aspire
    Я имею ввиду не результат. А то, что в ax поместиться слово (то есть сгенерится mov ax, word ptr [xxxxx]) Данные взял произвольно.
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    metk:
    db 1 - это надо полагать в секции кода? по умолчанию запрещённой для записи? - тогда какая же это переменная? в лучшем случае константа :))) В секции .data masm такую конструкцию не съест ;) fasm в этом плане более демократичный, но имхо он не прав :))

    я бы сказал это верно для большинства компиляторов разных языков ;)
    Но чтобы метка превратилась в переменную, нужно к адресу добавить контроль размера этой переменной:
    .data
    myVar dd 123
    .code
    mov ax, [myVar] ; <- здесь компилятор скажет про неверный размер
    mov eax, [myVar]; <- а это сработает ;)
    так что переменная в асме это всё таки переменная а не просто метка :))

    А про типы - на асме можно писать программу с типами как в С, просто не будет строгой проверки со стороны компилятора (как и в С), так что про наличие типов в асме можно говорить в том же смысле как про наличие типов в С без плюсов ;)
     
  15. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Y_Mur
    а разница между:
    Код (Text):
    1.   myVar dd 123
    2. и
    3.   myVar: dd 123
    Ты же можешь в коде явно указать размер операнда в памяти.
    то что
    Код (Text):
    1.   mov   ax, [myVar] ; <- здесь компилятор скажет про неверный размер
    2.   mov  eax, [myVar]; <- а это сработает ;)
    компилятор опирается на размер регистра назначения :)
    А вот если указать
    Код (Text):
    1. mov   ax, word ptr[myVar]
    то он проглотит
    :derisive:
    Я то имею ввиду что типизация в асме совсем не причем. И изначально были метки а не переменные (потому что переменная, это и есть некоторая область памяти и на нее сылаются по адресу). Но да, время меняется.
    Но по сути спор ни о чем :) То, что не съедает масм, не значит что масм = тру :)
    ИМХО
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    TermoSINteZ
    word ptr - это как раз уже операция переопределения типа :))) т.е. конструкция подтверждающая что минимальная проверка типов всё таки есть :))
    в масме это полезное предупреждение о том, что код случайно залез в данные :) в fasmе оно менее актуально из-за его неспособности глотать конструкцию вида .data ... .code ... .data ... .code ... .data ... .code ...
    но ты конечно прав:
    и пора завязывать этот холивар :))
     
  17. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    777
    Мы ещё про обратную польскую нотацию не обсудили :derisive:

    А эта..., имею msg dd ? для выводов в кансоль, не подскажте как мне выводы корней и синусов в эту переменную наладить?
    То что FPU в st0 возвращает результ, а его чтол надо перевести в другой регистр или что?
    Напрямую нельзя mov [msg],st0 типа?
     
  18. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    почитай про FPU получше, статьи, книги.
    А по теме :
    напрямую к регистрам FPU обращаться нельзя.
    Можно сделать так:
    Код (Text):
    1. fstp var
    Но это будет результат в виде числа, которое понимает компьютер.
    Его надо будет конвертировать в строку (ANSI например) и дальше использовать.
    И используй поиск по форуму
     
  19. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    777
    Спасибо!
     
  20. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Y_Mur
    Как это? в fasm'e нет .data ... .code? Не обманывайте :)

    Код (Text):
    1. ; test.asm
    2. ; target: fasm/coff/windows32
    3.  
    4. ; link /SUBSYSTEM:WINDOWS /ENTRY:start test.obj
    5.  
    6. .code fix section '.text' code readable executable align 1
    7. .data fix section '.data' data readable writeable align 1
    8.  
    9. format ms coff
    10.  
    11. public _start
    12.  
    13. .code
    14. _start:
    15.         xor eax, eax
    16. .data
    17.         violet dd 0
    18. .code
    19.         ret
    это не переопределение типа, а ручное приведение размера операнда. Соответственно надо полагать что в AT&T SysV/386 жесткий контроль типов с постоянным приведением, вспоминая movb/movw/movl :)

    В ассемблере не важен тип, важен размер :) Хотя с другой стороны byte, word, dword, fword, qword, tword, dqword - это есть типы :)