Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 124 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-10-31
Вопрос №1323
Попробовал использовать DOS Fn 4eH: Найти 1-й совпадающий файл. И след файл.
Такое описание (со входом разобрался):
Выход AX код ошибки если CF установлен
DTA заполнена данными (если не было ошибки)
Так вот, где лежит DTA? Вычитал: При запуске программы ее DTA устанавливается по смещению 80H относительно PSP. А вот с ней и не разобрался:( Про PSP чего-то написано, таблица и смещения. Выводил всё до кучи на экран и не нашёл нигде имени файла.
Вложил программку, которая всё выводит с моими комментариями. Занимаюсь асмом 3 дня, поэтому не судите строго:)
И ещё, где-то экспертам ответившим на мой вопрос надо чего-то ставить. Киньте в ответ ссылку где и чего. А то вы мне поможете, а я вам... тоже хочу:)
Ответ
Здравствуйте, DmitryK1!
Ну ты что-то тут намудрил! Зачем какие-то манипуляции с сегментом???
Как DTA начиналось по адресу cs:80h, так и работай с этим адресом!
И вообще, прежде чем вызывать функцию 4fh, неплохо бы сначала вызвать 4eh.
В общем, смотри программу для вывода имен файлов.
Приложение:
Отправил эксперт: Ayl
Эксперт отправил ответов (всего): 50
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1324
Здравствуйте! 13 октября 2001 года, в магазине "Мир обуви" я купила осенние ботинки. 29 октября на них сломался каблук. В починку не берут. Могу ли я их вернуть в магазин. Чек сохранен. На нем написано: "гарантия на обувь 30 дней". Спасибо!
Ответ
Здравствуйте, Алина!
А вы их переформатируйте.
Отправил эксперт: Painbringer (http://limanski.narod.ru - нечто наподобие домашней страницы)
Эксперт отправил ответов (всего): 207
Экспертная группа: Пользовательская работа c DOS
Вопрос №1323
Попробовал использовать DOS Fn 4eH: Найти 1-й совпадающий файл. И след файл.
Такое описание (со входом разобрался):
Выход AX код ошибки если CF установлен
DTA заполнена данными (если не было ошибки)
Так вот, где лежит DTA? Вычитал: При запуске программы ее DTA устанавливается по смещению 80H относительно PSP. А вот с ней и не разобрался:( Про PSP чего-то написано, таблица и смещения. Выводил всё до кучи на экран и не нашёл нигде имени файла.
Вложил программку, которая всё выводит с моими комментариями. Занимаюсь асмом 3 дня, поэтому не судите строго:)
И ещё, где-то экспертам ответившим на мой вопрос надо чего-то ставить. Киньте в ответ ссылку где и чего. А то вы мне поможете, а я вам... тоже хочу:)
Ответ
Здравствуйте, DmitryK1!
Вот так оно и пишется.
Как я понял, techhelp у тя есть, и там посмотришь формат, в котором уся эта бадяга хранится (размер, атрибуты и т.п.).
З.Ы. только не надо говорить:"а она у меня точку рисует" - типа так надо. В смысле что какалог твой (если ты конечно не в корне ее запустишь) выглядит как то так
.
..
catalog1
catalog2
file1
и т.д.
Приложение:
Отправил эксперт: Painbringer (http://limanski.narod.ru - нечто наподобие домашней страницы)
Эксперт отправил ответов (всего): 208
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1308
Сейчас ответил на вопрос Михаила по поводу программы из урока 6 (разбор в уроке 7). Только я задумался - и перестал вообще что-то понимать. Насколько я помню, процессоры x86 при выполнении программ
ы используют конвейер команд. Который имеет объем от 6-ти байт в 8088 до 10-ти (кажется)... И везде написано, что когда команда помещена в конвейер, то никакие изменения в коде уже ничего изменить не могут. На чем, собственно, и основаны методы защиты от
отладчиков... Причем конвейер сбрасывается только при выполнении команд передачи управления (jmp, call, int, ret и т.п.).
Тогда что происходит в нашем примере? По всему вышесказанному команда int 20h уже должна быть в конвейере ДО выполнения команды push ax! И должно происходить завершение программы. А она все равно выводит сообщение.
Может кто-нибудь это объяснить?
Ответ
Здравствуйте, Ayl!
Во первых, я бы Вам довольно сильно рекомендовал пользоваться 4Ch-функцией
21h-прерывания для завершения программы или хотя-бы ret-ом что-ли. 20h-прерывание
оставлено лишь для совместимости и никто не поручится, что в следующей версии
DOS она все еще будет...
А насчет сообщения... Мне кажется, что Ваша программа все-таки завершается
после первого int 20h... Но Вы пихаете в стек 9090h. Я не знаю,конечно, зачем...
У меня есть подозрение, что после завершения верхней части передается управление и
на вторую. То есть обе команды int 20h выполняются. И конвейер тут не виноват!
З.Ы. Где Вы нашли этот кусок кода??
Отправил эксперт: baldr (http://www.dospage.fromru.com - Сайт об ОС DOS. Всем, кто любит эту ОС!)
Эксперт отправил ответов (всего): 4
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1317
Добрый день, уважаемые эксперты!
У меня к Вам следующий вопрос: поставлена задача перехвата клавиши Pause в C++, чтобы при нажатии она игнорировалась.
При решении мне кажется, что только при написании резидентной асм-вставки мы сможем перехватить клавишу, но также возникает другой вопрос: нет ли у клавиши Pause какого-нибудь отдельного флага, как, скажем, у Caps Lock, чтобы постоянно флаг просто возвра
щать в 0?
Также я был бы очень благодарен, если кто-нибудь посоветовал, действително, грамотную книжку или доки по тому, что возвращают клавиши, желательно с таблицей.
Большое спасибо. Всего Вам самого наилучшего.
Ответ
Здравствуйте, Questman!
Нет, Вы не правы... Вставка не обязательно должна быть на асме.
В Си есть ключевое слово interrupt, которое автоматически выполняет
все действия, которые делаются вручную на ассемблере при вызове и завершении
прерывания. То есть, если мы напишем примерно так:
void interrupt (*oldvect)(...); //Объявляем переменную-функцию :)
void interrupt int9(...) //Точки должны быть!
{ //Все регистры сохраняются автоматически...
А здесь у нас обработчик!
} //iret вставляется автоматически
void main(int argc, char *argv[])
{
oldvect=getvect(0x9);
setvect(0x9, int9); //А теперь у нас клавиатурка-то перехвачена!
Программа
setvect(0x9, oldvect); //Домой.
}
...то int9() будет вызываться при каждом нажатии почти любой
клавиши. Кроме: PrScr (прерывание 05h), Ctrl-Break или Ctrl-C (прерывание 1Bh),
и еще каких-то. Клавиша Pause, кажется, тоже не таким способом ловится... Но
это уже мелочи... А насчет флага - то это, извините, абсурд. Кто же Вам все
это дело возвратит, когда Ваша, да и все, практически, программы по нажатию
этой клавиши немножко... того ...замерзают? А вообще-то, если перепрограммировать
контроллер прерываний, то можно перехватить нажатие практически любой клавиши.
Правда, вот, я этого делать пока не умею. А хотелось бы. может кто научит, а?
Кстати, по клавишам рекомендую поискать на http://www.Kalashnikoff.ru .
Кажется там есть ссылка на программу techHelp, в которой вообще много всего
полезного. Если там нет - извините...
Отправил эксперт: baldr (http://www.dospage.fromru.com - Сайт об ОС DOS. Всем, кто любит эту ОС!)
Эксперт отправил ответов (всего): 5
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1299
Здравствуйте уважаемые эксперты!
Недавно один человек спрашивал о редакторе для Asm и ему посоветовали Tasmed. Я ради интереса его тоже скачал(версия 1.98с), вот только одна проблема, загружаясь в Command Promt Only(Win98se). Он при попытке запустить из под него tasm,tlink,td или afdpro
каждый раз вешает систему. Выходя из программы, он тоже каждый раз вешает систему.:(
Если данный редактор запустить из Win в режиме эмуляции MS-DOS, то все запускается, но при выходе постоянно возникают ошибки, либо окошко зависнет, либо получу сообщение об ошибке, типа:
-
"В процессе работы программы возникла нестандартная ситуация"
Если использую 16-bit DPMI: "Место ошибки 19F8:178C"
Если использую 32-bit DPMI: "Место ошибки 07B5:0A31"
В обои случаях пишет: "Прерывания нет".
-
Все советы автора программы по устранению ошибок пробовал, использование 16/32 DPMI, тоже совет по решению проблем с зависанием программы, тоже не помогает.:(
Может хоть вы можете помочь!!!
Заранее спасибо!
Ответ
Здравствуйте, Ilya!
А можете кинуть ссылку на новый TasmED??? baldr@pisem.net - это я!
А вообще, я давно уже не рискую что-либо компилить под него... Он у меня как
редактор стоит. А для компиляции и компоновки я написал крутой bat-файл, который
все, что надо спросит и сделает. Если надо - пишите, пришлю.
Кстати, если уж все сильно достало, но позарез это надо, то очень полезно
иногда связаться с автором и ласково его поругать... Совет.
Отправил эксперт: baldr (http://www.dospage.fromru.com - Сайт об ОС DOS. Всем, кто любит эту ОС!)
Эксперт отправил ответов (всего): 6
Экспертная группа: Пользовательская работа c DOS
Вопрос №1324
Здравствуйте! 13 октября 2001 года, в магазине "Мир обуви" я купила осенние ботинки. 29 октября на них сломался каблук. В починку не берут. Могу ли я их вернуть в магазин. Чек сохранен. На нем написано: "гарантия на обувь 30 дней". Спасибо!
Ответ
Здравствуйте, Алина!
А Вы хоть знаете, ЧТО такое DOS? И при чем тут пользовательская работа с ним?
Давайте не будем засорять рассылку ботинками и каблуками... Пишите в соответствующие органы,
сходите к адвокату и т.п.
Отправил эксперт: baldr (http://www.dospage.fromru.com - Сайт об ОС DOS. Всем, кто любит эту ОС!)
Эксперт отправил ответов (всего): 8
Экспертная группа: Пользовательская работа c DOS
Вопрос №1326
Повторение вопроса 1308. Что-то все промолчали (кроме эксперта Dron'а, но и он не в тему ответил)...
Напоминаю: программа из 6-го урока (разбор в 7-ом). Типа создает стек внутри себя и пишет туда 2 раза nop. После этого идет код вывода строки. Под отладчиком - есс-но все глючит. Вопрос не в этом. Почему строка выводится, когда прога запускается БЕЗ ОТЛАДЧИКА!? Просто из командной строки? Причем я пробовал и вариант без стека, а команду изменял обычным mov. Во всех книжкам по защите от НСД написано, что без отладчика прога должна выполнить команду, которая была раньше (в нашем случае int 20h - завершение работы). В чем здесь собака порылась? Может, там какое-нибудь прерывание отрабатывает, поэтому и конвеер сбасывается? Или винда свинью подкладывает? Или просто проц слишком умный?
Ответ
Здравствуйте, Ayl!
Кстати, верно озадачил. Действительно выводит строку. Но я читал документацию ДОС 3.3 правда в оригинале и на английском так вот начиная с этой версии там просят настоятельно для завершения процесса пользоваться функцией 4ch. А для прерывания 20 там написано "CS must contain the segment address of the PSP". Но и это не важно там написано, что оно совместимо с версией младше 2.0. Так что делай вывод. А с 4сh все работает исправно.
Отправил эксперт: DiGiT
Эксперт отправил ответов (всего): 51
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1324
Здравствуйте! 13 октября 2001 года, в магазине "Мир обуви" я купила осенние ботинки. 29 октября на них сломался каблук. В починку не берут. Могу ли я их вернуть в магазин. Чек сохранен. На нем написано: "гарантия на обувь 30 дней". Спасибо!
Ответ
Moderatorial
[!] Offtopic
Отправил эксперт: DiGiT
Эксперт отправил ответов (всего): 52
Экспертная группа: Пользовательская работа c DOS
Вопрос №1325
Всем привет!
После дикого вечера между прочим неплохо варит башка, поэтому хотел бы обсудить с Вами давно наболевший вопрос, тем более что рассылка что-то захирела и не показывается... Понимаю, что на ниженаписанное так в двух словах не ответить, но все же прошу пораскинуть мозгами.
Речь пойдет об этой самой пресловутой нереентерабельности DOS и нереентерабельности другой хренотени под нее написанной.
Рассмотрим типичный пример борьбы с нереентерабельностью при перехвате прерывания таймера и подмене его обработчика своим (ну, в смысле, я имею в виду пользовательскую процедуру 01Сh). Классикой в данном случае может служить способ, используемый Т.Сваном:
В начале обработчика прерывания объявляем переменную:
InProg DB 0
и потом используем ее как флаг, который будет показывать были ли предыдущие копии обработчика запущены. В общем структура такая:
XXXX: cmp [byte cs:InProg],0 ;начало обработчика, проверяем флаг
jne Exit ;если установлен, знач процедура выполняется - выходим
inc [byte cs:InProg] ;если нет, устанавливаем и выполняем
…..; выполняем всякую каку, а в конце
dec [byte cs:InProg] ;снимаем флаг
pop ds
pop ax
Exit: iret ;выход
Вот тут-то Сван и лоханулся :((( Не мог он предусмотреть, что появятся гигагерцовые телеги. Во-первых, прерывание может произойти между decом и iretом (на рорах). Во-вторых, даже если роры убрать за dec (чего Сван делать не рекомендует), прерывание МОЖЕТ произойти даже между выполнением decа и iret. (У меня, например, на четырехпроцессорной рабочей станции происходит. Я, конечно, понимаю что только идиот использует DOS на таких мощностях, но в данном случае эту тему желательно все-таки прояснить).
Теперь собственно вопрос или , точнее, просьба: Во многих досовских программах имеются методы борьбы с нереентерабельностью. (Хотя бы даже обработка кнопалки PrnScreen). Почти все они базируются в той или иной степени на вышеописанном алгоритме и почти все они дают сбои на высоких частотах. В общем-то всем начихать, так как DOS умирает. Но иногда возникают проблемы…. В связи с этим не может ли кто-то предложить какие-нибудь экзотические методы борьбы с ентой нереентерабельностью? В более ширшем (ширейшем) смысле – как с ней вообще все-таки бороться? Часы в PC-то борются! Принимается ВСЕ – вплоть до аппаратных реализаций.
С уважением Вал.Ик.
P.S. Извините, если сильно грузанул вас такой рухлядью….
P.P.S. Индивидуальное обращение: Dron!!!!! А че рассылка-то по операционке не выходит? Весьма поучительное было чтиво, и вдруг заглохло.. Жалкоо-о-о-о…….
Ответ
Здравствуйте, Вал.Ик.!
Так я не понял проблемы или она решается расстановкой cls sti, где нужно. Я с этим однажды долго парился, но в конце-то концов все работает... (С большим непониманием)
Отправил эксперт: DiGiT
Эксперт отправил ответов (всего): 53
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1326
Повторение вопроса 1308. Что-то все промолчали (кроме эксперта Dron'а, но и он не в тему ответил)...
Напоминаю: программа из 6-го урока (разбор в 7-ом). Типа создает стек внутри себя и пишет туда 2 раза nop. После этого идет код вывода строки. Под отладчиком - есс-но все глючит. Вопрос не в этом. Почему строка выводится, когда прога запускается БЕЗ ОТЛАДЧИКА!? Просто из командной строки? Причем я пробовал и вариант без стека, а команду изменял обычным mov. Во всех книжкам по защите от НСД написано, что без отладчика прога должна выполнить команду, которая была раньше (в нашем случае int 20h - завершение работы). В чем здесь собака порылась? Может, там какое-нибудь прерывание отрабатывает, поэтому и конвеер сбасывается? Или винда свинью подкладывает? Или просто проц слишком умный?
Ответ
Здравствуйте, Ayl!
Последнее-проц слишком умный, гад!:)
Это сработает только до 386 включительно.
Пеньки уже отслеживают попытку записи и сбрасывают конвеер.
На четверке не проверил-нет в наличии:(
Кто-нить-проверте, плз...
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 185
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №1332
Здравствуйте!
У меня такой вопросик:
У меня монитор 15" NEC MultiSync и видеокарта S3 Virge DX и возникает такая проблемка: при попытке перевода там FAR или еще чего Досовского в полноэкранный режим монитор ни чего некажет( и темнота). Лампочка на нем становится желтой. Что делать не подскажете?
Заранее благодарен, Антон.
Ответ
Здравствуйте, Антон!
Несколько советов
1) Проверь параметры установленные для Dos программ!
2) Перезагрузись в режими эмуляции MSDos если все будет работать переставь систему
Отправил эксперт: Viktor
Эксперт отправил ответов (всего): 10
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №1334
Здравствуйте.
У меня проблемы с настройкой Apache, a
именно: не запускаются cgi скрипты. Может кто то
может мне помочь?
Настройку апача производил как написано здесь:
http://www.xakep.ru/post/13484/default.asp?flash=1
версия: apache 1.3.12
ос: windows 98 se
файл httpd.conf прилагаю.
Спасибо.
Ответ
Здравствуйте, Алексей!
Я конечно не знаю,но у меня в настройках правда под линух есть после строк
ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
следующее попробуй..
AllowOverride None
Options None
Order allow,deny
Allow from all
Отправил эксперт: DiGiT
Эксперт отправил ответов (всего): 54
Экспертная группа: Пользовательская работа с Windows
Вопрос №1338
Можно ли подключить внутренний винт, не разбирая компа?
Ответ
Здравствуйте, Дмитрий!
Ну если только шлейф EIDE устройства торчит через заднюю стенку:(
А так крышку по любому снять надо
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 186
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №1337
Извините, может не по теме, но можно ли каким-либо образом подключить внутренний винчестер, не разбирая компа?
Ответ
Здравствуйте, Дмитрий!
А почему бы и нет? Есть Mobile Rack(и)работают через USB или LPT порты, только тормозные они. Есть Rack для IDE - они самые дешевые и скоростные, но для того чтоб его подключить все равно разок придется комп разобрать.
Отправил эксперт: UFO
Эксперт отправил ответов (всего): 31
Экспертная группа: Модели, виды и типы компьютеров (hard)
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Управляющий рассылкой,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||