www.vustudents.ning.com

We non-commercial site working hard since 2009 to facilitate learning Read More. We can't keep up without your support. Donate.

# CS401 Assignment No 03 Spring 2019 Solution & Discussion

Share your solutions here!

Views: 3991

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

it is not correct. Please read question once.

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

1

2

3

4

## Latest Activity

Batool updated their profile
5 minutes ago
Terry Brown replied to irshad kausar's discussion math
1 hour ago
Terry Brown and Fahad Chaudhary joined Virtual University of Pakistan
1 hour ago
+ Dazzling smile updated their profile
3 hours ago
Muhammad Rizwan Ansari liked Karina Lopez's profile
7 hours ago
alvia khan and Shoaib Hasan Khan are now friends
7 hours ago
Huma noor left a comment for Karina Lopez
11 hours ago
Shoaib Hasan Khan updated their profile
13 hours ago