Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 058 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-08-14
Вопрос №494
Тут такое дело:
скачиваю Hiew с вашего(нашего(их)) сайта, разархивирую
запускаю nedump.exe и оно пишет: "Не удается исполнить...."
А если запускаю его из архиватора то вызывается окно DOS,
запускается прога, сразуже пишется "Сеанс завершен"
И так не только с Hiew. Тоже самое с helpasm(только он из архиватора нормально работает)
Ответ
Здравствуйте, Дмитрий!
Возможно просто архив "партачный", так бывает если при архивации выбрано максимальное сжатие!
Если прога так уж нужно, то могу 320 килов переслать: orlando@kaluga.ru
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 2
Экспертная группа: Пользовательская работа с Windows
Вопрос №492
Здравствуйте.
Вопрос: как, не сохраняя системные стеки или всю SDA(слишком мало юзабельной памяти, в экран и UMB тоже нельзя решить проблему с нереентерабельностью DOS?
С уважением, Андрей.
Ответ
Здравствуйте, Andrew!
Нереентерабельность дос объясняется тем, что если функция дос была прервана аппаратным прерыванием, обработчик которого вызвал другую функцию дос, она будет пользоваться тем же стеком, затирая всё, что
поместила прерванная функция. И если попытаться вернуть управление прерванной функции, то кроме "мусора" в стеке она ничего не найдет.
Чтобы это исправить можно попробовать проследить за стеком, что весьма сомнительно и это можно делать только в том случае если на все 100 знаешь, что помещает в стек функция!
Или же можно определить адрес функции в таблице прерываний, а затем используя его вызвать прерывание как дальнюю процедуру, тогда проблем не возникнет!И если я не ошибаюсь, то таким способом можно получить тройное вхождение в дос(при установке обработчика прерывания 28h), правда на практике как получится не знаю.
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 3
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №491
Здравствуйте!
Я – автор вопроса N#487. Извините, что морочил вам всем голову через свою опечатку. На самом деле в моей проге не заметил таковой. Просто файл для теста написал. Даже его не перечитывал. А проблема вот в чем (см. приложение): в эмуляции ДОС прога то работает нормально, то Виндовс выплевывает, что прога выполнила недопустимую операцию и будет закрыта; в чистом ДОСе на первый взгляд все ОК, но при нажатии на клавиши ДОС или не реагирует на нажатие, или реагирует с большой задержкой. Вот такой глюк :(.
Спасибо!
Ответ
Здравствуйте, Tshchinski Nazar!
Вот я тут перемучил прогу из твоей, получилось нечто из серии: "ой!, осталась горстка ненужных деталек...". короче твоя прога уменьшилась в 2 раза (даже больше), а функции ее те же. Хотя не совсем. Я так и не понял, зачем ты чето там мутил "если нажата кнопка W или X то...". Вообщем моя прога отлично работает и в досе и в виндоусе и ниче не виснет.... хотя могут быть проблемы с выводом на экран (в обработчике int 4Ah) - у кореша комп в заданное время замертво упал... ;) так что подмути если че не так...
А если не получиться, то ты толком объясни мне, что тебе нада, чтоб она делала. вот и все. пока.
Приложение:
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 37
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №494
Тут такое дело:
скачиваю Hiew с вашего(нашего(их)) сайта, разархивирую
запускаю nedump.exe и оно пишет: "Не удается исполнить...."
А если запускаю его из архиватора то вызывается окно DOS,
запускается прога, сразуже пишется "Сеанс завершен"
И так не только с Hiew. Тоже самое с helpasm(только он из архиватора нормально работает)
Ответ
Здравствуйте, Дмитрий!
100%, эта хрень в виндах иногда появляется, когда запускаешь прогу из каталога, у которого "длинное название", или он сильно далеко запрятан в деревьях тех же каталогов. Иногда, очень редко, (в последний раз 5 минут назад ;( ) проснулась эта ересь, и из папки "Мои документы" я не смог запустить ни одного ДОС приложения...(просто пишется, что файл не найден...) После перезагрузки все опять стало ОК, но это тоже ненормально, т.к. до этого у меня годами такая муть водилась.
Так что едиснвтенное что могу посоветовать - перепиши HIEW или HELPasm или че там еще прямо в С:/, без всяких папок, в крайнем случае создай папку HIEW (чтоб не больше 8 букв и не русских), чтоб по винту сильно не расползались.
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 38
Экспертная группа: Пользовательская работа с Windows
Вопрос №483
Уважаемый эксперт Sensey! В ответе на вопрос 477 (молодой человек интересовался про серийную инфу ВСЕГО компа) Вы дали совершенно верный ответ на вопрос "как узнать серийную(?) инфу устр. ввода/вывода"; меня это заинтересовало и интересно было бы узнать, какая еще дополнительная инфа вылазит, кроме вышеозначенного устройства в/в ????
p.s. просьба другим экспертам удалить это сообщение.
Ответ
Здравствуйте, Broken Sword! Ну что сынок ? уж и у мамочки решил спросить ? "Эксперт " ты наш :)))) Вылазь в аську роберт !!! а то непонятно где ты там лазтшь ...
Отправил эксперт: Bart Simpson
Эксперт отправил ответов (всего): 1
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №496
Привет всем экспертам!
Тут вот недавно вопрос на одну интересную тему проскакивал.
А именно про "нереальный" режим процессора.
Так вот не могли бы вы мне попонятнее объяснить про этот сабж. А то я ничего не понял.
И где в инете про это можно почитать.
И если есть примеры прог, то пришлите мне их, пожалуйста, на мейл zipper@nm.ru
С уважением, Александр.
Ответ
Здравствуйте, Александр!
В процессорах Intel начиная с 286-го сегментные регистры составляют не
два байта а 10, однако дополнительные 8 байт скрыты от программиста.
Это - копия дескриптора сегмента. В реальном режиме процессор строит
эту копию сам, когда мы загружаем число в сегментный регистр. Однако,
он изменяет только базу, а лимит оставляет прежним (при включении
питания он устанавливается в 64Кб). Если перейти в защищённый режим,
загрузить во все сегменты селектор с лимитом 4Гб и вернуться обратно
в реальный, то мы получим Unreal Mode, Big Real Mode или Flat Mode.
Что касается примеров, то я уже писал - сайт www.programmersheaven.com,
раздел Protected Mode. Ищи там по описанию.
Отправил эксперт: Nik
Эксперт отправил ответов (всего): 61
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №497
Как можно узнать текущее разрешение видеорежима, если я уже переключился на этот видеорежим.
А переключался я таким макаром:
mov ax, 4F02h
mov bx, grmode
int 10h
Ответ
Здравствуйте, Sergey!
Тебе же известно значение grmode, которое содержит номер видеорежима.
Теперь осталось по номеру узнать его расширение!
А если тебя интересует как по номеру режима определить расширение, то
смотри:
4-битные режимы: 8-битные режимы: 15-битные режимы:
012h: 640*480 013h: 320*200 10dh: 320*200
102h: 800*600 100h: 640*480 110h: 640*480
104h: 1024*768 103h: 800*600 113h: 800*600
106h: 1280*1024 105h: 1024*768 116h: 1024*768
107h: 1280*1024 119h: 1280*1024
120h: 1600*1200 121h: 1600*1200
16-битные режимы: 24- и 32- битные режимы:
как и у 15-битн., 10fh: 320*200
только к номеру 112h: 640*480
прибавить 1. 115h: 800*600
118h: 1024*768
11Bh: 1280*1024
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 4
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №497
Как можно узнать текущее разрешение видеорежима, если я уже переключился на этот видеорежим.
А переключался я таким макаром:
mov ax, 4F02h
mov bx, grmode
int 10h
Ответ
Здравствуйте, Sergey!
Попробуй так
Expects: AX 4f01H
CX VESA/SVGA Video Mode number
ES:DI Addr of buffer to receive an
Returns: AX VESA status: AH=0 means successful (else failed)
AL=4fH means function supported
ES:DI buffer contains returned data (if successful)
Длина буфера по ES:DI равна 256 байт
Интересующая инфа находится так:
Если в слове по смещению 0 бит 1=1
то по смещению
+12h=горизонтальное разрешение(в пикселях или символах)
+14h=вертикальное разрешение(в пикселях или символах)
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 69
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №491
Здравствуйте!
Я – автор вопроса N#487. Извините, что морочил вам всем голову через свою опечатку. На самом деле в моей проге не заметил таковой. Просто файл для теста написал. Даже его не перечитывал. А проблема вот в чем (см. приложение): в эмуляции ДОС прога то работает нормально, то Виндовс выплевывает, что прога выполнила недопустимую операцию и будет закрыта; в чистом ДОСе на первый взгляд все ОК, но при нажатии на клавиши ДОС или не реагирует на нажатие, или реагирует с большой задержкой. Вот такой глюк :(.
Спасибо!
Ответ
Здравствуйте, Tshchinski Nazar!
Прикольный будильничик, тебя его поди мама заставила написать, чтобы ты хоть иногда от компа отрывался и в определенное время на кухне появлялся. Но это так к слову, а по существу:
Выводить на терминал с помощью досовых функций из обработчика прерывания по таймеру - занятие для любителей пагубных эффектов нереентабильности. Заменил тебе весь DOS на BIOS, под Windows стало работать четко, а под дос все равно нет. Причем исследования показали, что под дос тоже работает отлично когда выводиш все что угодно, но только не ascii #7 - то бишь гудок. Совершенно очумительный эффект, наверняка имеющий какое-то обьяснение, но лично я не в курсе как с ним боротся. Могу лишь, если хочешь, погудеть через порты ввода-вывода, а так юзай под Win и жди, может кто из наших доблестных экспертов просветит.
Приложение:
Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 12
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №492
Здравствуйте.
Вопрос: как, не сохраняя системные стеки или всю SDA(слишком мало юзабельной памяти, в экран и UMB тоже нельзя решить проблему с нереентерабельностью DOS?
С уважением, Андрей.
Ответ
Здравствуйте, Andrew!
Вы задаете слишком общий вопрос, будет вам и общий ответ. Типа как аукнится так и откликнится.
Все зависит от того какие функции вы используете, когда и как часто вам необходимо делать "popup". Скажем выводить на терминал это одно, а вот работать с файлами это уже совсем другое.
Самое элементарное это проверка флага активности ДОС и флажка критической секции. Они занимают смежные байты, их адрес узнается средствами DOS ah=34h, возвращающей его в es:bx, т.к. эта функция также выполняется на досовом стеке, вызывать ее из резидента не безопастно, адрес сохраняют в переменной во время инициализации.
Причем es:bx - адрес флага InDos, а флаг Critical Error flag занимает предыдущий байт памяти. Как проверять их разом смотри прикрепленный кусок. Однако иногда получается такая ситуация, что всплывать можно, а флаг активности дос установлен - COMMAND.COM проводит много времени, запрашивая у пользователя ввод с клавиатуры функциями 01h..0Ch. Чтоб решить данную проблему работай из прерывания int 28h, оно вызывается когда можно делать все функции выше 0Ch, а эти функции приспокойненько можно заменить биосовскими. Сперва дай отроботать старому обработчику, потом делай свои дела.
Если вызываемые функции связаны с информацией, хранящейся в PSP (например - запись/чтение файлов), то нужно учесть следующее:
1. на время выполнения файловых операций необходимо сохранить PSP, установить свой PSP, и восстановить сохраненный PSP перед выходом - примерчик прикреплен.
2. Файловые функции ДОС не сами пишут на диск, а по средством драйверов, которые работают с биос. В системе, в момент записи уже кто то может юзать, скажем, int 13h, поэтому необходимы дополнительные проверки.
В самом худшем случае перехватывают int 21h и полностью отслеживают интересующие функции, циклят и ждут квант безопасного времени - но это уже для монстров.
Приложение:
Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 13
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №497
Как можно узнать текущее разрешение видеорежима, если я уже переключился на этот видеорежим.
А переключался я таким макаром:
mov ax, 4F02h
mov bx, grmode
int 10h
Ответ
Уважаемый Sergey!
Все, конечно, хорошо, но как раз разрешеньице то и зависит от BX! (это что, кусок какой то выдранной проги?). Насчет текстовых режимов могу дать краткую справку:
BX=108h - 80x60
BX=109h - 132x25
BX=10Ah - 132x43
BX=10Bh - 132x50
BX=10Ch - 132x60
Так что ищи в проге чему равен этот самый grmode (если не сам писал, то дето в конце перед ret должно быть...)
P.S. может, если я неправильно понял вопрос, то если хочешь узнать номер ТЕКУЩЕГО видеорежима (откуда и разрешение) то:
mov ax,4F03h
int 10h
в ВХ найдешь его номер (текстовые я тебе дал, а графических около 30 стандартных, если сильно нада напрягусь и все выложу...)
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 39
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №502
У меня такая проблема. Материнская плата Asus CUEP2-M. Настройки по умолчанию заводские. Под DOCом (не загружая Windows) я не вижу мышь и иногда пропадает клавиатура. Это что неисправность матери или где-то я неуследил, но настройки то заводские!!! (и потом насколько я знаю мышь и клавиатура никак ненастраиваются в BIOS). Операционную систему переставил, разъемы мыши и клавиатуры PS/2
Ответ
Здравствуйте, Алексей!
ДОС не очень корректно работает с PS/2
Вообще-то с клавой не понятно, попробуй ее на другой машине,
а с мышкой - драйвер скорее всего не поддерживает:(
Замени драйвер мыши. В свое время я перепробовал несколько, некоторые вообще не видели, другие видели, но либо мышь очень медленно двигалась, либо двигалась "рывками"(при установке опции ускорения)
Если хочешь, вышлю драйвер мыши, пиши sensey@ukr.net
А лучше всего, если ты не квакер или что-то подобное, возьми комовскую мышь...
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 71
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №501
Здравстуйте Alexander_K
Вы, наверное, имели ввиду DTA, когда говорили о PSP.
Относительно перехвата Int 21h проблем нереентерабельности не возникает, кок мне представляется, оно не аппаратное...
Anyway, Спасибо за ответ...
С уважением, Андрей
Ответ
Здравствуйте, Andrew!
Какие притензии по поводу PSP?
Я подумал вы не танкист, раз преодаливаете нереентабильность, и вам известно, что когда в одном предложении упоминают "работа с файлами" и "PSP" то речь идет о DTA. Если же вы имеете ввиду, что достаточно сохранять только DTA, то мне кажется это сомнительный способ экономить 80h байт (вас вроде безопасность интересовала).
Теперь по поводу int 21h. Тоже вроде понятно выразился. Сложность состовляет вовсе не перехват прерывания, а построение алгоритма отслеживания вызова скажем функции 0Ah, которую COMMAND.COM использует очень часто и очень продолжительно. Вы организуете цикл, в котором функцией 0Bh регулярно проверяете состояние клавиатуры, временно возвращаете управление когда имеет место ввод, а остальное время занимаетесь своими повторно входимыми делами. Просто именно это за вас уже проделали, и предоставили int 28h.
P.S. Надо добавить, что одной точки входимости из int 28h недостаточно, т.к. может получится, что никакие функции ДОС по отображению не выполняются. Разумно также привязыватся к таймеру или клавиатуре. И еще раз повторяю - все зависит от контекста.
Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 14
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №502
У меня такая проблема. Материнская плата Asus CUEP2-M. Настройки по умолчанию заводские. Под DOCом (не загружая Windows) я не вижу мышь и иногда пропадает клавиатура. Это что неисправность матери или где-то я неуследил, но настройки то заводские!!! (и потом насколько я знаю мышь и клавиатура никак ненастраиваются в BIOS). Операционную систему переставил, разъемы мыши и клавиатуры PS/2
Ответ
Здравствуйте, Алексей!
1. Насчёт мыши: вы не знали, что для мыши надо грузить драйвер??
Поищите файлик вроде MOUSE.COM, SPCMOUSE.COM, GMOUSE.COM или
ещё что-нибудь похожее и запустите его.
2. Что-то непонятно, в чём выражается "пропадание" клавиатуры??
Может это комп просто виснет ?? :(
Отправил эксперт: Nik
Эксперт отправил ответов (всего): 62
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №503
Добрый *******! Есть два вопроса:
1. Чем метки,начинающиеся с @@ отличаются от обычных? (помню, где то читал про это,но теперь уже не помню где...)
2. Можно ли в макросах IRP использовать более одной стастической переменной? (я может быть неправильно выразился, я имел ввиду возможна ли хоть в какой то вариации запись типа
IRP x,<1,2,3>,y<4,5,6> и т.д.?)
Ответ
Здравствуйте, Broken Sword!
1. Не знаю как в Masm, а вот в Tasm, если поставить директиву LOCALS будет допустима конструкция такого типа:
...
locals
...
Proc1 proc
@@1:
...
loop @@1
ret
Proc1 endp
...
Proc2 proc
@@1:
...
loop @@1
ret
Proc2 endp
То есть имеется возможность пользоватся локальными метками - очень удобно. И вообще я в последнее время все метки, не являющиеся именами процедур люблю с @@ обзывать.
2. Не знаю.
Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 15
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru | Отписаться | Рейтингуется SpyLog |
В избранное | ||