Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 521
от 12.04.2003, 01:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 2963 Отправлено ответов: 8742 Активность: 295.0 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Joy Статус: Опытный Общий рейтинг: 124.28 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 118.72 [Подробней >>] |
keleb-glin Статус: Опытный Общий рейтинг: 109.3 [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 136.16 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
St Статус: Опытный Общий рейтинг: 109.05 [Подробней >>] |
Samodelkin Статус: Доверительный Общий рейтинг: 124.52 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 150.31 URL: Программирование [Подробней >>] |
Eugene Статус: Профессиональный Общий рейтинг: 109.2 URL: мощный файловый архив [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 2917. Здравствуйте! Подскажите пожалуйста как написать резидент, который мог бы считывать нажатую клавишу... (ответов: 4)
Вопрос № 2918. Привет, эксперты! Кто-нибудь знаком с тем, как дос выделяет память при запуске программ? Нужно счита... (ответов: 2)
Вопрос № 2919. Здравствуйте уважаемые эксперты! 1. В Win 2K/XP некоторые программы типа Partition Magic, Diskeeper,... (ответов: 3)
Вопрос № 2920. Приветствую вас! Задумал тут такую интересную вещь(это не вирус :) так, экспериментирую). В общем, з... (ответов: 1)
Вопрос № 2921. Здраствуйте. Ниже кусок кода. Выводит на экран текст поверх всех окон. Как можно сделать так, чтобы ... (ответов: 1)
Вопрос № 2922. Господа эксперты, прокоментируйте подробнее кусок кода который должен выполняться сразу после перек... (ответов: 2)
Вопрос № 2923. Здравствуйте господа Эксперты. Вопрос такой: имеется RichEdit, посылаю ему EM_STREAMIN (хочу заполни... (ответов: 1)
Вопрос № 2924. Данная прога работает на пне втором,на пне четвертом,а вот на первом пне и на заморенной четверке не... (ответов: 1)
Вопрос № 2925. Здравствуйте, эксперты. Подскажите, пожалуйста! У меня, к примеру, в DS:SI находится число (001А)-ре... (ответов: 4)
Вопрос № 2926. Здравствуйте. У меня такой вот вопрос: Как можно считать и тут же выводить сколько записано на диске... (ответов: 3)
Вопрос № 2927. Добрый день, эксперты! У меня на работе сломан компьютер(процессор Celeron 366 MНz, причина такая: п... (ответов: 3)
Вопросов: 11, ответов: 25
Вопрос № 2917 |
Здравствуйте!
Подскажите пожалуйста как написать резидент,
который мог бы считывать нажатую клавишу и выводить ее на экран.Если у кого есть что-то похожее, киньте мне на мыло.
ksa@mail.kz
Зарание благодарен.
Вопрос отправлен: 06.04.2003, 22:02
Отправитель: Stas (ksa@mail.kz)
[Следующий вопрос >>] [Список вопросов]
Отвечает Joy
Добрый день, Stas!
Пишешь резидент обрабатывающий прерывание 9h. В обработчике выводишь на экран тот символ, который в буфере.
Ответ отправлен: 09.04.2003, 11:56
Отправитель: Joy
Отвечает Ayl
Здравствуйте, Stas!
Для какой оси? Если для ДОСа - то все просто. Перехватываешь прерывание 9, получаешь нажатую клавишу и затем выводишь ее на экран.
Только тут нужно определиться, что ты хочешь в результате получить. Потому что 9-е прерывание вызывается всякий раз, когда клавиша нажимается или отпускается. Кроме этого, некоторые клавиши вызывают срабатывание прерывания 9 несколько раз подряд. К тому же контроллер клавиатуры (который и отвечает за вызов этого прерывания) выдает скен-код клавиши. Который совсем не похож на коды символов (например, ASCII).
То есть, если тебе просто нужно вывести скен-код клавиши - перехватываешь 9-е прерывание, читаешь код из порта 60h и выводишь его на экран в нужном тебе виде.
Если же ты хочешь вывести именно символ (с учетом клавиш-переключателей и т.п.), то тебе нужно либо самому заниматся переводом скен-кодов в символы, либо использовать следующий трюк:
1. Перехватываешь прерывание 9
2. В начале обработчика запоминаешь значение переменной по адресу 0040:001С. Это указатель на конец буфера клавиатуры - именно сюда будет занесена нажатая клавиша (если будет).
3. Вызываешь старый обработчик 9-го прерывания:
pushf
call dword ptr cs:[Old_Int09]
4. Проверяешь, что значение по адресу 0040:001C изменилось. Если нет - выходишь из обработчика
5. Выбираешь из буфера клавиатуры преобразованный символ (2 байта: старший - скен-код, младший - собственно ASCII-код). Если значение по адресу 0040:001C на 2-м шаге было сохранено в регистре bx (например), то выбор символа может быть осуществелен так:
push 0
pop es
mov ax, es:[bx]
6. Выводишь символ на экран и выходишь из обработчика прерывания.
Ответ отправлен: 07.04.2003, 12:31
Отправитель: Ayl
Отвечает keleb-glin
Приветствую Вас, Stas!
Ничего сложного. Вешаешь резидент на 9h - прерывание, а там - чтение из 60h - порта. Прочтёшь скан-код, а потом - переводи в ascii, предварительно осведомившись о флагах клавы по адр. 40h : 17h. Вообще, поищи где-нибудь какой-нибудь "SDK" под ДОС. Там обычно многое написано.
Ответ отправлен: 09.04.2003, 19:40
Отправитель: keleb-glin
Отвечает Maverick
Приветствую Вас, Stas!
Надеюсь знаком с резидентами?
Перехватываешь прерывание клавиатуры (int 09h)
В обработчике:
push ax
in al,60h ;теперь в al скан код, что хошь то и делай
pop ax
jmp -на старый обработчик
Приложение:
Ответ отправлен: 07.04.2003, 04:43
Отправитель: Maverick
Вопрос № 2918 |
Привет, эксперты!
Кто-нибудь знаком с тем, как дос выделяет память при запуске программ? Нужно считать файл в другой сегмент и jmp на его первый байт, т.е. попытка выполнить его. Облом :(
Че то, чего я не перепробовал, возникает куча проблем.
Кто с этим знаком, мыльните на maverick@nightmail.ru
Спасибо
HEEEEEEEEEELP!!!!!!!!!!
Вопрос отправлен: 07.04.2003, 04:57
Отправитель: Maverick (maverick@nightmail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает St
Привет, Maverick!
Возможно вы не освободили память перед тем как писать туда содержимое файла? В будущем постарайтесь написать подробнее в чем собственно состоят эти проблемы, а то приходится гадать на кофейной гуще.
St
Ответ отправлен: 07.04.2003, 12:05
Отправитель: St
Отвечает Samodelkin
Доброе время суток, Maverick!
ну если у тя это оверлей, то и грузи как оверлей
Ответ отправлен: 08.04.2003, 04:59
Отправитель: Samodelkin
Вопрос № 2919 |
Здравствуйте уважаемые эксперты!
1. В Win 2K/XP некоторые программы типа Partition Magic, Diskeeper, Scandisk могут выполняться до загрузки системы в консоли.
Как работают эти программы? И как можно свою программу выполнить до загрузки системы?
2. Зачем перед именем метки ставить @@ (две собаки), например: @@label ?
Что от этого меняется?
Спасибо.
Вопрос отправлен: 07.04.2003, 15:43
Отправитель: Sledge (sledge@nm.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает St
Привет, Sledge!
2) В Тасм это признак того что метка является локальной - то есть она действует в пределах данной процедуры, на нее нельзя перейти из другой процедуры, но зато в программе может быть несколько одинаковых меток (в разных процедурах конечно). Также @@ являются знаком и локальных переменных.
St
Ответ отправлен: 07.04.2003, 18:11
Отправитель: St
Отвечает keleb-glin
Добрый день, Sledge!
На первый овечать не буду, думать лень.
На второй отвечу. с @@ принять начинать имена локальных меток, а то когда много include_ов и т.д. сложно разбираться.
Ответ отправлен: 09.04.2003, 19:35
Отправитель: keleb-glin
Отвечает Bob Johnson
Здравствуйте, Sledge!
2. Это означает, что метка локальная. Локальная метка доступна только внутри процедуры, где она определена. Это позволяет нескольким различным процедурам содержать локальные метки с одинаковыми именами (например, @@1, @@2, ...), что достаточно удобно.
Ответ отправлен: 08.04.2003, 18:14
Отправитель: Bob Johnson
Вопрос № 2920 |
Приветствую вас! Задумал тут такую интересную вещь(это не вирус :) так, экспериментирую). В общем, заменил вфайле system.ini Explorer.exe своей прогой. Моя прога выполняет сначала свои "чёрные" :) дела, а потом, чтобы виндапродолжала работу, должна запустить оригинальный Explorer.exe. Так вот, она как-то неправильно запускает, т.е. запускаетобычное explorer-овское окно, а не оболочку с taskbar-ом, значками и пр. Запускаю так(это из Delphi, но я думаю,понятно): ShellExecute(HWND(Nil),PChar('open'),PChar(c:WindowsExplorer.exe'),PChar(''),PChar(''),SW_SHOWNORMAL). Каксделать, чтобы запускалось то, что нужно, т.е. то, что винда сама запускает, как если бы в system.ini стоялExplorer.exe? Может, у Explorer.exe какие параметры есть, а может надо использовать более навороченную функциюCreateProcess(я в ней ничего не понимаю)? Если да, то приведите, пожалуйста, пример. Спасибо!
Вопрос отправлен: 07.04.2003, 17:26
Отправитель: Андрей V.
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Приветствую Вас, Андрей V.!
А не интересней и красивей ли будет написать программу, которая будет заражать explorer. В вирных журналах по этому пресс инфы... И ненадо ни system.ini нифига другого менять.
Ответ отправлен: 08.04.2003, 05:07
Отправитель: Maverick
Вопрос № 2921 |
Здраствуйте.
Ниже кусок кода. Выводит на экран текст поверх всех окон.
Как можно сделать так, чтобы только текст выводился
на экран, а фона небыло. И чтобы при сверывании или развертовании
других окон текст не прятался. и еще как потом его уничтожить?
Приложение:
Вопрос отправлен: 07.04.2003, 18:59
Отправитель: Swi
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Swi!
1. SetBkMode (hDc, TRANSPARENT);
> И чтобы при сверывании или развертовании
других окон текст не прятался
Никак. Только надо создавать свое окно, размещаеть его поверх всех (WS_EX_TOPMOST) в котором только рисовать текст (например, на WM_ERASEBKGND). В этом случае и уничтожить его будет можно простым закрытием окна (тогда windows сама перерисует все, что было под ним).
Ответ отправлен: 08.04.2003, 18:14
Отправитель: Bob Johnson
Вопрос № 2922 |
Господа эксперты, прокоментируйте подробнее кусок кода который должен выполняться
сразу после переключения в Pmode. (речь идет о db 0eah и деле)
;вот кусок кода из книги Юрова (пример 17)
;переключаемся в защищенный режим
mov eax,cr0
or al,1
mov cr0,eax
;настраиваем регистры
db 0eah ;машинный код команды jmp
dw offset protect ;смещение метки перехода в сегменте команд
dw 30h ;селектор сегмента кода в GDT
---------------------
;(С) Александр Семенко
; Переходим в защищённый режим:
mov eax,cr0
or al,1
mov cr0,eax
; Процессор в защищённом режиме
db 0eah
dw P_Mode_entry
dw Code_selector
Вопрос отправлен: 07.04.2003, 19:26
Отправитель: bondlab
[Следующий вопрос >>] [Список вопросов]
Отвечает Eugene
Здравствуйте, bondlab!
Это всего навсего команда дальнего перехода. Только у Семенко вместо чисел стоят мнемонические обозначения. И ещё, адресация происходит немножко по другому, нечем в реальном режиме. В сегментных регистрах должны находится селекторы сегментов, а не их адреса. А дальний переход как раз и загружает их значения в сегментные регистры.
Ответ отправлен: 08.04.2003, 09:03
Отправитель: Eugene
Отвечает keleb-glin
Приветствую Вас, bondlab!
0eah - машинный код команды jmp far, после него должны стоять смещение и сегмент прыжка.
Ответ отправлен: 09.04.2003, 19:32
Отправитель: keleb-glin
Вопрос № 2923 |
Здравствуйте господа Эксперты.
Вопрос такой: имеется RichEdit, посылаю ему EM_STREAMIN (хочу заполнить его содержимое текстом). Последний парамет EDITSTREAM указывает на функцию (см. приложение). Mem2 - указатель, возвращенный LocalLock и содержащий требуемый текст. Я так понял, что все параметры функции, кроме первого, надо заполнять мне самому (для EM_STREAMIN), так вот я и заполняю. Результата некакого, попробовал в этот самый буфер уже в процедуре записать чего-нить, тоже самое! И вообще эта процедура - это новый Thred или при ее выполнении вся моя прога стоит? Короче ничего не понимаю, направте меня на путь истинный, укажите где я тут опять все напутал... (хотелось-бы увидить пример работающей функции EditStreamCallback).
Приложение:
Вопрос отправлен: 07.04.2003, 19:37
Отправитель: GHopper
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Доброе время суток, GHopper!
> Я так понял, что все параметры функции, кроме первого, надо заполнять ...
А как вообще можно заполнять параметры внутри функции???
Первый тебе вообще не нужен.
Второй уже содержит указатель на буфер данных. Вот туда ты и будешь записывать данные.
Третий параметр определяет размер буфера - ты должен обработать не более этого количества байт.
Четвертый параметр содержит указатель на двойное слово, в которое (не в параметр!!!) ты занесешь, сколько байт ты занес в буфер. Ты можешь заносить меньше, чем размер полного буфера.
Ответ отправлен: 08.04.2003, 18:15
Отправитель: Bob Johnson
Вопрос № 2924 |
Данная прога работает на пне втором,на пне четвертом,а вот
на первом пне и на заморенной четверке не хочет.В массиве
TIMERS переменные сами по себе меняют значения FALSE na TRUE и обратно,Пробовал настраивать в биосе порт ноизменения режимов SSP EPP and ECP ни привело к результату. Что делать непонятно Выходит что меньше чем пень второй этой проге не подходит ,но по моему это не так.
Управление через ЛПТ 2-9 нога через тумблера на 18 ногу.
Заранее спасибо.
Приложение:
Вопрос отправлен: 07.04.2003, 19:53
Отправитель: anton (oven_mars@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Joy
Доброе время суток, anton!
А что пишет? Если что-то типа "Рантайм эррор 200", то пиши на joy@stsland.ru - вышлю лекарство. У Паская какая-то ошибка с модулем CRT.
Ответ отправлен: 09.04.2003, 11:56
Отправитель: Joy
Вопрос № 2925 |
Здравствуйте, эксперты. Подскажите, пожалуйста! У меня, к примеру, в DS:SI находится число (001А)-результат предыдущих обработок, но это уже строка. Как же мне вывести теперь это число с помощью ah=09h, dx=offset STR, int 21h?
Заранее благодарен Вам.
Вопрос отправлен: 07.04.2003, 22:56
Отправитель: Veles
[Следующий вопрос >>] [Список вопросов]
Отвечает keleb-glin
Доброе время суток, Veles!
Если в конце строки не стоит '$', то никак (разве что затереть следующий после конца байт). А вообще, можно скопировать в отдельный буфер и в конце поставить '$'
Ответ отправлен: 09.04.2003, 19:29
Отправитель: keleb-glin
Отвечает Bob Johnson
Здравствуйте, Veles!
Если у тебя ds:si указывает на строку в памяти, то просто
mov dx, si
mov ah, 9
int 21h
Только не забудь в ее конец дописать '$'. Это можно сделать так. Пусть bx = длина строки, тогда
mov byte ptr [bx + si], '$'
Ответ отправлен: 08.04.2003, 21:02
Отправитель: Bob Johnson
Отвечает Joy
Здравствуйте, Veles!
Почитай рассылку. Очень много примеров пролетало по мереводу чисел в строку ASCII.
Ответ отправлен: 09.04.2003, 11:56
Отправитель: Joy
Отвечает Maverick
Добрый день, Veles!
Че то непонятно... Напиши конкретно пример.
DS:SI указывают на строку? Если с помощью 9 ф-ии, то в конце строки должно стоять $.
mov ah,9h
mov dx,si
int 21h
....
или тебе надо вывести именно 001A
Ответ отправлен: 08.04.2003, 05:07
Отправитель: Maverick
Вопрос № 2926 |
Здравствуйте.
У меня такой вот вопрос:
Как можно считать и тут же выводить сколько записано на дискетку баит, если для записи используется функция BIOS 03h int 13 ?
Вопрос отправлен: 08.04.2003, 00:59
Отправитель: Кислик
[Следующий вопрос >>] [Список вопросов]
Отвечает keleb-glin
Доброе время суток, Кислик!
Вообще, кол-во записанных байт будет в al, но ты лучше проверь.
Ответ отправлен: 09.04.2003, 19:27
Отправитель: keleb-glin
Отвечает Ayl
Здравствуйте, Кислик!
Так как функция 3 прерывания 13h выполняет запись на диск посекторно, то кол-во байт, записанных на дискету, равно числу в AL перед вызовом функции (количество записываемых секторов) на размер сектора в байтах (обычно 512).
Ответ отправлен: 09.04.2003, 14:22
Отправитель: Ayl
Отвечает Maverick
Приветствую Вас, Кислик!
Ну так перехватывай это прерывание. И смотри, если это ф-ия 03h, то гляди, что находится в регистрах, т.е. сколько хотят записать секторов и т.д. А потом переводи в байты.
Ответ отправлен: 08.04.2003, 05:07
Отправитель: Maverick
Вопрос № 2927 |
Добрый день, эксперты!
У меня на работе сломан компьютер(процессор Celeron 366 MНz, причина такая: при загрузке выдается сообщение
"Trend ChipAwayVirus (R) On Guard Ver 1.64", если в Setupe
поменять в Anti-Virus Protection Enabled на Disabled, то все-равно Windows не загружается.
Что надо делать?
Вопрос отправлен: 08.04.2003, 01:25
Отправитель: niklaptev (niklaptev@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, niklaptev!
Переустановить Windows.
Ответ отправлен: 08.04.2003, 21:03
Отправитель: Bob Johnson
Отвечает Maverick
Здравствуйте, niklaptev!
Проверь винчестер антивирусом на другом компе.
Можно сделать так:
грузись с дискеты
пиши fdisk.exe /mbr (вроде так)
И пробуй перезагрузится, если получилось, то не запускай никаких программ с винта, а ставь свежий антивирь и попер...
Это или корявый загрузочный вирь или деструктивный загрузочный.
Ответ отправлен: 08.04.2003, 05:07
Отправитель: Maverick
Отвечает Joy
Добрый день, niklaptev!
Есть вариант поменять покладку между клавиатурой и креслом :)
А если серьезно, то ты так и не написал, что происходит. После чего это случилось, что ты уже пробывал делать, и т.д. Напиши по-подробней что происходит (и что не происходит).
Ответ отправлен: 09.04.2003, 11:55
Отправитель: Joy
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (36) C / C++ (27) Perl (6) Delphi (16) Pascal (21) Basic / VBA (10) Java / JavaScript (9) PHP (4) MySQL / MSSQL (5) |
Пользователю Windows 95/98/Me (29) Windows NT/2000/XP (23) "Железо" (26) Поиск информации (14) |
Администратору Windows NT/2000/XP (11) Linux / Unix (12) |
Юристу Гражданское право (9) Семейное право (5) Трудовое право (5) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||