Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переписать 1-ую функцию 21-го прерывания 
:(
    Опции темы
user2
Дата 26.5.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем, у меня задание - переписать 1-ую функцию 21-го прерывания. После первого запуска этого com-овского файла инсталлируем наш обработчик  и оставляем резидентно в памяти. Затем, запускаем какое-либо тестовое приложение для демонстрации работы программы(например, ввести символ). Ну а потом, после 2-го запуска com-овского файла наш обработчик деинсталлируется . 
Дело в том, что в обработчике идет работа через int16h, а мне преподаватель сказал работать непосредственно через буфер клавиатуры(как я понял, берем то, что лежит в голове буфера(а там лежит 2 байта), и младший байт(ASCI-КОД) заносим в AL. После этого сдвигаем голову на 2 байта. Но как все это делается через буфер, принцип работы я не понимаю, если кто поможет переделать, буду признателен.
Это тот самый com-файл:
Код

prg segment para public 'code'
assume cs:prg,ss:prg,es:prg,ds:prg
org 100h
start: jmp go

old_int21_ofset dw ?
old_int21_segm    dw ?
install_data    dw 01234h  ; 

my_int21 proc far
    cli
    pushf
    
    cmp ah, 01h    ; Проверяем была ли вызвана первая функция
    jne old        ; Если нет, то перходим к стандартному обработчику
    
        ; Если это первая функция
        mov ah, 00h
        int 16h        ;именно в этом месте,как я понимаю, как-то должна идти работа с буфером клавиатуры вместо int16h
        popf
        sti
        IRET
            
    old: ; Стандартный обработчик
        pushf    
        call dword ptr cs:[old_int21_ofset]
        
        popf
        sti
        IRET
my_int21 endp

resident_ending:
    
text_installed        db 'Resident have installed'    ,13,10,'$'
text_uninstalled    db 'Resident have UNinstalled'    ,13,10,'$'

go:
    mov ah, 35h
    mov al, 21h
    int 21h

    cmp word ptr es:[bx-2], 01234h   ; если тут лежит 01234h, то инсталлируем, если 56789-деинсталлируем
    je is_installed
    
; Unistale
    mov ah,9h
    lea dx,text_installed
    int 21h

    mov cs:old_int21_segm  , es
    mov cs:old_int21_ofset , bx

    mov ah, 25h
    mov al, 21h
    lea dx,cs:[my_int21]
    int 21h
        mov install_data,56789h    ;
    jmp finish

is_installed:
    mov ah,9h
    lea dx,text_uninstalled
    int 21h

    cli
    mov ah, 25h
    mov al, 21h
    mov dx, word ptr es:[bx-6]
    mov ds, word ptr es:[bx-4]
    int 21h
    sti

finish:
    lea dx, resident_ending
    int 27h
ret
prg ends
end start




А этот файл  просто для тестирования  обработчика
Код

prg segment para public 'code'
assume cs:prg,ss:prg,es:prg,ds:prg
org 100h
start: jmp go
    
text1    db 'Please, enter your character'    ,13,10,'$'
text2    db 10, 13, 'Your character is:'        ,13,10,'$'

go:
mov ah, 09h
lea dx, text1
int 21h

xor ax, ax
mov ah, 01h
int 21h
push ax

mov ah, 09h
lea dx, text2
int 21h

pop ax
mov ah, 02h
mov dl, al
int 21h
ret
prg ends
end start

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

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

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


 




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


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

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