Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват int 09h прерывания 
:(
    Опции темы
nagsd
Дата 11.5.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.5.2009

Репутация: нет
Всего: нет



Проблема с перехватом 9го прерывания. Задача такова: при нажатии определённой клавиши (пусть это будет '`') требуется вывести на экран некоторую строку. Ниже следует один из вариантов резидента (вываливается с ошибкой, да :():
Код

CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
start:
    jmp init
    
    old_int_09h dd ?
    string db "42", '$'    

new_int_09h proc
    pushf
    call dword ptr cs:old_int_09h
    push ds
    push ax
    push bx
    
    mov ah, 01h
    int 16h
    cmp al, '`'
    
    jne fin
    
    push cs
    pop ds
    
    lea dx, string
    mov ah, 9h
    int 21h
    
fin:
    pop bx
    pop ax
    pop ds
    
    iret
     
new_int_09h endp
    
init:
    cli
    mov ax, 3509h
    int 21h
        
    mov word ptr old_int_09h, bx
    mov word ptr old_int_09h+2, es
    mov ax, 2509h
    mov dx, offset new_int_09h
    int 21h
    sti
    
    mov dx, offset init
    int 27h
    
CSEG ends    
end start


Пытался также проводить чтение напрямую с буфера клавиатуры (а не через 16е прерывание) - тоже не вышло. Собственно, помогите, пожалуйста, разобраться, в чём соль smile

Это сообщение отредактировал(а) nagsd - 11.5.2009, 17:37
PM MAIL   Вверх
Akina
Дата 11.5.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 453



Не используй в процедуре обработки прерывания ДОС - только прерывания БИОС.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
nagsd
Дата 12.5.2009, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.5.2009

Репутация: нет
Всего: нет



Ну, тащемта прерываниями биоса вывод-то можно организовать. Или даже без вовсе прерываний: записать строку посимвольно прямо в буфер клавиатуры. Но почему нельзя использовать int 21h?

Это сообщение отредактировал(а) nagsd - 12.5.2009, 03:45
PM MAIL   Вверх
sa1o
Дата 28.6.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



зачем такие сложности?
Код

;.386    
.model tiny

.data

str1    db    13,10,'You have pressed the correct button, dude',13,10,'$'
str2    db    13,10,"don't bullshit me! Try again: $"
str3    db    "press the button plz: $",13,10
.code
org 100h
Begin:


main PROC

    mov ah,9
    mov dx,OFFSET str3
    int 21h
beg:
    mov ah, 10h
    int 16h
    cmp al, '`'

    je true
    jmp false
    
    true:
        mov ah,9
        mov dx,OFFSET str1
        int 21h
        jmp endd
    false:
        mov ah,9
        mov dx,OFFSET str2
        int 21h
        jmp beg
endd:
ret
main ENDP
 
end Begin

PM MAIL   Вверх
airyashov
Дата 30.6.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(sa1o @ 28.6.2009,  13:51)
зачем такие сложности?

вопрос по другому нужно ставить "зачем резиденты?"

по теме, прерывание не используете читайте порт 60h.


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1100 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.