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

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

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

Выпуск N 031

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-07-03


Книга рекордов

2 июля 2001 года Эксперт по законодательству Сергей набрал 175 баллов и получает одно из поощрений, предусмотренных Правилами! Выражаю свою благодарность! Так держать!!!


Новая программа управления письмами

Продолжается работа над созданием АБСОЛЮТНО НОВОЙ программы, управления письмами (вопросами / ответами). Получается очень даже неплохо. Вас ожидает множество новых возможностей как для экспертов, так и для подписчиков. Уверяю Вас: это будет очень интересно!!!
Я учел все ошибки и недоработки прежней версии, исправил и дополнил программу.

Поделюсь по секрету одним нововведением: подписчики смогут отправлять вопросы не только через специальную WEB-форму (которой сейчас все пользуются), но также и по почте, что будет обрабатываться автоматически. Более того, сами эксперты смогут отправлять ответы по почте. Уверен, что многие оценят новую возможность!

Спасибо за внимание!

Вопрос №252

Хочу замутить прогу, которая бы сидела резидентом и всем мешала...
Моя резидентка под DOSом работает,под Виндой-ни шиша. Как сделать резидентную программу для Винды? Или, если у кого есть прога, которая сидит резидентом и записывает в файл все нажатые клавиши, вышлите мне на sania@vpcit.ru.
Удачи!!

Ответ

Здравствуйте, RC!
Вы спрашиваете как сделать резидентную программу под винды?
Значит так. При программировании под DOS вы используете прерывания. Ни одна программа Windows их не использует. Windows - это СОВСЕМ другая операционка. Windows - операционка защищенного режима тогда как DOS - реального. Cоздание резидента под Windows пишется совсем по другим правилам. Там перехватываются не прерывания а VXD-функции (таие как VKD_filter_keyboard_Input или IFSMGR_Ring0_FileIO ) Для перхвата событий файловой системы обычно устанавливают обработчик файловой системы с помощью функции IFSMGR_Filesystemapihook.
Это все можно сделать только сев на системный (самый высший) уровень привилегий. Этот уровень имеют только VXD-драйвера (следовательно вам нужно писать VXD-Драйвер) а также иные системные утилиты которые грузятся ДО GUI WINDOWS. Либо можно нелегально проникнуть с третьего (самого низшего уровня привилегий на котором седят большинство WIN32 Applications ) на нулевой уровень и перехватить VXD-функции. Делается это например изменением таблицы дескрипторов прерываний (а не векторов прерываний) расположение которой можно узнать с помощью команды sidt. затем вызывется прерывание и вы попадаете на ring0 (так делает например небезызвестный WIN95.CIH).


Отправил эксперт: Евгений
Эксперт отправил ответов (всего): 9

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №263

Эксперт Александр, большое спасибо за помощь!!!
У меня ещё есть вопросы:
1. Как ты думаешь "ptr = [ ]" или не равно ???
2. Если хочешь, то пришли мне свой e-mail, чтобы не загружать ни сервер ни других (экспертов и чайников)
3. Я тут в отладчике помучался и вот информация для размышления (в приложении).

Я заметил то что после "ptr" можно сколько угодно квадратных скобок ставить код от этого не изменится. Может это и не правильно для некоторых случаев. Я неуверен.
Интересные вещи с комбинацией операторов происходят !!!
Нельзя записать так : "jmp word [ia]", нужно "ptr" добавить или "[DS:IA]".

Кто хочет давайте разберёмся в "jmp","ptr" и "[ ]".
VK

Ответ

Здравствуйте, VK!



ptr и [] не имеют ничаго общего

ptr - оператор (или диретива? вопшем не важно)

приведения типов. т.е. для явного указания типа

операнда в команде. например у тебя есть A dd 1

а тебе надо засунуть его в байт. вот туто и нужен ptr.

а [] - указывают, что внутри их находтся адрес, по которому надо

чтото взять, или перейти. это называется "косвенная адресация",

если не ошибаюсь. напр: mov ax,[cx] - засунуть в ax слово по адресу
ds:[cx]. тоесть в сегменте ds со смещением = cx.

а jmp - это просто команда дальнего/ближнего безусловного перехода.
"дальность" зависит от размерности операнда. word или double word (aka dword)





Отправил эксперт: Event
Эксперт отправил ответов (всего): 4

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №254

Ув. эксперт sasha!
Z и так знаю что делает "jmp dword ptr cs:[Int_21h_vect], где "Int_21h_vect" содержит 4 байта с устанавливаемыми IP и CS в данном порядке (сначала IP, потом CS)".

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!Я не понимаю как она это делает !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Если можешь то ответь подробно:
1. Я не понимаю как действует DWORD вместо обычного WORD (напр. "jmp Label1" - при ассемблировании ассемблер заменит Label1 на смещение в сегменте куда загружена моя программа, я прав ?)
2. Я вообще не понимаю смысла и расшифровки "ptr".
3. Почему записано так: CS:[Int_21h_vect], как это понимать и чему это равносильно ???
4. Какие ещё возможности предосталяет "jmp" ???
Пожалуйста, помогите разобраться, кто хорошо знает оператор "jmp" !!!

Ответ

Здравствуйте, VK!

1. dword отличается от word как word от byte. т.е. в два раза

byte(байт)=1б word(слово)=2б dword(двойн. слово)=4б qword(4хСлово)=8б.
а заменит на смещение, если это word, т.е. 2байта.
если будет dword то заменит на сегмент:смещение. должно быть так.
2. что е ptr сказано выше и раньше.
3. равносильно это cs:[XXXX], если вместо ХХХХ написать смещение метки Int_21h_vect. это обращение к дальнему адресу.
4. jmp дает возможность дальнего/ближнего перехода б/условий. всё.


Отправил эксперт: Event
Эксперт отправил ответов (всего): 5

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №241

Уточняю:
Версия ТНЕ ВАТа 1.47 Хеллоуин.
Говорит: 'connection finished - 0 of 1 messages sent'
Сервера: hotbox.ru; inbox.ru; mail.ru

Ответ

Здравствуйте, Al Capone!

чширт. Ну, может это шутка такая на хелловин...

а вопшето он говорит не только connection finished.
он делает примерно такой лог:
23:21:44: SEND - connected to SMTP server
23:21:45: SEND - sending message to xxx@yyy.ru
23:21:45: SEND - The last address submitted was
23:21:45: SEND - Message has not been sent. Server reply: "ERROR"
23:21:47: SEND - connection finished - 0 of 1 messages sent
так вот, нас интересует то, что "ERROR". там обычно причина, почему не шлет. вот если там пусто, тогда уже надо чтото думать. например поступить, как советовал Andy Bitoff.


Отправил эксперт: Event
Эксперт отправил ответов (всего): 6

Экспертная группа: Пользовательская работа с Windows

Вопрос №265

Господа экспрерты!
Сделал всЈ, что мне сказали на Hotbox'е и остальных серверах.
ВсЈ равно пишет:
...SEND - sending mail messages - 1 messages in queue
...SEND - Could not connect to server
...SEND - connection finished - 0 of 1 message sen

Ответ

Здравствуйте, Al Capone!

Нажмите в bat'е ctrl-shift-P, либо Account->Properties
Перейдите в папку "transport".

В поле "SMTP server" должен быть указан smtp-сервер соответственно каждому из mail-боксов.
В Вашем случае просто замените "pop." на "smtp.".
Также проверьте значения портов сервисов на вкладке "Mail managment"
pop3-110, smtp-25.

Если не поможет, значит провайдер закрыл соответствующие порты.


Отправил эксперт: Стас
Эксперт отправил ответов (всего): 6

Экспертная группа: Пользовательская работа с Windows

Вопрос №267

Приложенная программа - нерабочий вариант моего "звездного неба". Проблема вот в чем. Как только погасает хоть одна звезда - начинаются глюки. Почему я незнаю.
Алгоритм таков. В видео-память тыкаеться рэндомом NUMBER_OF_STAR звезд в случайной фазе (т.е. в разной степени "загара"). Далее просматривается видеопамять на наличие байтов отличных от BLACKCOLOR, т.е. звезд. При нахождении звезды она становиться ярче, а если ярче нельзя (т.е. когда звезда равна WHITECOLOR), она гаситься и добавляеться еще одна звезда. Вот при этом и происходят глюки. Прошу помочь. Отладка программы осложнена тем, что не TD не CV с видеопамятью корректно не работают (или может я не до конца разобрался).

Ответ

Здравствуйте, Stepan Yar!
Не понял где у тебя глюки. Единственное, что твой генератор "случайных" чисел выдает одну и ту же повторяющуюся последовательность каждый запуск. Да к тому же с такой явной неравномерностью... Лучше бы ты функцию rand() из языка Си взял, что ли.


Отправил эксперт: Александр
Эксперт отправил ответов (всего): 50

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №266

Здоравствуйте!
Мне интерестно сколько можно заработать на shareware soft'е.
Кто-нибудь из российских жителей зарабатывает так деньги ?
Может кто поделится знаниями о заработке на sharewere ?
Может кто подскажет где можно подробно узнать об этом.

Ответ

Никак я не понял - причем тут программирование на АССЕМБЛЕРЕ ПОД ВИНДУ!!

Можно заработать МИЛЛИАРДЫ ДОЛЛАРОВ!!! И Дядя Билли (чтоб ему неладно) этому ЛУЧШИЙ ПРИМЕР!

Конечно зарабатывают Примеров тучи (АВП, ДрВэб, Вампир, прочие).

А чего тут делиться-то?? Пишешь нужную людям программу. Регистрируешься где нить в америк (там спрос больше) и все. жди.

Поищи в неовом журнале Хакер. Мне сказали, что там это есть. зайди на www.xakep.ru и поищи там.


Отправил эксперт: K.A. NiCK
Эксперт отправил ответов (всего): 36

Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32

Вопрос №264

Здравствуйте, эксперты!
Я пользуюсь редактором TeX. Дома у меня стоит Win98 и всё отлично работает. На работе у меня NT4.0 с Service Pack 6. При запуске (из FAR или из PIF файла) выдаётся сообщение "Cann't execute tex386.exe". Что бы это значило?
Надеюсь на вашу помощь.

Ответ

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

Скорее всего, необходимо прописать в autoexec.bat путь к директории, где TEX завалялся, то бишь, например:
set path=c:\tex
если с:\tex - путь к той самой директории.


Отправил эксперт: Spartak
Эксперт отправил ответов (всего): 1

Экспертная группа: Пользовательская работа с Windows

Вопрос №260

Приветствую всех! Плиз, если вам не тяжко, расскажите можно ли в защищенном режиме использовать прерывания BIOS/DOS и каким образом (если такая возможность есть). Спасибо, что ответили.

Ответ

Нет нельзя.
DOS и BIOS функционируют только в реальном режиме.
В защищённом режиме совершенно иной способ обработки прерываний,т.е
реальный и защищённый режимы обработки прерываний - не совместимы.
При переходе в защ. режим фактически приходится переписывать все основные функции DOS.


Отправил эксперт: Oleg G.
Эксперт отправил ответов (всего): 4

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №270

Салют в вашу честь!
Не подскажете, как читать и записывать информацию на сектор жесткого диска в обход всяких прерываний типа INT 13h, то есть работать с винчестером на уровне портов ввода/вывода?
Заранее благодарен.

Ответ

Здравствуйте, Владимир!
Читать и записывать информацию на сектор жесткого диска можно с помощю
интерфейса "АТА"
Что это такое:
АТА- это стандарт позволяющий подключать к каждому каналу(то есть к одному кабелю) по 2 устройства и соответственно управлять ими. Например если ваш компьютер поддерживает четыре канала, то вы можете
подключить 8 дисководов с интерфейсом этого типа.
Для адресации данных на диске с интерфейсом АТА можно использовать режим LBA-линейной адресации или CHS-режим цилиндр-головка-сектор(режим работы дисковых функций BIOS'а). Наиболее полную информацию
об этом интерфейсе, об адресах портов ввода вывода вы можете найти в справочнике Кулакова "Программирование на аппаратном уровне"(изд-во "Питер"),или пишите по адресу
barfly@mail200.ru ,т.е мне - помогу чем смогу.


Отправил эксперт: Oleg G.
Эксперт отправил ответов (всего): 5

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №257

Privet, experti !

A 4to eto za FLASH BIOS i mojno li zapisati v nego
programmu ? Rastolkuite 4ainiku, please.

Spasibo.

Ответ

Здравствуйте, Evgenii!
Tut sodergitsa BIOS
Zapisat` - da kone4no mogno!
FLASH - po russki eto PPZY - programmiruemaia PZY
dlia zapisi est` spetc progi
Ia naprimer nedavno pereshil svoi na Asus P2B dlia poddergki PIII


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 5

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №188

Уважаемые эксперты!!!
Ответьте мне пожалуйста на такой вопрос:
Как избавиться от "пустого места в файле", которое
возникает в связи с использованием конструкции типа
buffer db 2048 dup(0). Дело в том, что для ускорения
работы одной из моих программ необходима работа с длинной
строкой считаных байтов. С реализацией проблем нет, но вот
файл .com - формата получается аж на 2-4 кило тяжелее, и
все сражения за свободное место оказываются тщетными.
Нет ли возможности просто читать байты "куда-нибудь",
т.е. просто на какой-то адрес, т.е. определить какую-то
область ОП под это дело. Может это какой-то директивой
делается, или ещё как-нить. Словом, буду благодарен за
любую помощь. И ещё. Опубликуйте пожалуйста хотя бы
несколько адресов, где можно скачать РУССКУЮ(на русском)
документацию для особо одарённых детей(проще говоря,
чайников), по программированию на tasm и masm под окошки
билли. Дос бесспорно ещё интересен, но хотелось бы писать
уже и под винду, тем более что по размеру проги как ни странно
получаются ненамного больше. С уважением. Заранее благодарен.
aili(aili@mail.ru)

Ответ

Размести этот буфер в конце сегмента данных, в результате он не будет включен в размер com файла.


Отправил эксперт: Dron
Эксперт отправил ответов (всего): 28

Экспертная группа: Оптимизация программ

Вопрос №260

Приветствую всех! Плиз, если вам не тяжко, расскажите можно ли в защищенном режиме использовать прерывания BIOS/DOS и каким образом (если такая возможность есть). Спасибо, что ответили.

Ответ

Здравствуйте, Воинствующий ламер!
А через V86 не судьба????????


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 21

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №248

Зрдрасте экперты!
Вопрос (нет скорее просьба) 0.
Помнится начинал я учится асму с рассылки "Низкоуровненое программирование для ДZенствующих". И там мы начинали с такой мозгопрочищающей программы DEBUG (есть у всех, ну или почти у всех). Так вот стал юзать Вынь Ме и Вынь 2000, а на них Дебагер ругается мол "Неправильная версия MS-DOS" и все тут. Я не совсем разбираюсь в EXE-шках, вы не подскажите, по какому смещению в сегменте кода нужно забить NOP-ами код проверки версии Доси в отладчике АФД или Кодевиевер (если вычисление этих адресов представляется возможным). Ответы типа: "Забей на DEBUG и пользуйся АФД" не приветствуются! Уж больно ДZенская программа эта - DEBUG.
Вопрос 1.
Написал ма-аа-леньку прогу, которая напрочь убивает прерывание int10h (прилагаю) и сидит резидентом, ну пока на резет не нажмешь. Я че хотел получить, чтобы у меня экран был чистый, ан нет Нортон свои панели все-таки выводит, а вот Досовский редактор (c:\windows\command\edit.com) ваще работает без проблем, т.е. текст выводит на экран. С чем это связано? Не с тем ли, что ентот редактор не использует видео севис Биос int10h, а пользуется прямым отображением в B8000h - буфер видео. А? Да и Нортон в этом месте где курсор стоит обновляет экран. А ваще не плохо получилось - хороший глюк Нортона. Мда, если ентим делом еще и фалы заражать тогда б и вир простенький получился бы - портящий вывод на экран.
Спасибо.
До скорого общения.
DZ_Zero-Q
dz_zero-q@mail.ru

Ответ

Здравствуйте, DZ_Zero-Q!
Что касается вопроса 01h:
А ВЫ НЕ ЗНАЕТЕ, ЧТО, ВООБЩЕ–ТО, ВСЕ НОРМАЛЬНЫЕ ПРОГРАММЫ РАБОТАЮТ
С ВИДЕОПАМЯТЬЮ НАПРЯМУЮ, В ОБХОД BIOS (ТАК БЫСТРЕЕ В 0FFFFFFFFFFFFFh
РАЗ!!!!!!!!).

ПРИМЕР ПРИЛАГАЕТСЯ ;}

Приложение:


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 22

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №237

Здравствуйте уважаемые Экперты. У меня к вам вопрос

В одной из рассылок, где работа с видеобуфером

была одна строка

mov es:[di],ax

я немного с ней неразобрался, поясните поподробней если это

нетрудно

Best Regarts,
Andrey S.

Ответ

Здравствуйте, Andrey S.!
Тут впринципевсе просто в es сщдержится адрес страницы видеопамяти для текстового режима, а именно B800h, di это смещение от начала буфера(т.е. позиция на экранепри этом надо учитывать, что каждый символ занимает 2 байт(атрибут символа(т.е. цвет фона и цвет символа)и ASCI код самого символа)), ну а ax содержит как разтаки выводимый нами на экран символ и его атрибуты. Т.е. в этой строчке мы выводим на экран символ с задаными атрибутами в заданую позицию на экране.


Отправил эксперт: Leha
Эксперт отправил ответов (всего): 3

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Если Вы сомневаетесь, какой подгруппе следует отправить вопрос, то направляйте его в обычном текстовом виде по адресу Experts@Kalashnikoff.ru. Вопрос будет выслан соответствующей подгруппе.

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное