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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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
Отписаться
Убрать рекламу

В избранное