Здраствуйте, у меня цель выучить асм для разработки win32 приложений. Вопрос: стоит ли начать с 16 бит асма для дос или же сразу изучать асм32. Пожалуйста аргументируйте. Буду благодарен.
Особенно порадовала просьба аргументировать, может быть автору еще и статистику о сабже подобрать или диссертацию написать, чтобы ТС наконец таки решил "Какая же у него цель?"
skua Не кипятись Встречный вопрос: для того чтобы научиться управлять автомобилем стоит ли начать из далека-далека: запрягать лошадь, управлять телегой и т.п. ? Аргументированный ответ - нет, т.к. вместо того, чтобы давить на газ или тормоз будешь по привычке орать "но, пошла, родимая!" или "тпр-у-у" и с остервенением тянуть руль на себя
А я бы сказал, что необходимо начать с 16-битного ассемблера. Чтобы потом не задавать вопросов "что такое командная строка", и "я что-то запустил, у меня чего-то быстро выскочило и исчезло и я вообще не понимаю как чем пользоваться". Все-таки, виндовс ведет к отуплению как программиста, так и пользователя.
FatMoon Ерунду не говори Умение управлять лошадью никаким (положительным) образом не сказывается на умении управлять автомобилем или самолетом. А не знать всех тонкостей\хитростей устройства своего "железного коня" могут не только тупые блондинки, но и классные шумахеры или русские витязи. А копаться в потрохах - дело механиков, профессионалов или любителей. Одним словом - "лишь было бы желание, придет к тебе и знание" (С) skua Вольному воля. Надеюсь после освоения дос-а ты не будешь удивляться почему в выне int 21h и т.п. не работают - как говориться "забудьте все, чему вас учили в школе"
Знания принципов работы парового двигателя, двигателя внутреннего сгорания и дизеля в принципе не помешают даже конструктору реактивного самолета. Категорически против "управлять" - программист не управляет, управляет юзер. Юзеру до лампочки ДОС, совершенно согласен. Неудачная аналогия с лошадью - умение программировать в 16-битном, 32-х битном и 64-битном окружениях - это как раз эволюция паровая машина - внутреннее сгорание - реактивный двигатель )) Внутри у них одни и те же принципы, что котел, что цилиндр, что турбина - есть (некий объем) в котором (сгорает топливо) превращается энергия из одного вида в другой. Можно в общем виде посчитать КПД, термодинамические характеристики, и так далее, используя "двигатель вообще". Конструктору - глубокие теоретические знания (о даже не используемых в настоящее время предыдущих моделях) пригодятся.
Выучи просто asm, тогда не будет необходимости делить его на asm16 и asm32. Учиться писать под DOS смысла особого нет. В крайнем случае 16-разрядный код можешь компилировать в com-файлы и использовать в нем только функции BIOS. Основной упор лучше сразу сделать на разработке приложений под win32.
FatMoon Вот именно, что теоретические. Для того чтобы знать\представлять основы совершенно не обязательно досконально изучать и своими ручками разбирать\собирать по винтику реликтовый паровоз. Достаточно прочитать учебник или даже толковую научно-популярную книжку. Здесь же речь идет о совершенно конкретных вещах - "выучить асм для разработки win32 приложений" и для этого совершенно не обязательно засорять голову конкретными и многочисленными частностями программирования под дос - точно также, как и под линукс, IA-64 (Itanium) или еще какой-нить экзотики типа микроконтроллеров или специфических реликтовых ЭВМ. Причем речь не идет о том, что знание асма под дос вообще не нужно - в жизни все может пригодиться. Но для освоения программирования под вин32 это знание не нужно, многие без него прекрасно обходятся (и я в том числе) и не чувствуют себя тупыми, ущербными и обездоленными
я в целом не настаиваю, что доскональное изучение программирования под 16-разрядную ДОС или даже без нее - НЕОБХОДИМО. Но просто ради эксперимента, "хелловорлд" собрать хоть раз надо, без ИДЕ, через командную строку, для 16-битной системы. Не переубедите =) И совсем неплохо, если кто-то пытается int 21h вызвать под виндой - это стимул к постижению. А вот когда спрашивают, как что-то скомпилировать, потому что окошка с кнопками и меню нема, а командной строки ни разу не видели - это как-то неприятно. Это во-первых. Во-вторых, формулировка вопроса - "выучить асм", а не "выучить особенности операционной системы". "Выучить асм" можно хоть в дос, хоть на Спектруме. Суть в наборе команд, регистрах, способах адресации и в целом все. Выучить асм можно и на Кнутовской выдуманной машине, хотя она вообще не существует. Однако, читать Кнута мы порекомендуем однозначно, правда? Извините, но вызов АПИ-функций и логика винды (для того, чтобы сделать что-то с помощью АПИ-функции А, надо сперва инициализировать с помощью функций В и С некий объект, создать с помощью функции Д его экземпляр и сохранить указатель...) - это не ассемблер совершенно. Хотя это безусловно придется узнать, "для разработки win32 приложений".
В принципе кодинг под дос полезен разве что навыками работы с командной строкой, Norton Commander и достаточно простым реальным режимом (если пишете системные проги всякие). Большинство понятий, как, например, TSR, никогда больше не пригодятся. Но все же я советую начинать именно с этого. По крайней мере, я начинал (я знаю, что это плохой аргумент) с Borland C++ 3 (все помнят?) и ничуть не жалею. А потом еще был и чудесный ассемблер a86, о котором остались очень теплые воспоминания Оно нужно еще и для того, чтобы под голый защищенный режим потом проще кодить было. Чтобы не пугаться словам "прерывание" и "таймер". Так что, если вы не собираетесь писать загрузчиков (аля grub), операционок, не собираетесь писать под консоль в винде, тогда вам нечего делать и в досе. Начинайте с красивых гуйных программок с окошками, менюшками и прочими красивостями и не забивайте голову тем, как что работает внутри.
Сообствено хочеться ознакомится с низкоуровневым программированием дабы познать истину устройства микропроцесора. Просто я даже незнал с чего легче начать - тоесть с архитектурой по легче IA-16 или сразу IA-32 будет не так сложно врубиться. Ну и есть интерес разробатовать дополнительные приложения под движки написаные на с++.
В принципе, думается мне, некоторый смысл в том, чтобы начать с debug.exe и ассемблера под дос есть - чтобы разобраться, что есть на самом деле прерывания, обращение к операционке, итп. Но увлекаться не стоит, пару com'ов написать - и переходить к икзелиону.
skua Как написал Squash, прочтите на сайте wasm.ru раздел "Низкоуровневое программирование для дZенствующих". Еще рассылку Калашникова почитайте... Ну а потом уже прочтите Юрова "Assembler. Учебник для ВУЗов". Думаю, база будет =)