Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› ASM: перехват NumLock
Посл.ответ Сообщение

Ранг: 9.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2011 23:50
· Личное сообщение · #1

Здраствуйте!

мне нужно при нажатии NumLock в консоли выводить "1". Но проблема в том, что когда я читаю символы с помощъю int 16h:

mov ah,10h
int 16h

то программа ждет нажатия клавиши, а когда я нажимаю Numlock то прога продолжает ожидать нажатия клавиш...

как сделать так чтобы при нажатии 1 выводилось 1, а при нажатии Numlock - 2?




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 23 сентября 2011 00:20
· Личное сообщение · #2

Перехватывать int 9

-----
DREAMS CALL US




Ранг: 9.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 сентября 2011 02:19
· Личное сообщение · #3

спасибо....

а как сделать програмно простейшую задержку на 10 мс? везде пишут о 86h int 15h, но у меня почему то не работает. Вот кусок кода:

Code:
  1. ;--------------
  2.   mov ah,09h
  3.   mov dx,offset msg_1
  4.   int 21h
  5.   
  6.   ;call delay
  7.   mov cx,0ffffh
  8.   mov dx,0ffffh 
  9.   mov ah,86h 
  10.   int 15h
  11.   
  12.   mov ah,09h
  13.   mov dx,offset msg_1
  14.   int 21h  
  15. ;--------------


теоретически интервал между выводом сообщений должен быть большым, но никакого интервала нет...



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 23 сентября 2011 09:04
· Личное сообщение · #4

maxteam пишет:
а как сделать програмно простейшую задержку на 10 мс?

Тебя ж не забанили на гугле?
Кратко: Из-под 32-х разрядной винды - вряд ли.



Ранг: 9.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 сентября 2011 11:40
· Личное сообщение · #5

yagello пишет:
Тебя ж не забанили на гугле?


если внимательно посмотреть то мой код с этой темы...но как сказано Из-под 32-х разрядной винды он не работает...



Ранг: 1.8 (гость), 2thx
Активность: 0=0
Статус: Участник

Создано: 23 сентября 2011 11:58
· Личное сообщение · #6

32-разрядная винда работает в безопасном режиме, а команды in, out (и некоторые другие) не работают в третьем кольце (где ты и находишься).

для решения задачи используй winapi или спускайся в 0 кольцо (пиши драйвер) для получения привилегий работы с портами



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 23 сентября 2011 12:31
· Личное сообщение · #7

А если попробовать так:
INT 1AH
Запрос и установка текущего времени и даты. Считывает и записывает показание часов в соответствии созначением в регистре AH. Для определения продолжительности выполнения программы можно перед началом выполнения установить часы в 0, а после считать текущее время. Отсчет времени идет примерно 18,2 раза в секунду. Значение в регистре AH соответствует следующим операциям:
AH=00 Запрос времени. В регистре CX устанавливается старшая часть значения, а в регистре DX - младшая. Если после последнего запроса прошло 24 часа, то в регистре AL будет не нулевое значение.

вызывать в цикле и проверять значение, изменилось на нужную величину - выходим?
состряпано за пару минут в HIEW (ну не хочу я тасм вызывать ради ТАКОГО =)
Code:
  1. 00000100: 33C0     xor         ax,ax
  2. 00000102: CD1A     int         01A
  3. 00000104: 89168200 mov         [00082],dx
  4. 00000108: 33C0     xor         ax,ax
  5. 0000010A: CD1A     int         01A
  6. 0000010C: 2B168200 sub         dx,[00082]
  7. 00000110: 83FA20   cmp         dx,020
  8. 00000113: 76F3     jbe         000000108
  9. 00000115: C3       retn

работает в дос-окне винды на-ура

| Сообщение посчитали полезным: maxteam

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 23 сентября 2011 21:11 · Поправил: bowrouco
· Личное сообщение · #8

puzo
Любая многозадачная ось исполняется в протектед моде. Исполнение In, Out, Cli/Sti не зависито от мода(ринг). Это определяет уровень привилегий ввода вывода(IOPL в флажках). В юзермоде при установленном поле IOPL в 3 эти инструкции робят. Даже инсфокласс был официальный PsUserModeIOPL в псинфо, позволяющий это поле прогрузить в контексты. Таже олли при трейсе Cli останавливает всю ось.

Code:
  1. IF IOPL < CPL
  2. THEN
  3. IF <- 0; (* Reset Interrupt Flag *)
  4. ELSE
  5. IF ((IOPL < CPL) and (CPL = 3) and (PVI = 1))
  6. THEN
  7. VIF <- 0; (* Reset Virtual Interrupt Flag *)
  8. ELSE
  9. #GP(0);
  10. FI;

Intel® 64 and IA-32 Architectures Software Developer’s Manual V.2A, 3-109

| Сообщение посчитали полезным: puzo

Ранг: 9.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 сентября 2011 14:01
· Личное сообщение · #9

а как включить светодиоды NumLock,CapsLock,ScrollLock? по идеи нужно програмно нажать эти клавиши...

я использую такой код:

Code:
  1. mov ah,02h
  2. int 16h
  3.   
  4. SUB AX,AX         ;устанавливаем добавочный сегмент на
  5. MOV ES,AX         ;начало памяти
  6. MOV AL,01110000B  ;готовим бит 7 к установке
  7. or ES:[417H],AL   ;меняем байт статуса


но он не работает...тоесть индикаторы не переключаются

П.С: винапи не нада




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 сентября 2011 14:02
· Личное сообщение · #10

Может проще тогда MSDOS поставить?

-----
Yann Tiersen best and do not fuck




Ранг: 9.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 сентября 2011 14:33 · Поправил: maxteam
· Личное сообщение · #11

нет... мне просто нада все сделать на прериваниях дос или биос...но поскольку не все что работает хорошо в досе работает в ХР, то остается вариант за биосом или у кого есть лучшый совет

...или запись в порты 60,61H



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 24 сентября 2011 23:34
· Личное сообщение · #12

maxteam Это называется "ежики плакали, кололись но пытались съесть кактус.." Нет доступа к реальному БИОСу, а только урезанный вариант. ДОС тоже урезанный.
Так же нет доступа к портам. Ну правда порты можно открыть.
Проще виртуальную машину поюзать. Там все должно работать.



Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 24 сентября 2011 23:48
· Личное сообщение · #13

Вот у меня стойкое ощущение, что кто-то хочет, чтоб мы вместо него курсовую работу сделали.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 25 сентября 2011 03:26 · Поправил: ajax
· Личное сообщение · #14

maxteam
http://forum.sources.ru/showtopic=15507&view=showall
http://www.merlyn.demon.co.uk/pas-wait.htm

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 25 сентября 2011 10:00
· Личное сообщение · #15

Чтоб играться с портами под Вынь-NT и выше, есть некий драйвер PortNT. С его помощью дебильно-защищенная Pro100 запускается под WinNT/2000/XP/...

1bf8_25.09.2011_EXELAB.rU.tgz - PortNT.rar


 eXeL@B —› Программирование —› ASM: перехват NumLock
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати