Its just an idea .. please do not copy pasteView more random threads:
- CS301 Assignment 6 Idea Solution 25 July 2010
- CS201_3rd_Assignment
- MGMT623 Assignment
- CS201_5th_Assignment_Fall_2011
- STA301 Statistics and Probability Assignment No.2 Ideal...
- CS619 Final Software Project Real Time Financial Data...
- GSc101 General Science Assignment # 02 Discussion And...
- CS301 – Data Structures Assignment # 3 May 2010
- Assignment No. 3 (Fall 2010) English Comprehension (ENG101)
- Database Management Systems-CS403 Assignment No. 01 ...
Display a tick count on the middle of the screen in which, when the capital A is pressed the timer start when the capital B is pressed the timer stop.
Sponsored Links
Solution:
Code:[org 0x0100] jmp start seconds: dw 0 timerflag: dw 0 oldkb: dd 0 ; subroutine to print a number at center of screen printnum: push bp mov bp, sp push es push ax push bx push cx push dx push di mov ax, 0xb800 mov es, ax ; point es to video base mov ax, [bp+4] ; load number in ax mov bx, 10 ; use base 10 for division mov cx, 0 ; initialize count of digits nextdigit: mov dx, 0 ; zero upper half of dividend div bx ; divide by 10 add dl, 0x30 ; convert digit into ascii value push dx ; save ascii value on stack inc cx ; increment count of values cmp ax, 0 ; is the quotient zero jnz nextdigit ; if no divide it again mov di, 70 ; point di to 35th column nextpos: pop dx ; remove a digit from the stack mov dh, 0x07 ; use normal attribute mov [es:di], dx ; print char on screen add di, 2 ; move to next screen location loop nextpos ; repeat for all digits on stack pop di pop dx pop cx pop bx pop ax pop es pop bp ret 2 ; keyboard interrupt service routine kbisr: push ax in al, 0x60 ; read char from keyboard port cmp al, 0x41 ; has the Capital A pressed jne nextcmp ; no, try next comparison cmp word [cs:timerflag], 1; is the flag already set je exit ; yes, leave the ISR mov word [cs:timerflag], 1; set flag to start printing jmp exit ; leave the ISR nextcmp: cmp al, 0x42 ; has the Capital B pressed jne nomatch ; no, chain to old ISR mov word [cs:timerflag], 0; reset flag to stop printing jmp exit ; leave the interrupt routine nomatch: pop ax jmp far [cs:oldkb] ; call original ISR exit: mov al, 0x20 out 0x20, al ; send EOI to PIC pop ax iret ; return from interrupt ; timer interrupt service routine timer: push ax cmp word [cs:timerflag], 1 ; is the printing flag set jne skipall ; no, leave the ISR inc word [cs:seconds] ; increment tick count push word [cs:seconds] call printnum ; print tick count skipall: mov al, 0x20 out 0x20, al ; send EOI to PIC pop ax iret ; return from interrupt start: xor ax, ax mov es, ax ; point es to IVT base mov ax, [es:9*4] mov [oldkb], ax ; save offset of old routine mov ax, [es:9*4+2] mov [oldkb+2], ax ; save segment of old routine cli ; disable interrupts mov word [es:9*4], kbisr ; store offset at n*4 mov [es:9*4+2], cs ; store segment at n*4+2 mov word [es:8*4], timer ; store offset at n*4 mov [es:8*4+2], cs ; store segment at n*4+ sti ; enable interrupts mov dx, start ; end of resident portion add dx, 15 ; round up to next para mov cl, 4 shr dx, cl ; number of paras mov ax, 0x3100 ; terminate and stay resident int 0x21.
:o:o--------------------------------------------------------------------------------------:o:o
[B]The more knowledge you have, the greater will be your fear of Allah.[/B]
Please Join My [B]Group Vuhelp[/B][B], Birthday Wishing, Daily Hadees[/B] [CODE][B]http://vuhelp.net/groups/vuhelp.html[/B]
[B]http://vuhelp.net/groups/birthday-wishing.html[/B]
[B]http://vuhelp.net/groups/daily-hadees.html[/B][/CODE]
[CENTER][B][COLOR="Red"][SIZE="4"]Email: [email]viki@vuhelp.net[/email][/SIZE][/COLOR][/B][/CENTER]
There are currently 1 users browsing this thread. (0 members and 1 guests)