Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Как переключать работу кусков кода с клавиатуры?


Автор: VictorBondarenko 18.3.2008, 14:58
Уважаемые друзья!

Я работаю в досе в незащищенном режиме.
Модель памяти беру
 .model tiny
Моя прога считывает код по адресу 1000h:100h
и другой кусок кода по адресу 1500h:100h
Эти коды никак не связаны.

Мне надо чтобы я нажал клавишу "а"  и заработал первый кусок кода,
а затем нажал "в" и первый остановился и заработал второй кусок кода. 
Снова нажал "а"  и заработал первый кусок кода, а второй остановился и 
так пока не надоест.

Мне AndNot толково посоветовал, как запустить кусок кода и это работает
с помощью retf .  Но для необходимого чередования выполнения кода 
нужны какие-то прерывания от клавы. Может  Int 16h ?

   Может кто-то подскажет хотя бы идею основанную только на функциях БИОСА, 
а лучше кусок кода с использованием функций БИОСА.
             
                    С уважением и благодарностью за внимание,
                Виктор      

Автор: Severyanin 19.3.2008, 10:18
попробуй оформить эти куски кода в подпрограммы и вызывать их по нажатию клавиш, т е в основной проге опрашивать клавиатуру

Автор: MAKCim 19.3.2008, 11:40
VictorBondarenko, 
перехватываешь обработчик прерывания от клавиатуры, подменяешь адрес возврата в стеке и передаешь управление оригинальному обработчику
перехватить можно так
Код

change_ivt_entry:
; в BX - номер вектора IVT, в ES:DI - адрес кода перехватчика
; возврат в ES:DI адрес оригинального обработчика
    push eax
    xor ax, ax
    push ds
    mov ds, ax
    shl bx, 2
    mov ax, es
    shl eax, 16
    mov ax, di
    xchg dword [bx], eax
    mov di, ax
    shr eax, 16
    mov es, ax
    pop ds
    pop eax
    ret

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)