Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Косtян
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 29
1

Разработать программу, которая не реагирует на нажатия клавиш Ctrl+Break и Ctrl+C

18.01.2014, 14:56. Просмотров 1275. Ответов 10
Метки нет (Все метки)

И мне помогите пожалуйста)) На входном языке Assembler разработать программу, которая не реагирует на нажатия клавиш Ctrl+Break и Ctrl+C. Выход из программы по нажатию клавиши Esc, при разработке использовать перехват прерываний клавиатуры и порты ввода-вывода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2014, 14:56
Ответы с готовыми решениями:

Отловить сочетание клавиш Ctrl+shift
Нужен код который выводит в командной строке сообщение, что были нажаты клавиши Ctrl+shift. При...

Перехват Ctrl-C и Ctrl-Break
Нужна помощь с решением задачи, суть такова, что это должна быть консольная программа, которая бы...

ReadKey() не реагирует на нажатия Alt,Ctrl,Shift
Не реагирует на нажатия Alt,Ctrl,Shift . ConsoleKeyInfo press; ...

Как перевести сочетание клавиш ctrl+v на, например ctrl+z?
Собственно проблема заключается вот в чем: у меня на ноутбуке отказали клавиши (пробел:gcray2: ,я,...

Автоматизация нажатия клавиш Ctrl+Shift+F9
Проблема состоит в автоматизации нажатия клавиш Ctrl+A затем Ctrl+Shift+F9 для нескольких...

10
Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
18.01.2014, 15:13 2
Косtян, для перехвата прерывания необходимо грузить векторы прерывания (по крайней мере в PM) PS\2 клавиатура имеет по умолчанию порт 60H. Нажатие клавиши генерирует скан-код который можно считать с данного порта для проведения операций.
1
Косtян
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 29
18.01.2014, 15:38  [ТС] 3
Цитата Сообщение от mashuly Посмотреть сообщение
Косtян, для перехвата прерывания необходимо грузить векторы прерывания (по крайней мере в PM) PS\2 клавиатура имеет по умолчанию порт 60H. Нажатие клавиши генерирует скан-код который можно считать с данного порта для проведения операций.
Можно примерный код?)
0
Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
18.01.2014, 15:40 4
Цитата Сообщение от Косtян Посмотреть сообщение
Можно примерный код?)
Примерный код чтения скан-кода с клавиатуры или целую систему с IRQ?
0
18.01.2014, 15:40
Косtян
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 29
18.01.2014, 15:41  [ТС] 5
мне бы код программы в общем, потому что в ассемблере я не силен(
0
Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
18.01.2014, 15:46 6
Косtян, вот тут есть немного Перекрыть обработчик клавиатуры
Еще советую порыться в книгах Руслана Аблязова, у него исходники более грамотно оформлены.
1
Косtян
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 29
18.01.2014, 15:48  [ТС] 7
спасибо, я посмотрю)
0
Charles Kludge
Клюг
7648 / 3163 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
18.01.2014, 17:19 8
Косtян, вот, слепил маленький прикольчик на ФАСМе:
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;сохранять в 866 кодовой стр.
               org  100h
start:         jmp  main
 
_int1C:         pushf
        inc byte ptr cs:flag
        cmp byte ptr cs:flag,9  ; got 0.5 sec. signal?
        jz  @@1         ; yes, processing
@@0:        popf
        jmp dword ptr cs:old_int1C      ; go back
@@1:        mov byte ptr cs:flag, 0
        push    ax
        push    bx
@@:     mov bx,[cs:idx]
        mov al, byte ptr cs:symb+bx
        or  al,al
        jnz @F
        mov word ptr cs:idx, 0
        jmp @B
@@:     inc bx
        mov word ptr cs:idx, bx
        int 29h
        pop bx
        pop ax
        jmp     @@0
old_int1C:  dd  ?
flag:       db  0
idx:        dw  0
symb:       db  'В чащах юга жил-был цитрус.Да, но фальшивый экземпляр!',0Ah, 0Dh,0
_int15:     
        pushf
        cmp ah,4Fh
        jz  _keyb
gtfo:       call    far [cs:old_int15]      ; go back
        iret
_keyb:      
        cmp al, 1
        stc
        jz  gtfo
        push    bx
        aam 10h
        xchg    ah,al
        mov bl,ah
        call    cvt
        mov al, bl
        call    cvt
        mov al,20h
        int 29h
        pop bx
        popf
        clc
        retf    2
cvt:    
        add al, 90h ; AL is from 90h to 09Fh.
        daa     ; AL is from 90h to 99h (carry clear) or 00h to 06h (carry set).
        adc al, 40h ; AL is from 0D0h to 0D9h or 41h to 46h.
        daa     ; AL is from 30h to 39h ("0" to "9") or 41h to 46h ("A" to "F").
        int 29h
        ret
old_int15:  dd  ?
 
main:
        push    cs
        push    cs
        pop ds
        pop es
                mov     ax, 351Ch                                     ; получить в ES:BX адрес прерывания 1Ch
            int     21h
            mov     word ptr cs:old_int1C, bx     ; запомним старый адрес 1Ch
            mov     word ptr cs:old_int1C+2, es    ; прерывания
                mov     ax, 251Ch                                             ; установим вектор на 1Ch
            mov     dx, _int1C        ; прерывание
            int     21h
                mov     ax, 3515h                                     ; получить в ES:BX адрес прерывания 1Ch
            int     21h
            mov     [cs:old_int15], bx     ; запомним старый адрес 
            mov     [cs:old_int15+2], es    ; прерывания
                mov     ax, 2515h                                             ; установим вектор на 15h
            mov     dx, _int15        ; прерывание
            int     21h
        xor ax, ax
        int 16h
remove: 
            mov dx, word ptr cs:old_int1C     ; возвращаем вектор прерывания
            mov ds, word ptr cs:old_int1C+2    ; на место
            mov ax, 251Ch
                int 21h
            mov dx, [cs:old_int15]     ; возвращаем вектор прерывания
            mov ds, [cs:old_int15+2]    ; на место
            mov ax, 2515h
                int 21h
exit:                                   ; выход
            int 20h

Не по теме:

И да, объясните своему преподу, что использование перехвата int 9 и работы с контроллером прерываний по портам во времена виртуальных машин попахивает быдлокодерством.

1
Taatshi
20.01.2014, 21:09
  #9
 Комментарий администратора 
Косtян, одна тема - один вопрос. Создавайте для своих вопросов новые темы.
0
Мотороллер
24.01.2014, 21:07
  #10

Не по теме:

mashuly, еще бы ОСь предложила написать челу :D

0
Ethereal
7283 / 2132 / 290
Регистрация: 17.02.2013
Сообщений: 3,134
25.01.2014, 03:32 11
Начните любую DOS-овскую программу с заклинания
Assembler
1
2
3
4
5
6
7
8
9
    push    ds
    push    cs
    pop ds
    call    metka
    iret
metka:  pop dx
    mov ax, 2523h
    int 21h
    pop ds
и она перестанет завершаться при нажатии Ctrl-Break или Ctrl-C.
Впрочем, это не вполне соответствует заданию, данному ТС.
0
25.01.2014, 03:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 03:32

После нажатия клавиш Ctrl + V приложение зависает несколько секунд
У меня такая проблема. Иногда, когда я делаю ctrl-с ctrl-v, после нажатия на ctrl-v приложение...

Как отловить нажатие ctrl+v ctrl+c ctrl+x key_Press
Как правильно отловить нажатие ctrl+v ctrl+c ctrl+x в событии key_Press? я пробую так: private...

JTextPane, функции Ctrl+A, Ctrl+C, Ctrl+X перенести на кнопку
Класс JTextPane поддерживает нажатие клавиш таких как Ctrl+A, Ctrl+C, Ctrl+X и т. д. Вопрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru