Калашников.ru - Ассемблер? Это просто!.. (Выпуск № 022)

InterReklama Advertising

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

______________________________________

Выпуск N 022 (Специальный)

Сегодня в рассылке:

Ваши письма

Информация для ВСЕХ!!!

Ваши письма Сегодняшний выпуск, как я и обещал, полностью посвящен вашим письмам. Спасибо вам, дорогие подписчики, что присылаете столько интересной и полезной информации для других читателей! Если бы была возможность, то я бы опубликовывал ВСЕ ваши письма, но, к сожалению, это не всегда удается...

Hello, Олег!

В вашей рассылке и в другом материале встретил похожие вопросы:

Информация из рассылки:

Можно посчитать сколько раз за одну секунду процессор сможет сложить два любых числа от 0 до 65535. Каждая команда процессора выполняется определенное количество тактов. Когда говорят, что тактовая частота процессора 100Mhz, то это значит, что за секунду проходит 100 миллионов тактов.

Информация из другого источника:

Вопрос: Сколько циклов за секунду выполняет процессор с тактовой частотой 75 MHz?

Ответ: Один мегагерц выполняет 1.000 циклов в секунду.

Так кто же прав?

Best regards, Sasha

________

Мой комментарий.

И в самом деле? Наверное, я ошибся в рассылке. Может, кто-нибудь из вас знает ответ или другой вариант?

Вырезка с рассылки:

Еще, вероятно, вы слышали о том, что существуют вирусы, которые не удаляются из памяти при перезагрузке компьютера. Уверяю вас: это невозможно. Вирус находится в ОЗУ, которая очищается после выключени питания.

Письмо Артема:

Извините, конечно, но вирус может храниться и в BIOS. Может это и не совсем правда но Вам виднее...

Привожу наскоро слепленный алгоритм. Полностью не уверен, но, по крайней мере, до меня этого никто не делал:

Проверить на наличие Flash BIOS

Проверить Flash BIOS на зараженность (уходим, если заражен)

Считать вектор Int19 из таблицы (прерывание загрузки)

Прочитаем первые 5 байт из точки входа Int19.

Просканируем BIOS на наличие свободного места для вируса (нули)

Установим Flash BIOS в режим записи (обычно он в режиме ReadOnly)

Запишем вирус в найденную область нулей

Запишем переход на вирус на точку входа в Int19 (сплайсинг)

Поставим Flash BIOS обратно в режим "ReadOnly"

Похоже на работоспособный алгоритм.

Единственное предназначение Int19 - вызваться вовремя процесса загрузки, загрузить Boot сектор в память и передать ему управление. Прерывание именно то, которое нам и надо изменить.

У меня есть полный документ который я находил где в Интернет если вам интересно пришлю.

Артем. (http://www.mjk.msk.ru/~dron/)

________

Мой комментарий.

Насколько мне известно, вирус может записаться в CMOS. Там есть немного памяти свободной (примерно 14 байт). Но кто-нибудь сможет написать вирус, который бы занимал 14 байт (или хотя бы часть его, которая бы оказалась работоспособной)?

А может я уже от жизни отстаю, и разработчики увеличили объем свободной памяти в CMOS (Flash BIOS или еще где-нибудь)? Кто подскажет нам?

Олег, добрый день.

Как мне кажется, в программе вируса есть маленькое упущение. Дело в том, что одной проверки на ПРЕВЫШЕНИЕ длинны файла 64К - не достаточно. Ведь вирус ДОПОЛНЯЕТ длину файла собой, значит, при критической длине заражаемой программы - возможно превышение предела в 64 К после заражения, что вызовет ошибку. И вообще - это просто не очень корректно. Это то, что бросилось в глаза сразу по прочтении выпуска.

Возможно, Вы допустили эту ошибку умышленно, дабы "остудить" не в меру горячие головы... В таком случае, прошу прощения, что потревожил. Еще два слова - на мой взгляд, технологию работы с файлами (как я понимаю, именно она отрабатывалась в примерах) можно было бы изучать на более "мирных" объектах. Но это, конечно ИМХО.

С уважением, Игорь Вознюк

Security manager

________

Мой комментарий.

Спасибо Вам, уважаемый Игорь! Единственный человек обратил внимание на этот момент и написал мне. Но мне больше хотелось бы, чтобы подобные комментарии (уточнения, пояснения) приходили от людей, которые учат Ассемблер "с нуля" по нашей рассылке.

Я знаю, что среди подписчиков есть такие, кто уже знаком неплохо с языком. Почему обычно они присылают свои письма, указывая, что и где неточно?

Здравствуйте, Олег!

Ваш эксперт Slava V. совершил очень существенную ошибку в своем оптимизированном варианте - это использование инструкции Xchg. Эта инструкция на время своего выполнения захватывает системную шину памяти (префикс Lock), что может привести (и приводит) к существенным задержкам.

В связи с этим предлагаю свой вариант:

_________________

Count_dx proc

push ax

push dx

mov al, dh

cbw ;ax=dh

xor dh, dh

mov di,ax

shl ax,6

shl di,4

add di,ax

add di,dx

shl di,1

pop dx

pop ax

Count_dx endp

_____________

Пришлось написать небольшую программку на Паскале, с помощью которой можно сравнить скорости работы различных вариантов этого фрагмента. Вот ссылка http://akp.nm.ru/get_linear_test.zip (1,8Kb).

Вот такие результаты я получил на своем Celeron 433 (тестирование проводил под Win 98):

исходный вариант (т.е. тот, который был опубликован в рассылке - прим. О.К.) - 1,713 мс (*)

вариант Slava V. - 2,393 мс

мой вариант - 1,540 мс

* - вот вам и медленная инструкции mul :) Ядра 6-го семейства процессоров от Intel (кстати, и от AMD тоже) содержат существенно ускоренные инструкции умножения, деления в отличии от предыдущих семейств. Вот так :)

По поводу результатов выполнения на других процах конкретных результатов привести не могу, т.к. нет возможности.

Алексей.

P.S. Кстати, тут в голову пришла любопытная мысль. А почему бы Вам не расширить круг экспертов еще одним видом экспертов? Для оптимизации программ.

________

Мой комментарий.

Алексей, Вы молодец!

Поэкспериментировав с Вашей программой вместе со Славой (эксперт Slava V.), мы пришли к выводу, что на разных процессорах различных фирм те или иные инструкции выполняются гораздо быстрее или наоборот.

Слава очень хотел связаться и поговорить с Вами по поводу программирования, оптимизации и пр. Напишите мне, пожалуйста, могу ли я дать Ваш электронный адрес Славе?

Вопросы по оптимизации программ можно задавать теперь эксперту Алексею по адресу:

ExpertOptimize@eGroups.com

Если есть еще желающие стать экспертами в этой области - пишите мне!

Здравствуйте, Олег!

Имея опыт работы с языками низкого уровня мне трудно оценить твою работу. Для меня это повторение пройденного материала.

Есть один момент: мы рассмотрели создание вируса, но надо показать и создание антивирусной программы. Ведь Ассемблер опасен как и вилка, и народу надо показать созидательную сущность языка. Т.е. создание восстанавливающих программ (антивирусы, восстановление файлов после удаления и т.д.). И если неохота это делать в этом курсе, то этот вопрос надо (я так думаю) подробно отразить в книге.

Еще один момент: работая с языком, невозможно изучить его, набирая чужой код. Домашнее задание необходимо. А на следующем занятии производить разбор полетов. Не надо добиваться того, чтобы его высылали, надо просто показать как проблема решается. Алгоритмы можно поглядеть на http://www.chat.ru/~alglib/ (очень интересно для математиков и "крутых" программистов на мой взгляд - прим. О.К.). Хотя это дополнительная нагрузка на преподавателя.

С уважением

Евгений Смирнов

________

Мой комментарий.

Мы обязательно напишем антивирус. Об этом я писал в 20 выпуске рассылки.

Что же касается домашнего задания, то могу сказать следующее. В том же, 20-ом выпуске я попросил вас, уважаемые подписчики, написать и выслать мне (при желании) антивирус для нашего вируса (если вы сможете написать его сами). Очевидно, это задание оказалось слишком трудным для вас, т.к. я не получил ни одного (!) варианта! Как же так? Неужели действительно сложно было?

Я постараюсь, конечно, придумывать задания для вас по мере возможности. Но, думаю, что вы сами себе уже нашли неплохое занятие: кто-то сам уже пишет оболочку, кто-то резидентами увлекся, кто-то еще чем-нибудь. Если так, то я очень рад. Дерзайте, дорогие мои!

Например, Старчиков Алексей (http://www.vunder.newmail.ru/). Вот, молодец, парень! Постоянно присылает мне свои разработки, программы, с которыми знакомиться мне очень интересно. Но, к сожалению, у меня слишком мало времени...

Поэтому:

Надеюсь, что скоро напишу на Перле (сам!) программу, которая будет принимать у вас ваши варианты, мысли, предложения и пр. и опубликовывать их на сайте, что существенно упростит мне труд. Если вам будет не сложно, то сможете присылать все, что вы "состряпали" на сайт для всех (потом, когда скрипт будет готов). Надеюсь, что многие читатели нашей рассылки (да и не только) с удовольствием ознакомяться с вашим творчеством.

Здравствуйте, Олег!

Учебник Iсzelion'a по ассемблеру под Win32 http://win32asm.cjb.net/ вы знаете? Когда-то он мне очень понравился. На той же страничке есть неплохой транслятор Masm32.

С уважением, Олег Свенцицкий.

________

Мой комментарий.

Да, между прочим, это отличная вещь! К сожалению, только на английском языке пока. Однако, те кто хоть немного знаком с английским, смогут понять смысл и научиться программировать на Ассемблере под Windows.

Но не стоит спешить! Пройдите пока весь курс по DOS, иначе вы мало чего поймете!

Спасибо, Олег!

Информация для всех

Уважаемые новые подписчики!

Пожалуйста, обращайте внимание на размер высылаемого архива! Если вы не получили затребованный архив, то причина может быть в том, что ваш почтовый ящик либо набит, либо не принимает письма такого объема.

За все время существования kalashnikoff.ru ко мне вернулось всего два письма. Первое не дошло по той причине, что ящик был перегружен, а второе - не найден адресат:

___________________

----- Transcript of session follows -----

... while talking to mc4.law13.hotmail.com.:

>>> RCPT To:<kklopikk@hotmail.com>

<<< 550 Requested action not taken:user account inactive

550 5.1.1 <kklopikk@hotmail.com>... User unknown

___________________

Всего же отправлено было более 90 писем с архивами! Неужели у всех тех, кто отправил письма-запрсы не было выхода в Сеть, или связь была настолько ужасна?

Уважаемые подписчики, задающие вопросы!

Пожалуйста, обратите внимание, чем отличаются следующие экспертные группы:

1. Эксперты по ассемблерам (MASM/TASM) (Как сассемблировать программу? Что означают другие параметры в командной строке) - ExpertAssm@egroups.com;

2. Эксперы по общим вопросам программирования на ассемблере под DOS ("Посмотрите мою программу и исправьте ошибки". "Написал программу, а она почему-то не работает так, как бы я хотел. Что мне делать? Программу прилагаю".) - ExpertGeneralAssm@egroups.com.

Первая группа отвечает на вопросы, связанные с программой-ассемблером (MASM/TASM), а не с программированием на Ассемблере под DOS!!!

Если вы не знаете, почему не работает написанная вами по материалам рассылки программа (и прочие подобные вопросы), то задавать их нужно ВТОРОЙ группе!!!

Уважаемые эксперты!

Я очень рад, что наша экспертная группа начинает набирать обороты. Стало приходить много вопросов.

Я еще раз подчеркну, что если вы устали и хотите отписаться от группы, то необходимо просто направить мне письмо в произвольной форме с просьбой исключить вас. В письме, пожалуйста, укажите электронный адрес, по которому вы зарегистрированы.

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

Еще просьба. Пожалуйста, направляйте копию не по адресу assembler@beep.ru, а - Assembler@Kalashnikoff.ru. Даже если вы забыли, то ничего страшного! Предыдущий ящик еще работает.

Вроде всё!

Еще раз разрешите выразить вам, уважаемые подписчики, свою благодарность за присланные письма. Очень рад, что не забываете! Надеюсь, что и впредь мы все будем вместе. Я же, в свою очередь, постараюсь постоянно придумывать что-то новое, интересное для вас.

В следующем выпуске (скорее всего) напишем продолжение нашего резидента.

Удачи вам всем в изучении Ассемблера!

С уважением,

Автор рассылки: Калашников Олег

URL сайта подписчиков: http://www.Kalashnikoff.ru

E-mail автора: Assembler@Kalashnikoff.ru

ICQ: 68951340

Москва, 2001.

(C) Авторское право принадлежит автору рассылки. Использование материала из рассылки в коммерческих и иных подобных целях, а также публичное публикование без письменного согласия автора влечет ответственность за нарушение авторских прав. [Следующий выпуск] [На главную страницу]

u="u496.71.spylog.com";d=document;nv=navigator;na=nv.appName;p=1; bv=Math.round(parseFloat(nv.appVersion)*100); n=(na.substring(0,2)=="Mi")?0:1;rn=Math.random();z="p="+p+"&rn="+rn;y=""; y+=""; y+=""; y+=""; d.write(y);if(!n) { d.write("

Соседние файлы в папке Выпуски