Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


Служба Рассылок Subscribe.Ru

Дизайн рассылки разработан для Microsoft Internet Explorer 5.0+
при разрешении экрана 800х600+ точек

Сайт подписчиков
Архив выпусков
На сайте Kalashnikoff.ru Вы также можете: подписаться на рассылку FAQ по Ассемблеру, задать вопросы экспертам, зарегистрироваться в качестве эксперта, скачать архив выпусков, посетить форум программистов, оставить информацию о Вашем ресурсе и многое другое. Заходите! Мы ждем Вас!          
Ассемблер? Это просто!
Учимся программировать
Выходит с июня 2000 года
Автор:
Калашников Олег
c 2001, Россия, Москва. Авторское право принадлежит Калашникову Олегу Александровичу (Assembler@Kalashnikoff.ru). Запрещается публичное размещение материала из данной рассылки полностью или частично в коммерческих или иных подобных целях без письменного согласия автора.

Выпуск № 33
05 марта 2002 года
Выпуск подготовил: Вал.Ик.


 Сегодня в номере:

Информация для новых подписчиков

Уважаемые читатели!

Архив выпусков настоящей рассылки можно скачать по адресу http://asm.kalashnikoff.ru/dos.

Ваши вопросы можно задавать экспертам. Специальную форма находится по адресу http://kalashnikoff.ru/cgi-bin/Message.cgi.

Подписаться на рассылку "Ассемблер? Это просто! Учимся программировать (FAQ)" можно на головной странице сайта http://kalashnikoff.ru. В данной рассылке публикуются частозадаваемые вопросы по программированию на Ассемблере. А вот вопросы задаете вы, дорогие друзья.


Новости

Настоящий выпуск рассылки подготовил всем нам известный Вал.Ик. Так давайте все вместе выразим ему благодарность за предоставленный материал.

Огромное Вам спасибо, Вал.Ик!!!

Мы же с DivX'ом быстрыми темпами дописываем процедуры обработки сообщений на http://RusFAQ.ru.

Встречайте: "Hello, Windows от Вал.Ика".


"Hello, Windows!"

Начнем еще раз:

Ну, читал я, читал первый выпуск рассылки <Программирование под WindowsMemoBreakera. Не то что бы он мне не понравился, просто все как-то, на мой взгляд, сложно. Даже мне приходилось вникать в написанное и шевелить мозговой извилиной, после каждого абзаца заливая ее пивом. На мой взгляд, знания нужно влаживать в головы пользователей легко и непринужденно:) и не грузить их таким макаром, чтобы они аж пупырились перед монитором.

Тем не менее, ежели господин Калашников решится опубликовать сие произведение, должен всех предупредить - воды здесь гораздо больше, чем конкретной информации. Тем кто привык читать только справочники, советую ни в коем случае не читать эту писанину, так как она может внести в четкий и строгий ум некоторое смятение, которое в конце концов приведет к ненужным сомнениям и раздумыванию над смыслом жизни. За информацию же технического плана я несу полную ответственность, и хотя ее сравнительно мало, зато она полностью вылизана и, надеюсь, доступна. Об авторском праве.

Я авторское право не люблю. Обычно его не любят те, кто еще ничего не написал, и соответственно не может им воспользоваться. Я, в общем много всякого разного написал, но в основном по шахтной инженерии и грузоподъемным механизмам. Это в сети неинтересно. Но кому надо - могу порадовать:)). Когда-то много всякого было написано на Спектруме, программа для разгадывания японских кроссвордов для РС , ну и другое разное. Но дело не в этом... Авторское право я не люблю, так как привык знаниями делиться, а не продавать их. Вы будете смеяться, но по украинским законам Ньютон вполне мог бы оформить авторские права на пресловутое упавшее яблоко, как на <экспериментальный механизм или приспособление, доказывающее влияние, свойства или физические параметры изобретения>. И лопали бы тогда все яблоки с лицензионными марками фирмы Ньютон Ltd Inc:)). Не понимаю я также, каким образом авторские права защищают наши собственные знания. По-моему, использование наших знаний другими людьми должно вызывать гордость, а никак не обиду. А то что, эти люди достигнут более высокого положения с помощью наших знаний или подпишутся под нашими трудами, так в конце концов, мы учимся для себя или для окружающих? То что мы знаем, у нас уже никогда никто не отберет, в отличии от гонораров, регалий и самих авторских прав. Тем не менее я понимаю и не обижаюсь на людей требующих соблюдения своих авторских прав. И признаю право на существования авторского права:). Поэтому предоставляю авторские права на этот выпуск любому читателю или эксперту рассылки "Ассемблер? Это просто!":)


TASM

В большинстве источников по программированию на ассемблере используется пакет . Он свободно распространяется, доступен для скачивания из сети и подробно описан. Пакет TASM тоже в меру доступен, но кто-то недавно мне говорил, что это "коммерческий продукт, и поэтому его ни у кого нет":)))). Последний релиз MASMa датируется вроде бы 2000 (v6.15) годом плюс пакет MASM32 (v7.0) релиз 2001 года. Последний же пакет TASM (версия 5.0) датируется 1996 годом. Сами все видите... Кроме того "знающие мужи" не советуют использовать TASM для Win32. Тем не менее, в написании наших программ я буду использовать именно его. Ну во-первых я сам сижу на MASMe, и не прочь почувствовать себя комфортнее в TASMe, то есть подучиться вместе с вами. Во-вторых, Borland мне чем-то симпатичен, а к Microsoftу я отношусь с подозрением. Ну и в-третьих из чувства противоречия к "знающим мужам":) и поддержания репутации Turbo Assemblera. Ну а если кому-то это покажется свинством с моей стороны, то согласитесь - переводя наши примерчики из TASM в MASM вы будете изучать сразу два пакета, что несомненно лучше, если бы вы изучали только один:))).

Turbo Accembler на самом деле содержит два синтаксических стандарта языка ассемблер, которые включаются директивами MASM и IDEAL. Таким образом, те кто привык программировать на MASMе, могут добавить в самом начале программы директиву MASM и спокойно продолжать работать в своей среде. Вообще-то это даже громко сказано, на самом деле различия между MASM и TASM минимальны, и те кто программировал на MASMе без труда адаптируют приведенные примеры для своего пакета безо всяких переключений. В конечном счете единственный язык понятный процессору - машинные коды, то есть всего лишь на шаг ниже чем MASM или TASM . (Как это Intel не догадалась залицензировать все эти циферки, вот бы тогда ребята что в Microsoft, что в Borland попрыгали:)).

Но все это верно только для простых и несложных программ. Когда же функции WinAPI у вас в программе начнут исчисляться сотнями, вот тогда вы и заметите различия между MASMом и TASMом. Первый начнет как то странно себя вести, вольно обращаясь с дальними ссылками и стеком, и молча хитро улыбаться при компиляции функций из двадцати DLL-ек всем своим видом показывая, что гигантский баг в вашей программе вовсе не его дело и никаких ошибок он вам и за сто рублей не покажет. А TASM начнет тихо скулить, что вот, мол, он и мог бы скомпилировать, что вообще-то, конечно, можно, но все-таки он ассемблер, и не лучше ли вам перейти на С++, а его оставить в покое.

Одним словом - хозяин барин, и поэтому буду я использовать Borland Turbo Assembler 5.0, пока меня за это не арестовали или пока вам не надоем. А вы уж сами думайте - где же вам его взять?:)))))

Ну предположим, что вы нашли нечто подобное, пусть даже версии 4.х, но главное что бы был полный (ну хотя бы относительно) пакет. Это в общем и не важно, но тогда пример из сегодняшнего выпуска у вас не прокатит, и придется ждать следующего, где я расскажу как обойтись без поставляемых вместе с пакетом библиотек. Пока что вам необходимо установить (если еще не установлен) сей гениальный продукт (TASM имеется в виду) на диск. Например, на С:. Например, в папочку TASM. Он ее по умолчанию при установке сам пропишет.

Основные файлы которые нам потребуются из пакета TASM:

  • tasm32.exe - компилятор

  • tlink 32.exe - линкер

Они находятся в С:\TASM\BIN

  • import32.lib

Находится в С:\TASM\ LIB

Создадим папочку, ну скажем, PROBA в каталоге TASM и скопируем туда эти три файла. Всю эту процедуру мы проделали, чтобы пока не мучиться с прописанием различных путей к файлам и библиотекам, а спокойно все попробовать. В дальнейшем мы все-таки, пожалуй, пропишем эти всякие пути, что бы нас не ругали продвинутые компьютерщики за мусор на машине. Ну, а пока работаем в каталоге С:\TASM\PROBA, где у нас сейчас три файла: tasm32.exe, tlink32.exe и import32.lib.

Пока что я не буду рассказывать о всех ключах и режимах этих программ. Это тема отдельной статьи, которую я обязательно напишу. По ходу написания наших примеров  мы будем просто копировать эти ключи с минимумом объяснений. Ну и не надо кривиться! Я ж тут не цельную книгу пишу, а коротенькую (хм:) статейку!


Hello, world!: Боже, сколько можно:

Мдя-я-я-я:. Это ужас какой-то: Этот "Hello, word!" будет преследовать меня всю жизнь. Дэннис Ричи, наверное, был каким-нибудь хиппи-пацифистом или пай-мальчиком в круглых очочках, если придумал такую фразу для начинающих изучать язык. Хотя чего еще можно было ожидать от жизнерадостных американцев: Ну, да ладно. Учитывая, что и сама функция MessageBox тоже американского происхождения, пусть хоть текст, который она выводит будет нашенским. Ну, например:ну:ну:О! Пусть будет "Билл-гей. Тссс:".

Ну, значит, поехали: Сейчас мы будем ПИСАТЬ ПРОГРАММУ! Ежели у вас на фирме есть какой-нибудь программист, который во-вашему мнению, ни хрена не делает, а только мочит каких-то гадов из тринадцатого сектора, можете смело показать ему факельный палец, потому что вы сейчас будете заниматься тем же, что и он. Для начала примите гордый и глубокомысленный вид. И ждите музу: То есть вдохновения:Не пришло? Нет?.. Да: Ну попробуйте сходить за пивом. Я пока тут перезагружусь, а то модем-зараза. А, вы уже пришли? 1"> Ну, как ? Не пришло?.. Вот черт! Ну, попробуйте загрузить старый добрый Doom2. Да звук-то выключите! Обычно вдохновение приходит на восемнадцатом уровне... Ну? Ну? Пришло? Уря-я-я-я!!!! Пришло, таки!!! Вам повезло. Быстрее все бросайте и набирайте где-нибудь в редакторе (Где-где... Да хоть в Блокноте! Я вообще за редакторы собирался только в двадцатом выпуске рассказывать, если до него доживу....) следующую прогу. Вдохновенье! Вдохновенье!! Вдохновенье!!!...

.386
.model flat
extrn MessageBoxA:proc

.data

mb_text              db 'Билл - гей. Тссс:',0
mb_caption       db 'Моя программа!',0

.code

start:

push   0
push   offset mb_caption
push   offset mb_text
push   0
call   MessageBoxA
ret

end start

После таких диких усилий я сегодня уже ничего объяснять не в состоянии и могу посоветовать только одно: выползайте из-за компьютера и выходите на улицу. Покатайтесь в метро. Или посидите в пивбаре. Вдохновенье такая штука, что если оно приходит слишком часто, начинаешь путать его с шизофренией.

С уважением, Вал.Ик.

Все пинки, благодарности, критика и маты принимаются в неограниченном количестве по адресу: p_avtom@amk.lg.ua


В следующем выпуске:

  1. Кто здесь Где? (продолжаем мучать написанную программу)
  2. MessageBox: Почему такой? (продолжаем мучать написанную программу)
  3. У вас начались проблемы! (пробуем слинковать замучанную программу)
  4. На следующее утро: (что же мы написали)
  5. Интервью с Президентом. (Что думает О.Калашников обо все этом бардаке)

С уважением,

Управляющий:
Электронный адрес:
Адрес сайта:
ICQ №
Калашников Олег
Assembler@Kalashnikoff.ru
http://www.Kalashnikoff.ru
68951340
 
 
 
 
(C) 2002, Россия, Вал.Ик.


SpyLOG be number one SUPERTOP


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное