Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Заблокирован

обработчик прерываний

10.05.2012, 09:30. Показов 2124. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скопировал обработчик прерывания с Калашникова, а он не работает. В чом проблема??? (работаю в выне)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2012, 09:30
Ответы с готовыми решениями:

Обработчик прерываний
Необходимо сделать так, чтобы каждое второе нажатие игнорировалось. Почему то этого не происходит. Помогите кто может, очень срочно надо ...

обработчик прерываний
вообщем создал код обработчика прерываний,который должен менять последнюю строку 10-ю разными цветами.откомпилировал и етц.при открытии...

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

14
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.05.2012, 10:33
Искандар, а что там? Я Калашникова только в армии изучал...
0
Заблокирован
10.05.2012, 10:41  [ТС]
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Я Калашникова только в армии изучал...
юморист однако

не обращай внимания на коменты, я ее с другой темы копировал
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
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
 
Start:
    ;переходим на метку инициализации. Нужно будет перехватить прерывание 21h,
    ;а также оставить прогу резидентной в памяти
    
    ;jz (jump if zero) и je (jump if equal) идентичны, выполняются если флаг нуля установлен на 1 
    ;(если предыдущая команда сравнения была верной)
    Int_21h_proc proc
        cmp ah,9; проверяем, это функция 09h?
        je Ok_09
    
        jmp dword ptr cs:[Int_21h_vect];??????????????????????
        
        Ok_09:  
        ;сохраним ренистры
        push ds
        push dx
        push cs; Адрес строки должен быть в ds:dx
        
        pop cs;;;;почему сразу же выталкиваем cs??? 
        
        ;выводим нашу строку вместо той, которую должна была вывести программа, вызывающая 21-е прерывание
        mov dx, offset My_string
        pushf;????????????????????????????????
        call dword ptr cs:[Int_21h_vect];??????????????????????
        
        ;восстанавливаем исспользуемые регистры
        pop dx
        pop ds
        iret; продолжим работу (выйдем из прерывания)
        ;программа, выводязая строку считает, что на экран было выведено её сообщение, но на самом деле это не так
        
        ;переменная для хранения оригинального адреса обработчика 21h
        Int_21h_vect dd ? ;??????????????????что значит знако вопроса
        My_string db 'моя строка$'
    Int_21h_proc endp
    
    ; со следующей метки нашей прогаммы уже не будет в памяти.
    ;она затрётся после вызоыва прерывания 27h
    Init:
    ;установим наш обработчик (его адрес) на прерывание 21h. Это позволяет сделать функция
    ;35h прерывания 21h
    mov ah, 35h
    ;al указывает ветор прерывания, адрес которого нужно получить
    mov al,21h
    int 21h
    
    ;??????????????????
    ;теперь es:bx адрес (вектор) прерывания 21h (es - сегмент, bx - смещение)
    
    ;??????форма записи?????????????????????????
    
    ;почему не необорот?????????????????????????????????????????????????????????????
    mov word ptr Int_21h_vect, bx
    mov word ptr Int_21h_vect+2, bx
    ;адрес сохранили, теперь вызываем прерывание:
    mov ax, 2521h
    ;???????????????????????????????????????????????
    ;;.что тут делаем? почему просто нельзя было написать call Int_21h_proc???
    mov dx, offset Int_21h_proc
    int 21h;???????????????????????зачем?
    
    ;остаётся завершить программу, оставив её резидентной в памяти
    mov dx,offset Init;зачем? почему просто нельзя вызвать int 27h???
    
    int 27h
        
        
CSEG ends
end Start
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
10.05.2012, 10:58
Искандар, смотри. У тебя после точки входа идет обработчик прерывания, а он так или иначе уходит на Iret, который переходит на Int 20h по нулевому адресу и кончается программа. Советую тебе по другому:
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
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
 
Start:
[B]jmp Init[/B] ;В этом вся соль. Обходим обработчик, в котором Ret. Ret при незабитом программой стеком - конец программы.
    ;переходим на метку инициализации. Нужно будет перехватить прерывание 21h,
    ;а также оставить прогу резидентной в памяти
    
    ;jz (jump if zero) и je (jump if equal) идентичны, выполняются если флаг нуля установлен на 1 
    ;(если предыдущая команда сравнения была верной)
    Int_21h_proc proc
        cmp ah,9; проверяем, это функция 09h?
        je Ok_09
    
        jmp dword ptr cs:[Int_21h_vect];??????????????????????
        
        Ok_09:  
        ;сохраним ренистры
        push ds
        push dx
        push cs; Адрес строки должен быть в ds:dx
        
        pop cs;;;;почему сразу же выталкиваем cs??? 
        
        ;выводим нашу строку вместо той, которую должна была вывести программа, вызывающая 21-е прерывание
        mov dx, offset My_string
        pushf;????????????????????????????????
        call dword ptr cs:[Int_21h_vect];??????????????????????
        
        ;восстанавливаем исспользуемые регистры
        pop dx
        pop ds
        iret; продолжим работу (выйдем из прерывания)
        ;программа, выводязая строку считает, что на экран было выведено её сообщение, но на самом деле это не так
        
        ;переменная для хранения оригинального адреса обработчика 21h
        Int_21h_vect dd ? ;??????????????????что значит знако вопроса
        My_string db 'моя строка$'
    Int_21h_proc endp
    
    ; со следующей метки нашей прогаммы уже не будет в памяти.
    ;она затрётся после вызоыва прерывания 27h
    Init:
    ;установим наш обработчик (его адрес) на прерывание 21h. Это позволяет сделать функция
    ;35h прерывания 21h
    mov ah, 35h
    ;al указывает ветор прерывания, адрес которого нужно получить
    mov al,21h
    int 21h
    
    ;??????????????????
    ;теперь es:bx адрес (вектор) прерывания 21h (es - сегмент, bx - смещение)
    
    ;??????форма записи?????????????????????????
    
    ;почему не необорот?????????????????????????????????????????????????????????????
    mov word ptr Int_21h_vect, bx
    mov word ptr Int_21h_vect+2, bx
    ;адрес сохранили, теперь вызываем прерывание:
    mov ax, 2521h
    ;???????????????????????????????????????????????
    ;;.что тут делаем? почему просто нельзя было написать call Int_21h_proc???
    mov dx, offset Int_21h_proc
    int 21h;???????????????????????зачем?
    
    ;остаётся завершить программу, оставив её резидентной в памяти
    mov dx,offset Init;зачем? почему просто нельзя вызвать int 27h???
    
    int 27h
        
        
CSEG ends
end Start
0
Заблокирован
10.05.2012, 11:08  [ТС]
Цитата Сообщение от programmisto Посмотреть сообщение
У тебя
это у калашникова

Добавлено через 9 минут
programmisto, не фига, все равно оригинальный идет... мож досбокс поставить?
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
10.05.2012, 11:09
Цитата Сообщение от Искандар Посмотреть сообщение
это у калашникова
Все равно у кого, но код глючный. Я сказал, что испрасить, ТС пусть исправит. Если ему надо
0
Заблокирован
10.05.2012, 11:10  [ТС]
programmisto, ну дык я исправил, а работает оригинальный
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.05.2012, 11:15
Искандар, стр. 57,58 в первом тексте.
0
Заблокирован
10.05.2012, 11:15  [ТС]
Charles Kludge, а что там?
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
10.05.2012, 11:19
Assembler
1
2
mov word ptr Int_21h_vect, bx 
mov word ptr Int_21h_vect+2, bx
Искандар, что, не видишь, что сохраняешь только смещение, только его дублируешь. Надо по другому:


Assembler
1
2
mov word ptr Int_21h_vect, es 
mov word ptr Int_21h_vect+2, bx
P.S. Кто-нибудь знает, можно читать напрямую сегментный регистр в память или нет?
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.05.2012, 11:20
ВотЪ:
Цитата Сообщение от Искандар Посмотреть сообщение
;теперь es:bx адрес (вектор) прерывания 21h (es - сегмент, bx - смещение)
;??????форма записи?????????????????????????
;почему не необорот???????????????????????????????? ?????????????????????????????
mov word ptr Int_21h_vect, bx
mov word ptr Int_21h_vect+2, bx
0
Заблокирован
10.05.2012, 11:21  [ТС]
не работает этотобработчик...
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
10.05.2012, 11:29
mov word ptr Int_21h_vect+2, es ; наверное, не?
0
Заблокирован
10.05.2012, 11:30  [ТС]
я сделал так, но он не работает все равно. написал прогу
Assembler
1
2
3
4
5
6
7
8
9
10
11
code segment
    assume cs:code, ds:code, ss:code
org 100h
start:
    mov dx, offset mmm
    mov ah, 9
    int 21h
    int 20h
mmm db 'my stridfgdshgdhdhghdhng$'
code ends
end start
а она выводит строку нормально
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
10.05.2012, 11:31
Цитата Сообщение от Charles Kludge Посмотреть сообщение
mov word ptr Int_21h_vect+2, es
Почему? Или что, в буфере, где находится адрес для Jmp эта команда вначале берет смещение, а затем сегмент? Или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2012, 11:31
Помогаю со студенческими работами здесь

Обработчик прерываний таймера
Нужно сделать обработчик прерываний таймера, который после установки каждые 10 секунд будет подавать звуковой сигнал и заставлять моргать...

Написать обработчик прерываний.
Здраствуйте, меня интересует как написать свой обработчик прерываний? может где нить есть туториал нормальные?

обработчик прерываний. циклическая замена пробела
имеется обработчик int 9hно он не работает точнее он работает, но не так как надо. прога должна заменять пробел на цифры от 0 до 9...

Дизассемблировать Обработчик прерываний Bios для клавиатуры
В университете задали задание вытащить программу базового обработчика прерываний BIOS для клавиатуры(09H) Сказали использовать пакет...

Написать резидентную программу, которая оставляет в памяти только пользовательский обработчик прерываний
Здраствуйте, помогите мне плиз) Задача такая: написать резидентную программу, которая оставляет в памяти только мной созданный обработчик...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru