Osen Рано еще msdn читать, лутше пускай Iczelion'а покурит, к тому же кто-то его примеры на fasm переводил. А то вдруг не понравится что вместо DWORD, там LPRECT или LPDWORD это же еще надо венгерскую нотацию учить, нафиг время свое тратить на это не благодарное дело. Лутшеэтовремякулмегапрограммистыпотратятнадополнительныебредовыевопросы. Semiono А в общем я вам советую на Visual Basic, программировать.
я сказал, что handle это значение, а bool это тип, хотя видимо это не важно (никому), програмирование ещё не привыкло ко мну... ---- ага thnx! за Windows Data Types типы благодарю, ато я не увидел там, проглядел... угу! не сердчайте на мене, я справлюсь!
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)
По сути в ассемблере переменных вообще нет А есть метки, вот они и выступают в роли переменных, и процедур(а что такое метка?, а это адрес в памяти, представленный ввиде имени). И это наглядно демонстрирует стандарт AT&T SysV/386. Мы все за вас! Справляйтесь!
Ну да, если рассматривать асм как философию, то логика присутствует конечно! А если говорить об ассемблере как о сути происходящего, то это одни лишь биты, байты, да и то их тоже нет!.. Я лично не сторонник тех вещей, как обычно в книжках пишуть, что асм это язык или это не язык... это лишь досужий спор. Но когда надо вникнуть в сам код, нужны какие-то "очертания" мыслей, чтоб не потеряться. Я уже привык к некоторым програмистским понятиям, поэтому сразу за них ухватываюсь... венгерская запись FileHandle тоже рулёз =) Меня вообще поражает узкое применение фасма, мояб воля заставил всех выбросить си и переходить на асм - суть тот же си, я имею ввиду когда под win32 (:
Это не венгерская запись, это название переменной. К пример LPSTR, LPWSTR, lpStr, lpwStr или hFile - вот это венгерская запись имен типов и переменных соответственно.
Semiono Халиварщик, а то что у ассемблера портируемость хуже, это конечно ничего не значит. Да и на сях сейчас в основном пишут только жестяньщики.
TermoSINteZ, Arthur Я бы всё таки не стал утверждать, что в асме нет ни типов ни переменных Нет строгой проверки типов как в С++, требующей если обозывал переменную handle, то обращайся к ней либо только как к handle либо явно указывай, что хочешь её временно переопределить. Но для асма такая проверка явный перебор. Кстати не будете же вы утверждать, что в С без плюсов тоже нет типов - раз нет их строгой проверки ) И метки в традиционном понимании, это то, что размещается в сегменте кода и заканчивается двоеточием , а имена переменных это то что предшествует директивам db, dw, dd и т.д. Кстати масм ругается когда метка с двоеточием попадает в сегмент данных и имхо правильно делает - не нужно валить эти понятия в одну кучу. В общем ваши рассуждения от типах и переменных применимы и к программированию вообще, но в Hi-level языках где язык оторван от реализации в машинном коде эти рассуждения менее очевидны
Y_Mur Я не спорю что в Intel-стиле ассемблерах, особенно дитя баалы (да не опустится на меня гнев его, и его детей и последователей) присутствуют директивы определения данных (ака переменных). Я хотел сказать что ассемблер (имею ввиду транслятор) понимает переменную как простую метку, вот и все. Конечно я стер абстрактность, рассуждая о том что переменных как таковых не существует. А вот fasm'у чхать в какой секции (да-да именно в секции, а не сегменте, что это вам win32 - dos что ли) пишешь метку, имхо он по своему тоже прав
Y_Mur Согласен с вами, но всеже в асме нет типов, так же как и заметил Arthur нет переменных. Метка, говорит компилятору о нахождении некоторых данных\комманд, а директива предназначалась для интерпретации (в случае данных) при дальнейшем использовании. Смотрите: Код (Text): metk: db 1 db 2 db 3 db 4 .... start: mov ax,[metk] а можно и так написать Код (Text): metk: dw 1234 start: mov ax,[metk] по сути инструкция mov выполнится одинаково. Таких примеров много. Так что я не могу согласится только в одном ИМХО в традиционном ассемблере, метки как раз говорили компилятору адреса, которые он и подставлял в мнемокоды команд, для получения желаемого результата. И кстати для тех, кто не в курсе, изначально, когда программы писали в мнемокодах, адреса вычисляли в ручную, а потом придумали ассемблер и в большей степени, для возможности использовать метки.. ибо процедуры вычисления адресов слишком трудные по сравнению со знаниями мнемокодов. Поправте если не прав
_Aspire Я имею ввиду не результат. А то, что в ax поместиться слово (то есть сгенерится mov ax, word ptr [xxxxx]) Данные взял произвольно.
metk: db 1 - это надо полагать в секции кода? по умолчанию запрещённой для записи? - тогда какая же это переменная? в лучшем случае константа )) В секции .data masm такую конструкцию не съест fasm в этом плане более демократичный, но имхо он не прав ) я бы сказал это верно для большинства компиляторов разных языков Но чтобы метка превратилась в переменную, нужно к адресу добавить контроль размера этой переменной: .data myVar dd 123 .code mov ax, [myVar] ; <- здесь компилятор скажет про неверный размер mov eax, [myVar]; <- а это сработает так что переменная в асме это всё таки переменная а не просто метка ) А про типы - на асме можно писать программу с типами как в С, просто не будет строгой проверки со стороны компилятора (как и в С), так что про наличие типов в асме можно говорить в том же смысле как про наличие типов в С без плюсов
Y_Mur а разница между: Код (Text): myVar dd 123 и myVar: dd 123 Ты же можешь в коде явно указать размер операнда в памяти. то что Код (Text): mov ax, [myVar] ; <- здесь компилятор скажет про неверный размер mov eax, [myVar]; <- а это сработает ;) компилятор опирается на размер регистра назначения А вот если указать Код (Text): mov ax, word ptr[myVar] то он проглотит Я то имею ввиду что типизация в асме совсем не причем. И изначально были метки а не переменные (потому что переменная, это и есть некоторая область памяти и на нее сылаются по адресу). Но да, время меняется. Но по сути спор ни о чем То, что не съедает масм, не значит что масм = тру ИМХО
TermoSINteZ word ptr - это как раз уже операция переопределения типа )) т.е. конструкция подтверждающая что минимальная проверка типов всё таки есть ) в масме это полезное предупреждение о том, что код случайно залез в данные в fasmе оно менее актуально из-за его неспособности глотать конструкцию вида .data ... .code ... .data ... .code ... .data ... .code ... но ты конечно прав: и пора завязывать этот холивар )
Мы ещё про обратную польскую нотацию не обсудили А эта..., имею msg dd ? для выводов в кансоль, не подскажте как мне выводы корней и синусов в эту переменную наладить? То что FPU в st0 возвращает результ, а его чтол надо перевести в другой регистр или что? Напрямую нельзя mov [msg],st0 типа?
почитай про FPU получше, статьи, книги. А по теме : напрямую к регистрам FPU обращаться нельзя. Можно сделать так: Код (Text): fstp var Но это будет результат в виде числа, которое понимает компьютер. Его надо будет конвертировать в строку (ANSI например) и дальше использовать. И используй поиск по форуму
Y_Mur Как это? в fasm'e нет .data ... .code? Не обманывайте Код (Text): ; test.asm ; target: fasm/coff/windows32 ; link /SUBSYSTEM:WINDOWS /ENTRY:start test.obj .code fix section '.text' code readable executable align 1 .data fix section '.data' data readable writeable align 1 format ms coff public _start .code _start: xor eax, eax .data violet dd 0 .code ret это не переопределение типа, а ручное приведение размера операнда. Соответственно надо полагать что в AT&T SysV/386 жесткий контроль типов с постоянным приведением, вспоминая movb/movw/movl В ассемблере не важен тип, важен размер Хотя с другой стороны byte, word, dword, fword, qword, tword, dqword - это есть типы