Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 10.01.2018
Сообщений: 50
1
FASM

Резидентный обработчик 21h прерывания (из 10-й главы Калашникова)

12.07.2018, 19:54. Показов 2697. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется вот такой код резидентного обработчика прерываний, написанный предположительно на MASM
данная программа должна после выполнения оставить часть себя в оперативной памяти подписать ее на прерывание 21h

я изучаю ассемблер с компилятором FASM
и не совсем могу понять реализацию данного примера
по этому прошу помочь мне перевести этот код с MASM на FASM

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
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
jmp Init
Int_21h_proc proc
cmp ah,9
je Ok_09
jmp dword ptr cs:[Int_21h_vect]
Ok_09:
push ds
push dx
push cs
pop ds
mov dx,offset My_string
pushf
call dword ptr cs:[Int_21h_vect]
pop dx
pop ds
iret
Int_21h_vect dd ?
My_string db 'Моя строка!$'
int_21h_proc endp
Init:
mov ah,35h
mov al,21h
int 21h
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
mov ax,2521h
mov dx,offset Int_21h_proc
int 21h
mov dx,offset Init
int 27h
CSEG ends
end Start
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2018, 19:54
Ответы с готовыми решениями:

Резидентный обработчик прерывания 21h (по книге Калашникова)
Всем добрый день. Изучаю ассемблер по книге Калашникова . Программа перехватывает 21-ое...

Обработчик прерывания int 21h (по книге Калашникова)
Доброе время суток, я чтиаю книгу Калашникова-Ассемблер и уже втрой день не могу понять почему...

Почему при вызове функции 4ch прерывания 21h резидентный обработчик падает?
Написал резидентную программу, всё работает, но если моя или другие программы вызывают функцию 4ch...

Резидентный обработчик прерывания
Всем привет, ищу помощи в написании такой-вот программы: Разработать резидентный обработчик...

4
Asm/C++/Delphi/Py/PHP/VBA
6747 / 1993 / 231
Регистрация: 14.12.2014
Сообщений: 4,186
Записей в блоге: 12
12.07.2018, 21:54 2
Код написан неверно.
Нельзя вызывать int 21h и затем iret.
Удаляйте pushf + call и вместо iret ставьте jmp dword ptr cs:[Int_21h_vect]
Потому что int 21h возвращает флаги (CF обычно), а делая просто iret вы эти флаги рушите.

Добавлено через 3 минуты
У вас многие программы будут глючить после этого. Не смогут читать или записывать файлы, например. Или наоборот якобы делать то, что нельзя. И т.д.
2
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
13.07.2018, 09:22 3
Цитата Сообщение от Jin X Посмотреть сообщение
Код написан неверно.
Нельзя вызывать int 21h и затем iret.
Там только для 9-й функции вызывается int 21 и затем iret
Цитата Сообщение от amakeev Посмотреть сообщение
cmp ah,9
je Ok_09
Так-что вполне приемлемо
3
Asm/C++/Delphi/Py/PHP/VBA
6747 / 1993 / 231
Регистрация: 14.12.2014
Сообщений: 4,186
Записей в блоге: 12
13.07.2018, 12:38 4
Ethereal, точно, проглядел!
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
13.07.2018, 14:14 5
Лучший ответ Сообщение было отмечено amakeev как решение

Решение

Jin X, Ethereal, Это код из 10-й главы Калашникова.

amakeev, Вы уже проходите 10-ую главу книги Калашникова, без MASM, можно было бы и выучить различие синтаксиса FASM.
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
org 100h
;Start:
        jmp Init
Int_21h_proc:; proc
        cmp ah,9
        je Ok_09
        jmp dword [cs:Int_21h_vect]
Ok_09:
        push ds
        push dx
        push cs
        pop ds
        mov dx, My_string
        pushf
        call dword[cs:Int_21h_vect]
        pop dx
        pop ds
        iret
Int_21h_vect dd ?
My_string db 'hello, hello$'
Init:
        mov ah,35h
        mov al,21h
        int 21h
        mov word[Int_21h_vect],bx
        mov  word[Int_21h_vect+2],es
        mov ax,2521h
        mov dx,Int_21h_proc
        int 21h
        mov dx,Init
        int 27h
и контрольный пример:
Assembler
1
2
3
4
5
6
org 100h
mov ah,9
mov dx,dbStr
int 21h
ret
dbStr db        10,13,'Hi,cyberforum$'
На рисунке видно, запускаем контрольный пример, резидент и снова контрольку.
Изображения
 
3
13.07.2018, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2018, 14:14
Помогаю со студенческими работами здесь

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

Резидентный обработчик прерывания, который реализует вывод цветного символа
Может кто-нибудь помочь бесплатно найти или решить эту задачу? Заранее спасибо за помощь!...

Резидентный обработчик прерывания: вывод на экран сообщение и ожидание подтверждения его получения
Всем привет, ищу помощи в написании такой-вот программы: Разработать резидентный обработчик...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru