Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 100h
- .data
- old_int_offset dw ?
- old_int_seg dw ?
- text1 db "Lorem ipsum dolor sit amet,",'$'
- text2 db "consectetur adipiscing elit",'$'
- text3 db "Suspendisse vel est a purus",'$'
- text4 db "pretium dictum sagittis nisi",'$'
- text5 db "Nullam non neque quam. Duis ",'$'
- text6 db "faucibus est et leo bibendum,",'$'
- text7 db "quis feugiat tellus eleifend",'$'
- endl db 13,10,'$'
- exit dw 0
- min_x db -30
- max_x db 100
- ;x_pos db 50
- x_pos db 160
- y_pos db 9
- .code
- input_int proc far
- ; можно и pusha
- push ax
- push bx
- push cx
- push dx
- push si
- push di
- push bp
- pushf
- ; очистка экрана
- mov ah, 06h
- mov al, 00h
- mov bh, 00001111b
- mov cx, 0000h
- mov dx, 184fh
- int 10h
- ; двигаю курсор
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text1
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 1
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text2
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 2
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text3
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 3
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text4
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 4
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text5
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 5
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text6
- int 21h
- mov ah, 02h
- mov bh, 00h
- mov dl, x_pos
- mov dh, y_pos
- add dh, 6
- int 10h
- ; печатаю
- mov ah, 09h
- mov dx, offset text7
- int 21h
- mov ah, 1 ; Проверка на то, что какая-то кнопка нажата
- int 16h
- jz _skip_int ; ничего не нажато
- mov ah, 0 ; Если что-то нажато, то надо узнать что
- int 16h
- cmp al, '1'
- jl _key_not_in_1_9
- cmp al, '9'
- jg _key_not_in_1_9
- mov cl, x_pos
- sub cl, al
- add cl, '0'
- mov x_pos, cl
- _key_not_in_1_9:
- cmp al, '0' ; выход
- jnz _no_key
- mov ax, 1
- mov exit, ax
- _no_key:
- _skip_int:
- ; можно и popa
- popf
- pop bp
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- iret
- input_int endp
- start:
- mov ax, @data
- mov ds, ax
- jumps ; нужно для нальних прыжков
- ; получим адреса прерываний, которые были ещё до нас
- mov ah, 35h ; получить вектор прерывания
- mov al, 1Ch ; прерывание таймера
- int 21h
- ; в bx записался сдвиг старого прерывания
- ; в ex записался сегмерт старого прерывания
- ; их надо запомнить, чтобы потом вернуть всё на место
- mov old_int_offset, bx
- mov old_int_seg , es
- ; теперь можем написать что-то своё заместо прошлого прерывания
- ; пусть функция input_int будет нашим прерыванием
- push ds ; будем трогать ds так что надо положить его в стек, чтобы не потерять
- mov dx, offset input_int
- mov ax, seg input_int
- mov ds, ax ; можно поменять только через ax
- mov ah, 25h ; поменятьменять вектор прерывания
- mov al, 1Ch ; наше прерывание таймера
- int 21h
- mov ah, 01h
- mov cx, 2607h
- int 10h
- pop ds
- _loop:
- mov ax, exit
- cmp ax, 1
- je _end
- jmp _loop
- _end:
- ; надо вернуть всё как было
- mov dx, old_int_offset
- mov ax, old_int_seg
- mov ds, ax ; можно поменять только через ax
- mov ah, 25h ; поменятьменять вектор прерывания
- mov al, 1Ch ; наше прерывание таймера
- int 21h
- nojumps ; нужно для нальних прыжков
- mov ax, 4c00h
- int 21h
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement