We are here with you hands in hands to facilitate your learning & don't appreciate the idea of copying or replicating solutions. Read More>>

www.vustudents.ning.com

 www.bit.ly/vucodes + Link For Assignments, GDBs & Online Quizzes Solution www.bit.ly/papersvu + Link For Past Papers, Solved MCQs, Short Notes & More

# CS401 Assignment No 03 Spring 2019 Solution & Discussion

..How to Join Subject Study Groups & Get Helping Material?..

Views: 3560

.

+ http://bit.ly/vucodes (Link for Assignments, GDBs & Online Quizzes Solution)

+ http://bit.ly/papersvu (Link for Past Papers, Solved MCQs, Short Notes & More)

Attachments:

### Replies to This Discussion

CS401-assignment-sol

CS401-assignment-sol

it is not the solution

I'm not getting it sir. how can we use this n where ?

Respected sir

This is can not be the solution in any case.Kindly share the solution which is pertinent to the question.

Thanks

A.o.A Vu ID kahan dy gay code ma

*********

This is as close to the working solution as i can get, can someone make some amendments here according to the instructions

https://stackoverflow.com/questions/57134021/how-to-print-a-string-...

# CS401 Assignment No 03 Spring 2019 Idea Solution

#Check ur self

#Code

[org 0x0100]

jmp start

oldisr: dd 0 ; space for saving old isr

; keyboard interrupt service routine

kbisr:

push ax

push es

mov ax, 0xb800

mov es, ax ; point es to video memory

in al, 0x60 ; read a character from keyboard port

cmp al, 0x11 ; has the 'w' key pressed

jne nomatch ; no, go to nomatch

mov byte [es:0], '1' ; yes, print 1

mov byte [es:2], '5' ; yes print 0

jmp exit ; leave interrupt routine

nomatch:

pop es

pop ax

jmp far [cs:oldisr] ; call the original ISR

exit

mov al, 0x20

out 0x20, al ; sent EOI to PIC

pop es

pop ax

iret ; return from interrupt

start:

xor ax, ax

mov es, ax ; point es to IVT base

mov ax, [es:9*4]

mov [oldisr], ax ; save offset of old routine

mov ax, [es:9*4+2]

mov [oldisr+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

sti ; enable interrupt

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 residant

int 0x21

[org 0x0100]

jmp start

oldisr: dd 0 ; space for saving old isr

; keyboard interrupt service routine

kbisr:

push ax

push es

mov ax, 0xb800

mov es, ax ; point es to video memory

in al, 0x60 ; read a character from keyboard port

cmp al, 0x11 ; has the 'w' key pressed

jne nomatch ; no, go to nomatch

mov byte [es:0], '1' ; yes, print 1

mov byte [es:2], '5' ; yes print 0

jmp exit ; leave interrupt routine

nomatch:

pop es

pop ax

jmp far [cs:oldisr] ; call the original ISR

exit

mov al, 0x20

out 0x20, al ; sent EOI to PIC

pop es

pop ax

iret ; return from interrupt

start:

xor ax, ax

mov es, ax ; point es to IVT base

mov ax, [es:9*4]

mov [oldisr], ax ; save offset of old routine

mov ax, [es:9*4+2]

mov [oldisr+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

sti ; enable interrupt

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 residant

int 0x21

correct solution?

cs401 assignment solution.

[org 0x0100]

jmp start

oldisr: dd 0 ; space for saving old isr

; keyboard interrupt service routine

kbisr:

push ax

push es

mov ax, 0xb800

mov es, ax ; point es to video memory

in al, 0x60 ; read a character from keyboard port

cmp al, 0x11 ; has the 'w' key pressed

jne nomatch ; no, go to nomatch

mov byte [es:0], '1' ; yes, print 1

mov byte [es:2], '5' ; yes print 0

jmp exit ; leave interrupt routine

nomatch:

pop es

pop ax

jmp far [cs:oldisr] ; call the original ISR

exit

mov al, 0x20

out 0x20, al ; sent EOI to PIC

pop es

pop ax

iret ; return from interrupt

start:

xor ax, ax

mov es, ax ; point es to IVT base

mov ax, [es:9*4]

mov [oldisr], ax ; save offset of old routine

mov ax, [es:9*4+2]

mov [oldisr+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

sti ; enable interrupt

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 residant

int 0x21

## Latest Activity

Waqas updated their profile
17 minutes ago
1 hour ago
1 hour ago
1 hour ago
+ ! ! ! ! ∂ixie ∂us† liked 2.O's discussion Voice Password :P :P
1 hour ago
1 hour ago
+ ! ! ! ! ∂ixie ∂us† liked +++Student+++++'s discussion sometimes
1 hour ago
+ ! ! ! ! ∂ixie ∂us† liked +++Student+++++'s discussion Never ignore someone
1 hour ago

1

2

3