Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 546
от 18.05.2003, 14:50
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 3232 Отправлено ответов: 9454 Активность: 292.5 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
keleb-glin Статус: Опытный Общий рейтинг: 109.35 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 119.06 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 122.9 URL: моя рассылка по Protected Mode [Подробней >>] |
Insane coder Статус: Начальный Общий рейтинг: 102.36 [Подробней >>] |
Lynx Статус: Опытный Общий рейтинг: 137.58 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 150.48 URL: Программирование [Подробней >>] |
Hangatyr Статус: Опытный Общий рейтинг: 121.92 [Подробней >>] |
Ramzes Статус: Опытный Общий рейтинг: 127.55 URL: Microsoft homepage [Подробней >>] |
Tigran K. Kalaidjian Статус: Опытный Общий рейтинг: 116.22 URL: Методы оптимизации работы ПК [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 139.2 [Подробней >>] |
Илья Статус: Опытный Общий рейтинг: 103.72 [Подробней >>] |
Pin Статус: Опытный Общий рейтинг: 124.27 URL: My HOMEPAGE [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 110.98 URL: Мой сайтик... [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 112.45 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
VicSimon Статус: Доверительный Общий рейтинг: 102.45 [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 133.41 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
Vdr Статус: Начальный Общий рейтинг: 111.11 [Подробней >>] |
Knignick Статус: Доверительный Общий рейтинг: 113.14 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 3198. Здравствуйте, Уважаемые Эксперты. Есть маленький вопросик. Пишу резидента, который должен отслеживат... (ответов: 6)
Вопрос № 3199. Здравствуйте снова! Уупс! Ошибся я, простите. Конечно, речь шла о реальном режиме и V86. Извините, ч... (ответов: 3)
Вопрос № 3200. Добрый день Уважаемые экмперты ответы которые вы прислали не работают помогите разрешить вот эту про... (ответов: 7)
Вопрос № 3202. Привет Бросте в меня описание TCP/IP и UDP Спасибо... (ответов: 1)
Вопрос № 3203. Доброе время суток. У меня есть старая четверка с четырьмя модулями 30-pinовой памяти. В одном журна... (ответов: 1)
Вопрос № 3205. Здравствуйте Уважаемые Эксперты! Вопрос возможно не совсем по теме , если не трудно прошу ответить... (ответов: 8)
Вопросов: 6, ответов: 26
Вопрос № 3198 |
Здравствуйте, Уважаемые Эксперты.
Есть маленький вопросик. Пишу резидента, который должен отслеживать все нажатые клавиши, но мне нужны ASCII-коды а не "позиционные". Можно ли так организавать обработку прерывания 09h чтобы в итоге я получал ASCII (Не очень хочется переводить позиционный код в ASCII самому).
Заранее благодарен.
Вопрос отправлен: 13.05.2003, 11:29
Отправитель: vdr
[Следующий вопрос >>] [Список вопросов]
Отвечает keleb-glin
Приветствую Вас, vdr!
Я думаю, можно сделать так, чтобы твой обработчик вызывался позже настоящего обработчика девятки и читал клавиатурный буфер
Ответ отправлен: 14.05.2003, 15:29
Отправитель: keleb-glin
Отвечает Ayl
Приветствую Вас, vdr!
В ASCII-коды переводит стандартный обработчик Int09. Тут либо ты используешь стандартный обработчик, либо сам занимаешься переводом. От контроллера клавиатуры ты ничего кроме скен-кода не получишь. А кроме как через Int09 ты не получишь информацию о нажатии/отпускании клавиши.
Ты можешь организовать обработку прерывания Int09 следующим образом (см.Приложение).
Вначале сохраняются регистры и регистр ES устанавливается на сегмент данных BIOS (0040h). Затем считывается текущий указатель на конец буфера клавиатуры (0040:001c). Именно сюда будет записан код клавиши после работы стандартного обработчика. После этого вызывается старый обработчик Int09 (call far Old_int09, а т.к. адрес обработчика в момент компиляции неизвестен, то эта команда записывается как код операции и резервируется двойное слово для сохранения адреса). Но после работы стандартного обработчика не всегда что-то будет записано в буфер клавиатуры (например, отпускание всех клавиш, нажатие клавиш Shift, Ctrl, Alt и т.п.). Поэтому после возврата из старого обработчика проверяется изменение указателя. Если оно не произошло, то просто возвращаемся в прерванную программу. Иначе по сохраненному адресу считываем ASCII-код и скен-код нажатой клавиши (оба, т.к. для многих клавиш ASCII-код равен 0).
Приложение:
Ответ отправлен: 13.05.2003, 12:49
Отправитель: Ayl
Отвечает Broken Sword
Приветствую Вас, vdr!
на все клавиши закономерности нет, придется возиться с таблицами
Ответ отправлен: 13.05.2003, 11:57
Отправитель: Broken Sword
Отвечает Insane coder
Добрый день, vdr!
Не знаю
Ответ отправлен: 13.05.2003, 14:50
Отправитель: Insane coder
Отвечает Lynx
Добрый день, vdr!
Можно, только тебе придётся в обработчик вставить код переводящий из позиционного кода в ASCII. Тоже самое и получиться. :)))
Ответ отправлен: 13.05.2003, 15:16
Отправитель: Lynx
Отвечает Bob Johnson
Приветствую Вас, vdr!
Попробуй вначале вызывать старый обработчик, а потом смотреть кольцевой буфер на предмет последнего символа, не вытаскивая его оттутда...
Ответ отправлен: 13.05.2003, 18:21
Отправитель: Bob Johnson
Вопрос № 3199 |
Здравствуйте снова!
Уупс! Ошибся я, простите. Конечно, речь шла о реальном режиме и V86. Извините, что отнимаю ваше время.
Вопрос отправлен: 13.05.2003, 14:52
Отправитель: c0c0
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Добрый день, c0c0 !
какая разница - в V86 PE все равно стоит
Ответ отправлен: 13.05.2003, 16:11
Отправитель: Broken Sword
Отвечает Hangatyr
Приветствую Вас, c0c0 !
1. Флаг VM не получить с помощью pushfd - там всегда будет ноль. Его можно было бы взять из сегмента состояния задачи, но беда в том, что вызов из V86 инструкций, предназначенных для работы в прот. моде (str, ltr, lldt и т.д.) вызовет исключение #UD.
2. Извини Broken Sword, но ты ИМХО немного неправ. PE-то (в CR0), конечно, стоит и в V86, но как его оттуда вытащить - выполнение привилегированных инструкций (lidt, lgdt... а также ОПЕРАЦИЙ с регистрами drx, crx, trx) вызовет исключение #GP. Поэтому инструкция mov eax, cr0 тут не подойдет - винда (при условии запуска в винде, а исходя из условия, наверное, так и есть) эксепшена не генерит, точнее генериться-то оно, конечно, генерится, просто нам этого не показывают, но и eax тоже не изменяется. И если при старте eax=0, то и после он будет 0. Хотя, может, я и не прав - на всякий случай прошу прощения.
ЗЫ За неимением ничего другого пришлось использовать FASM.
Приложение:
Ответ отправлен: 13.05.2003, 17:08
Отправитель: Hangatyr
Отвечает Ramzes
Добрый день, c0c0 !
pushf
pop eax
test eax, 4000h // проверяем флаг VM
jnz ...; режим V86
Ответ отправлен: 13.05.2003, 18:03
Отправитель: Ramzes
Вопрос № 3200 |
Добрый день Уважаемые экмперты ответы которые вы прислали не работают помогите разрешить вот эту проблему:
Мне нужно в BorlandC++ 3.1 записать в регистр AX значение I элемента массива т.е
void main()
{
int mas[5]={0,1,2,3,4};
_asm{
mov si,3//Третий элемент массива
mov ax,mas[si] //Записать в АХ число 2 (Неработает)
}
}
Помогите записать в AX необходимое мне число (Подкиньте исходник)!!!
Вопрос отправлен: 13.05.2003, 16:46
Отправитель: Lamer (hit_@ukr.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает keleb-glin
Добрый день, Lamer!
регистры проца можно юзать и без асм-вставок. пини _AX_ = и наслаждайся. Кстати, я не уверен, что борланд ц++ корректно поддерживает такие конструкции:
_asm{
}
у меня они тоже глючили. попробуй перед каждой асм-командой писать asm, например
asm mov ax, 1
Ответ отправлен: 14.05.2003, 15:25
Отправитель: keleb-glin
Отвечает Tigran K. Kalaidjian
Доброе время суток, Lamer!
Первое, что бросается в глаза - Вы имеете дело с массивом типа Int, то есть с двухбайтовым типом данных, а работаете с ним как с массивом типа byte.
т.е. попробуйте заменить
mov si, 3
на
mov si, 5; пропуск 2 предыдущих чисел и запись адреса третьего элемента (2+2+1)
Ответ отправлен: 14.05.2003, 15:11
Отправитель: Tigran K. Kalaidjian
Отвечает masquer
Доброе время суток, Lamer!
Ну, и что конкретно не работает, какие ошибки возникают? Все ответы были по теме и должны работать, все остальное - от лукавого. В отладчике посмотри, что с данными происходит. И старайся так и в дальнейшем делать.
Ответ отправлен: 13.05.2003, 17:53
Отправитель: masquer
Отвечает Илья
Добрый день, Lamer!
Прелесть Turbo C++ ранних версий (3.0, 3.1...) в том, что они прекрасно понимают вот такую конструкцию:
void main()
{
int mas[5]={0,1,2,3,4};
_AX = mas[3-1]; // 3-1 так как нумерация начинаяется с 0-го элемента
}
Так же по идее должна работать такая запись:
void main()
{
int mas[5]={0,1,2,3,4};
_asm{
lea si, mas
add si, 3*2 // Так как размер типа int - 2 байта
mov ax, word ptr [si]
}
}
Ответ отправлен: 13.05.2003, 18:15
Отправитель: Илья
Отвечает Bob Johnson
Доброе время суток, Lamer!
Предположу, в дополнение к своему предыдущему ответу, что Borland C++ располагает локальные переменные в стеке, т.е. доступ надо делать черех регистр ss:
mov si, 3
shl si, 1
mov ax, ss:[offset mas + si]
Ответ отправлен: 13.05.2003, 18:23
Отправитель: Bob Johnson
Отвечает Pin
Здравствуйте, Lamer!
Работай через временную переменную __int16! (См. мой предыдущий ответ вам). В C++Builder все работает. Если все-таки не пойдет - пищи: где и какая ощибка.
Ответ отправлен: 14.05.2003, 00:00
Отправитель: Pin
Отвечает Portnov
Здравствуйте, Lamer!
Насколько я понимаю, у вас вместо двух записывалось три?
mov si, 2 // !!! Элементы с нуля всю жизнь нумеруются!
mov ax,mas[si]
...
Ответ отправлен: 14.05.2003, 19:25
Отправитель: Portnov
Вопрос № 3202 |
Привет
Бросте в меня описание TCP/IP и UDP
Спасибо
Вопрос отправлен: 13.05.2003, 22:26
Отправитель: Aex (2002ai@ua.fm)
[Следующий вопрос >>] [Список вопросов]
Отвечает Pin
Приветствую Вас, Aex!
См. www.codenet.ru
Ответ отправлен: 14.05.2003, 00:07
Отправитель: Pin
Вопрос № 3203 |
Доброе время суток.
У меня есть старая четверка с четырьмя модулями 30-pinовой памяти. В одном журнале встретил схему переходника с 30 на 72, где 72-х пиновый модуль представлен как четыре 30 пиновых с одной шиной адреса и разными шинами данных. Все как-бы понятно, только никак не пойму что делать с сигналами RAS. В исходной схеме эти сигналы, а точнее сигналы Ras1 и Ras3 идут от второго банка, то есть от 5-8 30 пиновой панели. У меня этих панелей всего 4. Может кто присоветует что, и еще как узнать сколько максимально памяти может держать мать.
Спасибо.
Вопрос отправлен: 14.05.2003, 08:38
Отправитель: Vananova (Vananova@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Lynx
Добрый день, Vananova!
2. Мать может держать ровно столько памяти, сколько может держать один слот умноженое на количество слотов. Всё это можно найти в документации на материнку.
Ответ отправлен: 14.05.2003, 12:17
Отправитель: Lynx
Вопрос № 3205 |
Здравствуйте Уважаемые Эксперты!
Вопрос возможно не совсем по теме , если не трудно
прошу ответить.1.Отличается ли assembler х86 от асма для
контролеров типа Motorola,Pic и т.д.
2.Карточки GSM мобилок и спутникового TV это что, контролеры
или ПЗУ .
Зарание Спасибо!
Вопрос отправлен: 14.05.2003, 14:41
Отправитель: Vladimir
[Следующий вопрос >>] [Список вопросов]
Отвечает baldr
Приветствую Вас, Vladimir!
1. Отличаются. Разный набор команд а, порой, даже схожие команды отличаются, например, порядком операндов...
2. IMHO может быть и тем и другим...
Ответ отправлен: 14.05.2003, 15:34
Отправитель: baldr
Отвечает Ayl
Приветствую Вас, Vladimir!
1. Безусловно, отличаются. Потому что у этих процов различная внутренняя структура, различный набор команд и т.п. То же самое, что спросить - отличается ли вождение автомобиля от вождения самолета. Отличается.
Ответ отправлен: 14.05.2003, 15:12
Отправитель: Ayl
Отвечает VicSimon
Здравствуйте, Vladimir!
1. Отличается. Разные системы команд.
2. Насчет карточки спутникового TV не в курсе (не видел), а SIM-карта - однокристальная микро-ЭВМ.
Ответ отправлен: 14.05.2003, 14:56
Отправитель: VicSimon
Отвечает keleb-glin
Доброе время суток, Vladimir!
На счёт второго не знаю, а на первый отвечу.
Все ассемблеры отличаются. И это отличительные особенности в первую очередь связаны с архитектурой соотв. процессора.
Т.к. процы от моторола, пик-контроллеры и пр. от РС отличаются довольно сильно, ассемблеры различаются. Просто в разных процах разное количество регистров, которые ещё и называются по разному. Также различен и набор машинных команд. Конечно, mov он и в африке mov (по-моему в асме для пик он так и называется), а вот команд, делающих то же, что и lgdt, нет, поэтому и lgdt нет, зато есть что-нибудь ещё, чего нет в х86, и его уже lgdt не назовут.
Короче, ты понял.
Ответ отправлен: 14.05.2003, 15:07
Отправитель: keleb-glin
Отвечает Maverick
Приветствую Вас, Vladimir!
1.Ну конечно разные, это нужно на сайтах производителей искать синтаксис и набор команд.
2.ПЗУ
Ответ отправлен: 14.05.2003, 15:52
Отправитель: Maverick
Отвечает Vdr
Добрый день, Vladimir!
По моему мнению, асемблера довольно сильно отличаются
А Карточки - по идее ПЗУ.
Ответ отправлен: 14.05.2003, 17:26
Отправитель: Vdr
Отвечает masquer
Доброе время суток, Vladimir!
1. Хм, кроме регистров (об этом уже сказали) еще и формат числа может быть другим - big endian, в отличие от little endian у интел
Ответ отправлен: 14.05.2003, 17:52
Отправитель: masquer
Отвечает Knignick
Добрый день, Vladimir!
1)Они все отличаются друг от друга. У каждого микро(контроллера/процессора) своя архитектура. Одни RISC, другие CISC и т.п.
Ответ отправлен: 14.05.2003, 23:07
Отправитель: Knignick
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (38) C / C++ (30) Perl (5) Builder / Delphi (16) Pascal (29) Basic / VBA (12) Java / JavaScript (11) PHP (5) MySQL / MSSQL (4) |
Пользователю Windows 95/98/Me (42) Windows NT/2000/XP (30) "Железо" (29) Поиск информации (14) |
Администратору Windows NT/2000/XP (19) Linux / Unix (10) |
Юристу Гражданское право (7) Семейное право (4) Трудовое право (5) КоАП (4) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
© 2003 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||