Vous êtes sur la page 1sur 13

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERIA DE PRODUCCION Y SERVICIOS


ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

Curso: Laboratorio de Arquitectura de Computadoras


Turno: C MARTES 8:40-10:20 horas
Ttulo de la Prctica: Aplicacin de Interrupciones: Teclado, Mouse y Video
Nmero de Informe Final: 4
Apellidos y Nombre:
Quispe Mamani, Anndy 20120459
Tacca Barrantes , Deysi 20091318
Yucra Coaquira, Cristian Henry 20123065

Arequipa 04 de julio del 2017

1
ndice

A. Escribir un programa que dibuje una diagonal en la pantalla..3


B. Escribir un programa que imprima x en la pantalla hasta que se presiones esc..4
C. Interrupcin de mouse.6

2
Aplicacin de Interrupciones: Teclado,
Mouse y Video

A. ESCRIBIR UN PROGRAMA QUE DIBUJE UNA DIAGONAL EN LA


PANTALLA

DIAGONAL EN LA PANTALLA.asm

org 100h

mov cx,1
mov al, 13h
mov ah, 0
int 10h ; set graphics video mode.
bucle1:
mov dx, cx
mov al, color ;AL = pixel color
mov ah, 0ch ;Change color for a single pixel
int 10h ;set pixel

cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal)


jz fin

inc cx ;DX = row.


add color, 2 ;para cambiar colores
jmp bucle1 ;CX = column
fin:
ret
color db 1

ret

3
Figura 1 Muestra el Cdigo del programa: DIAGONAL EN LA PANTALLA.asm

Figura 2. Muestra el Programa DIAGONAL EN LA PANTALLA.asm corriendo

B. ESCRIBIR UN PROGRAMA QUE IMPRIMA X EN LA PANTALLA


HASTA QUE SE PRESIONES ESC

PROGRAMA QUE IMPRIMA X.asm


name "keybrd"
org 100h
; print a welcome message:
mov dx, offset msg

4
mov ah, 9
int 21h
;============================
; eternal loop to get
; and print keys:
wait_for_key:
; check for keystroke in
; keyboard buffer:
mov dh, pos
mov dl, pos
mov bh, 0
mov ah, 2
int 10h ;Movemos el cursor
mov al,'X'
mov bh,0
mov bl,1
mov cx,1
mov ah,09h
inc pos ;Imprimimos una x
int 10h
mov ah, 1
int 16h
jz wait_for_key
; get keystroke from keyboard:
; (remove from the buffer)
mov ah, 0
int 16h
; print the key:
mov ah, 0eh
int 10h
; press 'esc' to exit:
cmp al, 1bh
jz exit
jmp wait_for_key
;============================
exit:
ret
msg db "Type anything...", 0Dh,0Ah
db "[Enter] - carriage return.", 0Dh,0Ah
db "[Ctrl]+[Enter] - line feed.", 0Dh,0Ah
db "You may hear a beep", 0Dh,0Ah
db " when buffer is overflown.", 0Dh,0Ah
db "Press Esc to exit.", 0Dh,0Ah, "$"
pos db 1
end

5
Figura 1 Muestra el Cdigo del programa :PROGRAMA QUE IMPRIMA X.asm

Figura 4 Muestra el Programa PROGRAMA QUE IMPRIMA X.asm corriendo

C. INTERRUPCION DE MOUSE

INTERRUPCION DE MOUSE.asm

; mouse test

6
name "mouse"

org 100h

print macro x, y, attrib, sdat


LOCAL s_dcl, skip_dcl, s_dcl_end
pusha
mov dx, cs
mov es, dx
mov ah, 13h
mov al, 1
mov bh, 0
mov bl, attrib
mov cx, offset s_dcl_end - offset s_dcl
mov dl, x
mov dh, y
mov bp, offset s_dcl
int 10h
popa
jmp skip_dcl
s_dcl DB sdat
s_dcl_end DB 0
skip_dcl:
endm

clear_screen macro
pusha
mov ax, 0600h
mov bh, 0000_1111b
mov cx, 0
mov dh, 24
mov dl, 79
int 10h
popa
endm

print_space macro num


pusha
mov ah, 9
mov al, ' '
mov bl, 0000_1111b
mov cx, num
int 10h
popa
endm

7
jmp start

curX dw 0
curY dw 0
curB dw 0

start:
mov ax, 1003h ; disable blinking.
mov bx, 0
int 10h

; hide text cursor:


mov ch, 32
mov ah, 1
int 10h

; reset mouse and get its status:


mov ax, 0
int 33h
cmp ax, 0
jne ok
print 1,1,0010_1111b, " mouse not found :-( "
jmp stop

ok:
clear_screen

print 7,7,0010_1011b,;" note: in the emulator you may need to press and hold
mouse buttons "
print 7,8,0010_1011b,;" because mouse interrupts are not processed in real
time. "
print 7,9,0010_1011b,;" for a real test, click external->run from the menu.
"
print 10,11,0010_1111b,;" click/hold both buttons to exit... "

; display mouse cursor:


mov ax, 1
int 33h

check_mouse_buttons:
mov ax, 3
int 33h
cmp bx, 3 ; both buttons
je hide
cmp cx, curX
8
jne print_xy
cmp dx, curY
jne print_xy
cmp bx, curB
jne print_buttons

print_xy:
print 0,0,0000_1111b,"x="
mov ax, cx
call print_ax
print_space 4
print 0,1,0000_1111b,"y="
mov ax, dx
call print_ax
print_space 4
mov curX, cx
mov curY, dx
jmp check_mouse_buttons

print_buttons:
print 0,2,0000_1111b,"btn="
mov ax, bx
call print_ax
print_space 4
mov curB, bx
jmp check_mouse_buttons

hide:
mov ax, 2 ; hide mouse cursor.
int 33h

clear_screen

print 1,1,1010_0000b," hardware must be free! free the mice! "

stop:
; show box-shaped blinking text cursor:
mov ah, 1
mov ch, 0
mov cl, 8
int 10h

print 4,7,0000_1010b," press any key.... "


mov ah, 0
9
int 16h

ret

print_ax proc
cmp ax, 0
jne print_ax_r
push ax
mov al, '0'
mov ah, 0eh
int 10h
pop ax
ret
print_ax_r:
pusha
mov dx, 0
cmp ax, 0
je pn_done
mov bx, 10
div bx
call print_ax_r
mov ax, dx
add al, 30h
mov ah, 0eh
int 10h
jmp pn_done
pn_done:
popa
ret
endp

10
Figura5. Muestra el Cdigo hasta la lnea 41

Figura 6. Muestra el Cdigo desde la lnea 41 a la 81

11
Figura 7. Muestra el Cdigo desde la lnea 81 a la 120

Figura 8. Muestra el Cdigo desde la lnea 124 a la 164

12
Figura 9. Muestra el Cdigo desde la lnea 152 a la 171

Figura 10. Muestra el Programa INTERRUPCION DE MOUSE.asm corriendo.

13

Vous aimerez peut-être aussi