CyRax, поскольку я ассемблер пока тоже только постигаю, выстави
книгу-самоучитель по ассемблеру где-нибудь в доступном для скачивания месте.
Pavel.asm, я уже могу писать простейшие программы на MASM32 хотя месяца 3
назад мои познания были нулевые в асме.
Самым большим скачком в освоении ассемблера было все-таки установка этого
самого MASM32v8 + RadAsm
А все потому что RadAsm имеет свои шаблоны кода (Win32, DLL, Console, etc.)
поэтому изучение синтаксиса практически отпадает.
Очень помогла справка MASM32 + начальные знания англицкого и переводчик
"Сократ Персональный"
Также помогла книга Зубкова
http://www.zagzag.xaker.ru/asm/Asm_for_DOS_Windows_Unix.rar
Еще можешь посмотреть поверхностное (но довольно информативное) описание
того самого синтаксиса заголовочной части кода MASM32 который я мало изучал
http://www.zagzag.xaker.ru/asm/masm.rar
Хорошим стимулом для изучения ассемблера является поставление цели написать
программу (маленькую и быструю), у меня, напаример, это был мой SendKeyer
(его я раньше написал на VB), правда дописать не получилось, но опыта работы
с окнами я набрался
Также, после написания программы я пытаюсь ее всячески сжать и
оптимизировать (тут главное - не перестараться )
Какой по вашему мнению может быть размер у кликерочка
Trojan-Clicker.Win32.Small.ei ? И кто его автор?
И потом, писать серьезные проэкты чисто на асме - трудно, лучше применять
его там где требуется быстрая скорость.
ЗЫ
Кста, я сайт обновил - оцените, но плз не зафлудте хотябы этот топик - он
полезен, сам мучался когда учил асм, да и сейчас...
2 Morpheus: а ты даже асм ведь в руках ни разу не держал. А на постил. Ведь не за звезды живем. Для чего это? Если реальной помощи создателю темы ты не принес.Все- таки это как-то no manner.
Я не настаиваю на использовании RadAsm, но синтаксис учить с ним лучше:
- Есть автодописание команд и функций
- Подсветка
И синтаксис программной части учить легчу, а вот заколовки и секции не очень
Для программирования на ассемблере нужно понять его концепцию, а IDE лишь помогает тебе больее эффективно применить имеющиеся знания.
При программировании на ассемблере под Windows значительная часть необходимых знаний отпадает. С одной стороны это даже хорошо, т.к. всю рутинную работу берёт на себя Window's, остальное доделывает компилятор. Тебе остаётся лишь выучить команды и понять устройство регистров и организацию памяти. Ещё бы конечно неплохо знать основы информатики и способы счёта в различных системах счисления. В принципе всё, для программирования на ассемблере под Windows больше не нужно. Поэтому некоторые и говорят что программировать на ассемблере под Windows не просто, а очень просто.
Может раскажешь что из себя представляет плоская модель памяти? И какие еще модели бывают
Плоская модель памяти предоставляет тебе доступ ко всей памяти твоего процесса как к единому целому.
Кроме плоской ещё бывает сегментая модель, в котором в память разбита на участки по 64 кБ и для того чтобы адресовать большие участки памяти нужно записывать адрес в формате сегмент:смещение, где сегмент - это номер 64кБ-куска, а смещение - число в диапазоне 64 кБ.
Для большего понимания посмотри как описывают это эксперты из рассылки Калашникова:
1)Каким образом процесоры 80868088 адресуют память в 1мб?Откуда беруться ещё 4 бита(20-битное смещение)?
Адрес складывается из 2х составляющих: сегмент и смещение. Если у тебя имеется адрес, например 12345h, тогда у тебя сегмент: 1234h, а смещение 5h. Можно разложить и так: сегмент - 1230h и смещение 45h. Смысл такой: адрес=сегмент*16+смещение. А умножение на 16 и есть сдвиг сегмента влево на 4 бита! Отсюда смещение - 16 бит, и сегмент добавляет еще 4 бита. Успехов.
Ещё добавлю что смещение на 4 бита влево (умножение на 16) специфично лишь для старых (80286 и раньше) процессоров фирмы Intel, использующих 36-битную адресацию (20-битный сегмент и 16-битное смещение). Кстати современные процеесоры при включении тоже используют такой формат адресации. Windows при загрузке переводит процессор из реального (80286 и ниже) режима в защищённый (80386 и выше) и там изменяет модель памяти. И ещё, защищенный режим кроме того позволяет использовать тебе привелегии (так называемые кольца).
О чём это ты? Изучение синтаксиса ассемблера отпадает в результате использования шаблонов? Или я тебя неправильно понял?
На примерах всю жизнь было выучитьаться проще, чем на голой теории...
Или ты прочел уйму книжек по бейсику ?
Я не настаиваю на использовании RadAsm, но синтаксис учить с ним лучше:
- Есть автодописание команд и функций
- Подсветка
И синтаксис программной части учить легчу, а вот заколовки и секции не очень
Вообще удобная IDE, imho
Ещё бы конечно неплохо знать основы информатики и способы счёта в различных системах счисления. В принципе всё, для программирования на ассемблере под Windows больше не нужно.
Для программирования под Windows, имхо, надо знать хорошо API, и все ))
Копирование строк, и на то есть lstrcpy и пр...
Поэтому некоторые и говорят что программировать на ассемблере под Windows не просто, а очень просто.
Они не ставили перед собою воистину трудных задач
2CyRax, че это ты ударился в реальный режим? Желаешь BIOS запрограммить ? Или ось задумал?
На примерах всю жизнь было выучитьаться проще, чем на голой теории...
Или ты прочел уйму книжек по бейсику ?
Ты предлагаешь начать изучение ассемблера с Windows API, другие предлагают начинать с ДОС-а, ну а я предлагаю сразу учить сам язык не отвлекаясь на принципы функционирования системы. После того как ты поймешь что такое ассемблер и как он работает, изучить Windows API будет намного проще. Если же ты до знакомства с ассемблером знал API, то скорее всего знания твои лишь поверхностные, они основаны на принципе "так есть потому что так должно быть". Твоё ассоциативное мышление подбирает наиболее похожие для данного контекста понятия. Ну а если ты изучаешь интерфейс операционной системы имея в арсенале понимание принципов работы микропроцессора, только тогда ты начинаешь понимать в полной мере как функционирует операционная система и почему API устроены так или иначе и где Микрософт сплоховала, а где представила логически законченное решение.
Для программирования под Windows, имхо, надо знать хорошо API, и все ))
Копирование строк, и на то есть lstrcpy и пр...
Для программирования под Windows - да, но необязательно специализироваться в системных программистов для того чтобы изучить ассемблер.
Интерфейсы операционной системы несомненно облегчают работу системного программиста, но они существуют отдельно от языка микропроцессора, потому как придуманы не разработчиком процессора, а разработчиком ОС.
Хочешь ли ты быть системным программистом - это решать исключительно тебе, но не нужно навязывать такой принцип обучения другим. Если человек захочет, он сам спросит как программировать на ассемблере под Windows, но сейчас его интересует как программировать на ассемблере.
Если кто не знает, объясняю что такое Windows API.
Для того чтобы при программировании обратиться к какому либо устройству (видеокарта, клавиатура и т.д.) необходимо инициализировать прерывание BIOS этого устройства. В ДОС и Windows существуют обертки, позволяющие не вникать в принципы работы оборудования и выполнять стандартные операции удобным вызовом одной лишь функции. В ДОС это был набор функций, который был доступен по 33 прерыванию (&H21), а в Windows это так называемые API. Для того чтобы изучить ассемблер в полной мере конечно же необходимо опуститься до уровня ДОС'а, но с этого не нужно начинать изучение ассемблера.
Они не ставили перед собою воистину трудных задач
Может быть, я с ними лично не общался, поэтому вопрос стоит твой авторитет или их
2CyRax, че это ты ударился в реальный режим? Желаешь BIOS запрограммить ? Или ось задумал?
Ну может быть когда нибудь, в отдалённом светлом будущем А пока я просто отвечал на вопрос о моделях памяти. Вопрошающий прочтёт твой ответ, мой, ещё чей то и на основании этого составит более полную картину чем при однобоком описании.
Ты предлагаешь начать изучение ассемблера с Windows API, другие предлагают начинать с ДОС-а, ну а я предлагаю сразу учить сам язык не отвлекаясь на принципы функционирования системы.
Где ты в той цитате увидел Windows API !?
Ты же совсем недавно клялся что не представляешь себе ассемблер как язык... так чего-ж ты тут предлагаешь начать учить ?
После того как ты поймешь что такое ассемблер и как он работает, изучить Windows API будет намного проще.
Это чем же еще проще ? Глупости гришь )
Если же ты до знакомства с ассемблером знал API, то скорее всего знания твои лишь поверхностные, они основаны на принципе "так есть потому что так должно быть".
Ты ставишь под сомнение мои и твои знания ?
Твоё ассоциативное мышление подбирает наиболее похожие для данного контекста понятия. Ну а если ты изучаешь интерфейс операционной системы имея в арсенале понимание принципов работы микропроцессора, только тогда ты начинаешь понимать в полной мере как функционирует операционная система и почему API устроены так или иначе и где Микрософт сплоховала, а где представила логически законченное решение.
Э... ну-ка тут поподробней Что-же ты понял )))
он сам спросит как программировать на ассемблере под Windows, но сейчас его интересует как программировать на ассемблере.
Думаю что он попросту недоформулировал вопрос по неопытности, ибо все остальное ему сейчас не по зубам, да и незачем, собственно как и мне...
Хочешь ли ты быть системным программистом - это решать исключительно тебе, но не нужно навязывать такой принцип обучения другим.
Именно этим ты сейчас и занимаешься )
Чел спросил с чего начать, а ты строишь из ся гуру, и беднягу грузишь...
Для того чтобы изучить ассемблер в полной мере конечно же необходимо опуститься до уровня ДОС'а, но с этого не нужно начинать изучение ассемблера.
А че только до ДОС... Бери же ниже!
Может быть, я с ними лично не общался, поэтому вопрос стоит твой авторитет или их
Че сравнивать что-то в неисчислимых единицах условного обозначения... Ты это утверждаешь, те и ответ держать... Желаешь задачу что ты должен будешь влегкую реализовать, пожалуста: многомерный динамический массив UDT, загрузка и сохранение данных... Если на реализацию этого тебе потребуется менее чем два-три часа, и ты скажешь что написал это влегкую, я сниму перед тобой шляпу, и скажу что ты гуру ))
ЗЫ
Надеюсь ты понимаешь что этого не произойдет, т.к. это задачка не из легких, и даже уписавшись во время, ты покривишь душой если скжешь - "легко" ))
Ты же совсем недавно клялся что не представляешь себе ассемблер как язык... так чего-ж ты тут предлагаешь начать учить ?
Ассемблер может выступать и как язык. Я уже об этом говорил ранее - всё зависит от того как ты понимаешь его. Если ты воспринимаешь его как ЯВУ, соответсвенно и используешь его так же. Если ты понимаешь его как единственное средство разработки приложений, то конечно наиболее подходящими реализованными сопутствующими интерфейсами будут Win32 API.
Но опять же повторяюсь, зачем гнать лошадей и изучать API раньше ассемблера если есть инструменты, позволяющие изучить сам синтаксис (систему команд) не отвлекаясь на изучение интерфейсов? API не помогут тебе изучить ассемблер, они лишь автоматизируют работу с ОС. Представь что ты пришёл в школу, где не познакомившись с системой счёта сразу же начинают изучать формулы, облегчающие её применение. Здесь похожая ситуация.
После того как ты поймешь что такое ассемблер и как он работает, изучить Windows API будет намного проще.
Это чем же еще проще ? Глупости гришь )
Скажем так, он просто не поймёт как использовать те же API применительно к ассемблеру не зная принципов работы самого языка микропроцессора. И примеры, на которые ты так уповаешь расчитаны как раз на тех, кто с ассмеблером знаком, т.к. в них описывается лишь частный случай, причём вариантов реализации может быть намного больше чем в языках программирования, имеющих строгие правила. Типовое решение может подходить для данной ситуации, но не сработает для похожей, лишь немного отличающейся. В идеале, предлагаемый тобой способ обучения должен иметь примеры на все случаи, что теоретически реализуемо, но на практике за это ещё никто не брался.
Если же ты до знакомства с ассемблером знал API, то скорее всего знания твои лишь поверхностные, они основаны на принципе "так есть потому что так должно быть".
Ты ставишь под сомнение мои и твои знания ?
Я ставлю под сомнение практикуемый способ обучения ассемблера, по которому ты обучался. Не забывай что мой способ обучения был несколько иной, построенный на изучении машинных кодов. Так вот, я могу сказать что даже ассемблер ограничивает язык микропроцессора своими рамками, подводит его под свои шаблоны.
Чел спросил с чего начать, а ты строишь из ся гуру, и беднягу грузишь...
Я то как раз стараюсь помочь, а вот твоя цель похоже и есть показать свой непревзойдённый уровень мастерства, причём пользы от этого я не вижу. Показать свой уровень ты можешь косвенно, предоставив боле гибкий алгоритм или способ реализации.
Че сравнивать что-то в неисчислимых единицах условного обозначения... Ты это утверждаешь, те и ответ держать... Желаешь задачу что ты должен будешь влегкую реализовать, пожалуста: многомерный динамический массив UDT, загрузка и сохранение данных... Если на реализацию этого тебе потребуется менее чем два-три часа, и ты скажешь что написал это влегкую, я сниму перед тобой шляпу, и скажу что ты гуру ))
Ну так и кто затевает споры кто круче? Твоя мотивация видна невооружённым взглядом. Может как нибудь менее наглядно будешь это демонстрировать? Например объяснишь почему твой способ обучения быстрее (эффективнее)? А то до сих пор всё сводится к личным нападкам.
API не помогут тебе изучить ассемблер, они лишь автоматизируют работу с ОС.
Все познается в практике )) Под что практиковать человеку? DOS, Windows... Думаю для изучения проще программить под второе, хотя кто знает кому как...
И вообще, поясни что ты понимаешь под фразой "изучить ассемблер"... Что это по твоему? Если нечто иное чем программировать (практиковать), уволь, я асьма незнал, незнаю и знать не желаю... незачем!
Скажем так, он просто не поймёт как использовать те же API применительно к ассемблеру не зная принципов работы самого языка микропроцессора.
Там понимать нечего... Там и всего-то способы передачи параметров регистры/стек/флаги, соглашение stdcall но оно к асьму отношения имеет мало.
И примеры, на которые ты так уповаешь расчитаны как раз на тех, кто с ассмеблером знаком
Неговори глупостей, такого небывает... Чтобы примеры были для проффи - абсурд!
Компилим, отладчик в руки и вникаем!
В идеале, предлагаемый тобой способ обучения должен иметь примеры на все случаи
В идеале примеры нужны для усвоения азов которые в них же и даются. Глупости же гришь, всю жизнь примеры выступают в качестве керпичиков своей же мысли и создания проектов.
Голову на плечах - никто не отменял
Так вот, я могу сказать что даже ассемблер ограничивает язык микропроцессора своими рамками, подводит его под свои шаблоны.
Раз начал, так не таи, поделись накопленой информацией, просвети темного(ых)
Я то как раз стараюсь помочь, а вот твоя цель похоже и есть показать свой непревзойдённый уровень мастерства, причём пользы от этого я не вижу. Показать свой уровень ты можешь косвенно, предоставив боле гибкий алгоритм или способ реализации.
Извини, пытаюсь донести свою точку зрения )
Столь пафосные речи что у тебя мне ни писать ни выдумывать сил желания и времени нет ( А так бы тоже посочинял ) Так что изъясняться пытаюсь простыми формами )) Т.е. я считаю что изучение = справочник + примеры - рулез ))
Всю жизнь так все учил и считаю что это наиболее быстрый способ изучения и понимания.
Ну так и кто затевает споры кто круче?
)) Я не затеваю, даже мысли такой небыло. Просто послушать тебя - все легко и пушисто. Я предложил реальную задачу которую реализовать не так легко как хотелось бы ))
Чем учше способ?
1. Ты смотришь как выполняется код и что меняется. Все это происходит в реальном времени наглядно, просто, практично
2. Тебе не требуется запоминать конструкции, что делают, алгоритмы. Ты можешь смотреть на готовые, понимать, импровизировать, изменять, составлять свое.
3. Справочник требуется когда встречается что-то новое, незнакомое. Краткого описания, обычно, хватает чтобы понять. Пройдя инструкцию в отладчике, ты можешь реально посмотреть и оценить результат. Поразмыслить как можно добиться того же результата иными путями...
Что лучше, к примеру, обнуление
mov eax, 0h; xor eax, eax; sub eax, eax; and eax, 0h
Способов еще довольно много
4. Довольно непривычна, после ЯВУ, организация стека... Тут так же помогают примеры + отладчик... Соглась что реально проще понять что-то когда ты видишь, чем когда читаешь об этом.
уволь, я асьма незнал, незнаю и знать не желаю... незачем!
Ну и зачем тогда лезешь в спор если не знаешь?
Там понимать нечего...
Если ты что то не понял лучше спроси, а "всё знают" сам знаешь кто.
Неговори глупостей, такого небывает
Ты говоришь чепуху и если ты делаешь это ненамеренно, то я советовал бы тебе пойти подучиться.
В идеале примеры нужны для усвоения азов которые в них же и даются.
Это неверное утверждение. Примеры не раскрывают способов кодирования микропроцессора (или говоря твоими словами синтаксиса языка ассемблера). Они лишь показывают как применить их для программирования в MS Windows. Это очевидно и твоё упрямство настораживает.
Столь пафосные речи что у тебя мне ни писать ни выдумывать сил желания и времени нет
Для придумывания столь пафосных речей необходимы соответствующие знания. Получи их и будешь такие составлять с той же легкостью что и я.
Я не затеваю, даже мысли такой небыло. Просто послушать тебя - все легко и пушисто. Я предложил реальную задачу которую реализовать не так легко как хотелось бы
Хочешь чтобы я решил для тебя задачу? А своя голова на что?
1. Ты смотришь как выполняется код и что меняется. Все это происходит в реальном времени наглядно, просто, практично
2. Тебе не требуется запоминать конструкции, что делают, алгоритмы. Ты можешь смотреть на готовые, понимать, импровизировать, изменять, составлять свое.
3. Справочник требуется когда встречается что-то новое, незнакомое. Краткого описания, обычно, хватает чтобы понять. Пройдя инструкцию в отладчике, ты можешь реально посмотреть и оценить результат. Поразмыслить как можно добиться того же результата иными путями...
Что лучше, к примеру, обнуление
mov eax, 0h; xor eax, eax; sub eax, eax; and eax, 0h
Способов еще довольно много
4. Довольно непривычна, после ЯВУ, организация стека... Тут так же помогают примеры + отладчик... Соглась что реально проще понять что-то когда ты видишь, чем когда читаешь об этом.
Да ты не мне доказывай, а популярно изложи для новичков. Думаешь так тебя кто то поймёт?
Понимаю, тебе всё понятно из того что ты написал, но это непонятно другим, не имеющим соответствующих знаний, как к примеру тебе не понятны некоторые вещи, написанные мной.