Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2010, 13:48   #1
Nuander
 
Регистрация: 24.04.2010
Сообщений: 4
По умолчанию перехват прерывания прямым доступом и 09h

Собственно, по заданию нужно, чтобы при каждом нажатии,допустим Enter?на экран выводилось кол-во нажатий,т.е. нажал один раз-вывелось 1,нажал 2ой раз-2,и тд до 9. Немного не понятно с прерыванием,а именно, как вернуться к старому прерыванию и как использовать проверку cmp i,9 в процедуре. Вот код, только сильно не бейте ><
Код:
.model small
.stack 100h
.data
old dd ?
i db ?
.code
main:
mov i,0
        push es
        xor ax,ax
        mov es,ax
cli
        mov ax,word ptr es:[09h*4]
        mov word ptr old,ax
        mov ax,word ptr es:[09h*4+2]
        mov word ptr old+2,ax
        mov ax,cs ;20
        mov word ptr es:[09h*4+2],ax
        mov ax,offset hand
        mov word ptr es:[09h*4],ax;20
sti

hand proc
cmp i,9
jz exit
pushf
push ax bx cx dx di si ds es
mov ax,0b800h
mov es,ax
mov di,0010;40
mov cx,1
m1:
mov ax,es:[di]
mov al,[i]
add al,'0'
mov ah,00100001b
mov es:[di],ax
inc i
loop m1
popf
pop es ds si di dx cx bx ax
jmp dword ptr cs:[old]
hand endp

exit:
mov ax,4ch
int 21h
end main
Nuander вне форума Ответить с цитированием
Старый 24.04.2010, 18:58   #2
Nuander
 
Регистрация: 24.04.2010
Сообщений: 4
По умолчанию

Прогу немного переделал, но теперь при нажатии клавиши, идёт не 1-2-3-4-..., а 0-2-4-6-... как это исправить?
Код:
stek segment STACK
db 256 dup(?)
stek ends
code segment
assume cs:code,ds:code,ss:stek

start:
jmp init
old dw 0,0
i db ?

hand proc
pushf
push cx
push di
push es
push ax
push ds
mov ax,cs
mov ds,ax
mov ax,0b800h
mov es,ax 
mov di,0010 
mov cx,1
lap1:
mov ax,es:[di]
mov al,[i]
add al,30h
mov ah,01000010b
mov es:[di],ax ; 'novyi adres v Video Pamyati'
loop lap1 ;30 
inc i
pop ds
pop ax
pop es
pop di
pop cx
popf
jmp dword ptr cs:[old]
hand endp

init:
mov ax,code
mov ds,ax
mov ax,0h
mov es,ax 
mov i,0

cli 
mov bx,es:[09h*4]
mov word ptr cs:old,bx 
mov bx,es:[09h*4+2]
mov word ptr cs:[old+2],bx

mov ax,offset hand
mov es:[09h*4],ax
mov es:[09h*4+2h],cs
sti 

key:
mov ah,2h
int 16h
cmp i,11
jnz key

ex:
mov ax, word ptr cs:[old] 
mov es:[09h*4],ax
mov ax, word ptr cs:[old+2]
mov es:[09h*4+2],ax
mov ax,4ch
int 21h
code ends
end start
Nuander вне форума Ответить с цитированием
Старый 24.04.2010, 23:05   #3
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

прерывание вызывается при нажатии и отпускании клавиши
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 25.04.2010, 10:29   #4
Nuander
 
Регистрация: 24.04.2010
Сообщений: 4
По умолчанию

Спасибо, но это я понял А вот как сделать, что бы считалось не за два вызова, а за одно?
Nuander вне форума Ответить с цитированием
Старый 25.04.2010, 12:24   #5
Nuander
 
Регистрация: 24.04.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от airyashov Посмотреть сообщение
прерывание вызывается при нажатии и отпускании клавиши
Точно я не так задание посмотрел, так что спасибки
Nuander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блокировка клавиши. Перехват 09h. Порты. Anrih Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 18.09.2009 23:12