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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 274
от 24.05.2002, 16:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 229
Отправлено ответов: 588
Активность: 256.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

AllAddIn
Статус: Опытный
Общий рейтинг: 120.54
[Подробней >>]
Blackeye
Статус: Опытный
Общий рейтинг: 128.89
URL: Delphi, my programms...
[Подробней >>]
Shal
Статус: Начальный
Общий рейтинг: 108.57
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 134.02
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 149.1
[Подробней >>]
DiGiT
Статус: Профессиональный
Общий рейтинг: 153.61
[Подробней >>]
 
Painbringer
Статус: Профессиональный
Общий рейтинг: 157.26
URL: нечто наподобие домашней страницы
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 137.64
URL: Пристанище неодинокого программиста
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 163.72
[Подробней >>]
 
Тorax
Статус: Начальный
Общий рейтинг: 114.28
[Подробней >>]
BlackBeast
Статус: Начальный
Общий рейтинг: 104.76
[Подробней >>]
Dzik
Статус: Доверительный
Общий рейтинг: 114.54
[Подробней >>]
 
Dron
Статус: Профессиональный
Общий рейтинг: 155.29
URL: Операционная система с нуля!
[Подробней >>]
Gibbel
Статус: Доверительный
Общий рейтинг: 110.36
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 163.01
[Подробней >>]
 
Beeblebrox
Статус: Опытный
Общий рейтинг: 135
URL: Beeblebrox / TMA HomePage
[Подробней >>]
Zloy
Статус: Начальный
Общий рейтинг: 104.68
[Подробней >>]
Sensey
Статус: Профессиональный
Общий рейтинг: 160.88
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 202. Как перезагрузить компьютер из ДОСА Программно? Какая функция для этого есть, или прерывания или i/o... (ответов: 8)
Вопрос № 203. Привет! Я уже понял, что на мой вопрос по поводу вывода прог, перехвативших вектора, почти все за... (ответов: 6)
Вопрос № 204. Здраствуйте Эксперты. Помогите пожайлуста реализовать такую задачу. Ввести с клавиатуры последовател... (ответов: 7)
Вопрос № 205. Здраствуйте эксперты! Предположим, что я написал прогу в которой можно перемешать по экрану квадрат.... (ответов: 2)
Вопрос № 206. Здравствуйте! Где можно взять исходник на программу подобную языковой панели Offica XP или индикатор... (ответов: 2)
Вопрос № 208. Как очистить буфер клавиатуры под ДОСом ? Если нетрудно, дайте исходник на сях или асме.. Спасибо.... (ответов: 4)

Вопросов: 6, ответов: 29


 Вопрос № 202

Как перезагрузить компьютер из ДОСА Программно? Какая функция для этого есть, или прерывания или i/o порт?



Вопрос отправлен: 19.05.2002, 20:44
Отправитель: Олег

[Следующий вопрос >>] [Список вопросов]

Отвечает AllAddIn

Доброе время суток, Олег!
INT 18H

Ответ отправлен: 20.05.2002, 15:43
Отправитель: AllAddIn


Отвечает Blackeye

Приветствую Вас, Олег!
МОжжно использовать int 19h, чтобы перезагрузить ДОС - правда под Виндой такое может не пройдет!

Ответ отправлен: 21.05.2002, 20:18
Отправитель: Blackeye


Отвечает Shal

Приветствую Вас, Олег!
Вроде как int 19h.


Приложение:

Ответ отправлен: 20.05.2002, 17:53
Отправитель: Shal


Отвечает baldr

Добрый день, Олег!
Я пользуюсь [см. приложение]. Там тоже не идеал, но все же лучше, чем у INT 14h !
Даже винда (98SE) задумывается, офигев! Правда, потом выходит из комы...
Если кратко, то здесь просто передается управление на ту часть в BIOS, которая и
отвечает за горячую перезагрузку.


Приложение:

Ответ отправлен: 20.05.2002, 00:06
Отправитель: baldr


Отвечает Ayl

Добрый день, Олег!
db 0eah
dw 0fff0h, 0f000h
Соответственно, команда jmp far F000:FFF0
По этому адресу находится процедура BIOS старта компа.

Ответ отправлен: 20.05.2002, 00:56
Отправитель: Ayl


Отвечает DiGiT

Доброе время суток, Олег!
Знаешь знаю по опыту точно перегружает
mov eax, cr0
or eax, 1
mov cr0, eax


Ответ отправлен: 20.05.2002, 08:37
Отправитель: DiGiT


Отвечает Painbringer

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

Ответ отправлен: 20.05.2002, 11:50
Отправитель: Painbringer


Отвечает Артём Шегеда

Приветствую Вас, Олег!
int 19h - перезагрузка DOS. Может не работать под Windows.

Ответ отправлен: 20.05.2002, 14:01
Отправитель: Артём Шегеда


 Вопрос № 203

Привет!
Я уже понял, что на мой вопрос по поводу вывода прог, перехвативших вектора, почти
все забили... :( Ответил только Gibbel... Так вот: я тоже, когда мне задали такой вопрос,
не задумываясь, ответил почти так же, что надо знать исходные, а потом сравнивать... Но потом,
задумался: а как же, например, выводит список Dos Navigator в своих встроенных утилитах? Он
ведь выводит и проги, которые были запущены и до него! А вот Volcov Commander или Release еще
и выружать эти проги могет! Да и любая прога, призводящая тестирование компа, выведет эти
названия! Я сначала подумал, что это DOS, если прерывание перехватываешь через ф-ю 25h,
запоминает эти проги, но оказалось, что выводят не только такие...
В общем, спрошу еще раз: объясните, кто знает - как получить список векторов прерываний,
перехваченных программами?
И еще вопрос: народ, у вас ответы не пропадают? Я некоторые свои ответы не нахожу в рассылке!
Обидно отвечать зря! :( Написал нашему админу, а он что-то не отвечает...



Вопрос отправлен: 20.05.2002, 00:08
Отправитель: baldr (baldr@pisem.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Здравствуйте, baldr!
Значит, есть такое дело... Если, конечно, все они юзают мультиплексор 2Fh (или AMIS 2Dh) В этом случае, 04h-ф-ция 2Dh прерывания в DS:BX возвращает адрес списка прерываний, перехваченных данной прогой (в ah - ее идентификатор)
НО (!)
Сам понимаешь, не все проги юзят мультиплексор, поэтому если ты будешь перехватывать обычной 25h ф-цией, то никакая суперутилита ничего сказать не сможет (конечно, если ты запустился до ЗАПОМИНАНИЯ ей таблицы векторов, такие тоже есть моменты)

Ответ отправлен: 20.05.2002, 22:18
Отправитель: Broken Sword


Отвечает Тorax

Доброе время суток, baldr!
Вот линк. Надеюсь поможет:
http://www.rusdoc.ru/cgi/view.pl?275
Torax


Ответ отправлен: 22.05.2002, 19:42
Отправитель: Тorax


Отвечает BlackBeast

Здравствуйте, baldr!
Все не просто, а очень просто :) Ищем все проги в памяти (с помощью MCB) получаем начало и конец этих блоков в 32 форме т.е. le=segm*16+offs. Далее сканируем таблицу векторов прерываний с 0 по 255, преобразуем тек. вектор по тому же принципу и если le вектора попадает в диапазон памяти выделенный проге, то ... она его и переопределила. Именно так и работает DOS Navigator v 1.50. Исходник соответствующего модуля, у тебя в ящике, где писем нет :)
Best regards. BlackBeast


Ответ отправлен: 20.05.2002, 00:47
Отправитель: BlackBeast


Отвечает Dzik

Доброе время суток, baldr!
По поводу ответов: пропадают и очень часто!


Ответ отправлен: 20.05.2002, 10:41
Отправитель: Dzik


Отвечает Dron

Приветствую Вас, baldr!
По поводу прерываний - уже ответил...
составь список резидентов и проведи паралели с таблицей векторов прерываний.


Ответ отправлен: 20.05.2002, 11:06
Отправитель: Dron


Отвечает Gibbel

Добрый день, baldr!
1. Commanderы там разные и утилиты соответствующие смотрят по тому, в адресное пространство какой программы уходит прерывание.
1.1. В прошлый раз ты спрашивал, _как_ _определить_ _какие_ _перерывания_ _были_ _перехвачены_, но не _как_ _определить_ _кем_ _они_ перехвачены_.
2. Выгрузить программу, перехватившую прерывание возможно только если знать, куда оно ужодило до нее... Соответственно, тот же самый Volcov не выгрузит тебе резидент, запущенный до загрузки самого Volcovа...

Ответ отправлен: 20.05.2002, 12:52
Отправитель: Gibbel


 Вопрос № 204

Здраствуйте Эксперты.
Помогите пожайлуста реализовать такую задачу.
Ввести с клавиатуры последовательность латинских букв верхнего регистра и перевести их в буквы нижнего регистра с выдачей результата на экран.
Заранее благодарен...



Вопрос отправлен: 20.05.2002, 09:33
Отправитель: Владимир

[Следующий вопрос >>] [Список вопросов]

Отвечает Shal

Доброе время суток, Владимир!


Приложение:

Ответ отправлен: 20.05.2002, 17:48
Отправитель: Shal


Отвечает masquer

Добрый день, Владимир!
Для подсказки - разница между верхним регистром и нижним 20h

Ответ отправлен: 21.05.2002, 12:15
Отправитель: masquer


Отвечает Beeblebrox

Доброе время суток, Владимир!
На самом деле твой вопрос звучит так: "Люди, сделайте за меня мою лабораторную работу/курсовую/диплом/кандидатскую/докторскую".
1.Ввод символа с клавиатуры:
start:
mov ah,0
int 16h
; al=char
2.Преобразование в нижний регистр без проверки на правильность аргумента:
add al,20h
3.Вывод al на экран без возможности редиректа:
int 29h
4. "Последовательность букв" означает, что нужен цикл (после пункта 3 команда jmp start). Выход, например, по Esc, то есть между первым и вторым пунктом вставить:
cmp al,1Bh
jne contin
mov ah,4Ch
int 21h
contin:

Итого 16 байт :)

Ответ отправлен: 20.05.2002, 10:39
Отправитель: Beeblebrox


Отвечает Ayl

Доброе время суток, Владимир!
А в чем проблема? Вопроса-то как такового нет, поэтому предполагаю, что это просьба написать программу. А этим, как записано в правилах, здесь не занимаются.
Могу предложить несколько рекомендаций.
1. Ввести последовательность букв. Вариантов - куча. Можно использовать:
а). Посимвольный ввод без эха с помощью:
- прерывания 16h (функции 0 или 10h)
- прерывания 21h (функции 6, 7, 8)
б). Посимвольный ввод с эхом:
- прерывание 21h (функция 1)
в). Буферизированный ввод:
- прерывание 21h (функция 0ah)
2. Преобразовать из верхнего в нижний регистр - для диапазона кодов 41h - 5ah нужно просто прибавить значение 20h
3. Вывести на экран - опять множество вариантов:
а). Посимвольный вывод:
- прерывание 29h
- прерывание 21h (функции 2 и 40h)
- прерывание 10h (функции 9 и 0ah)
б). Строковый вывод:
- прерывание 21h (функции 9 и 40h)
Все.

Ответ отправлен: 20.05.2002, 12:09
Отправитель: Ayl


Отвечает BlackBeast

Приветствую Вас, Владимир!
Предположим введенная строка - inbuffer
Выходная строка - outbuffer
datalen - длина введенных данных
......
mov cx, datalen
mov si, offset inbuffer
mov di, offset outbuffer
l1:
lodsb
add al, 20h ; собственно перевод
stosb
loop l1
.......

Ну а на экран можно вывести используя 21h прерывание или 10h, и т.п.


Ответ отправлен: 20.05.2002, 14:16
Отправитель: BlackBeast


Отвечает Zloy

Приветствую Вас, Владимир!
Лови мысль:
Заглавные буквы (A-Z) имеют коды 41h-5Ah, строчные (a-z) 61h-7Ah. Единственная разница в том, что 5 бит 0 для заглавных букв и 1 для строчных:
№ бита 76543210
A 01000001
a 01100001


Ответ отправлен: 20.05.2002, 14:21
Отправитель: Zloy


Отвечает Тorax

Здравствуйте, Владимир!
Считываешь побуквенно, а потом к скан-коду додаешь 20h. Ну а выводить символ я надеюсь ты умеешь.
Torax


Ответ отправлен: 22.05.2002, 01:43
Отправитель: Тorax


 Вопрос № 205

Здраствуйте эксперты!
Предположим, что я написал прогу в которой можно перемешать по экрану квадрат. Как сделать так, чтоб был еше один квадрат который работал незаваисемо от моего квадрата, т.е. при перемешении своего другой преремешался автономно.
С уважением...!



Вопрос отправлен: 20.05.2002, 11:59
Отправитель: kuper

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Приветствую Вас, kuper!
Привязваешь второй квадрат к какому-нибудь событию, таймеру, например.

Ответ отправлен: 21.05.2002, 12:29
Отправитель: masquer


Отвечает Ayl

Здравствуйте, kuper!
Ну а что мешает? Свой квадрат обрабатывай в зависимости от нажатий клавиш, а второй пусть перемещается случайным образом. Т.е. у тебя в проге будет два куска кода, отвечающие за квадраты. В первом ты обрабатываешь нажатия клавиш и перемещаешь свой квадрат, а во втором случайным образом перемещаешь второй квадрат.


Ответ отправлен: 20.05.2002, 12:13
Отправитель: Ayl


 Вопрос № 206

Здравствуйте! Где можно взять исходник на программу подобную языковой панели Offica XP или индикатора языка internat.exe. Можно ли взять где-нибудь сырье на программы работающие с языком (или раскладкой клавиатуры)?
Заранее благодарю за ответы.



Вопрос отправлен: 20.05.2002, 15:13
Отправитель: Yerba (dek3@mail.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает Blackeye

Приветствую Вас, Yerba!
Как говориться если гора не дет к Магомету, то Магомет идет к горе. Вот так и тут. Напиши свою программу которая бы переключала язык, юзай GetKeyboardLayout GetKeyboardLayoutList
GetKeyboardLayoutName
GetKeyboardState
из WinAPI и все у тебя получиться :)

Ответ отправлен: 21.05.2002, 20:18
Отправитель: Blackeye


Отвечает masquer

Приветствую Вас, Yerba!
Ищи в мсдн, можно дизассемблировать internat.exe и посмотреть как он работает - ну это если очень надо.

Ответ отправлен: 21.05.2002, 12:30
Отправитель: masquer


 Вопрос № 208

Как очистить буфер клавиатуры под ДОСом ?
Если нетрудно, дайте исходник на сях или асме..
Спасибо.



Вопрос отправлен: 20.05.2002, 15:59
Отправитель: Рин

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Приветствую Вас, Рин!
Варианты:
1. Использовать функцию 0ch прерывания 21h. AL = 07h
2. В цикле читать из буфера до его очистки. См. приложение
3. Приравнять указатели буфера клавиатуры. См. приложение

Приложение:

Ответ отправлен: 20.05.2002, 16:18
Отправитель: Ayl


Отвечает Sensey

Здравствуйте, Рин!
По адресу 0000:041Аh и 0000:041Сh
находятся голова и хвост буфера клавы. Уравняй их.

Ответ отправлен: 20.05.2002, 16:33
Отправитель: Sensey


Отвечает Zloy

Доброе время суток, Рин!
Вот, что по этому поводу написано у Джордейна:
;------- выравниваем значения указателеий на хвост и голову буфера клавиатуры
CLI
SUB AX, AX
MOV ES, AX
MOV AL, ES:[41Ah]
MOV ES:[41Ch], AL
STI


Ответ отправлен: 20.05.2002, 19:13
Отправитель: Zloy


Отвечает Тorax

Здравствуйте, Рин!
Кинь e-mail на torax@dotes.west.energy.gov.ua. У меня есть статейка про организацию буфера клавиатуры.
Torax


Ответ отправлен: 22.05.2002, 01:42
Отправитель: Тorax



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (56)
C / C++ (29)
Perl (9)
Delphi (19)
Pascal (31)
Basic / VBA (13)
Java / JavaScript (9)
PHP (7)
MySQL / MSSQL (6)
Пользователю
Windows 95/98/Me (52)
Windows NT/2000/XP (37)
"Железо" (43)
Поиск информации (19)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (7)
Юристу
Гражданское право (15)
Уголовное право (3)
Семейное право (6)
Трудовое право (8)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




be number one SUPERTOP Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное