Write an interrupt routine to handle division by zero, Computer Engineering

Assignment Help:

Q. Write an interrupt routine to handle 'division by zero'?

This file can be loaded just like a COM file though makes itself permanently resident until the system is running.

This ISR is splitted into two main sections: initialisation and interrupt handler. The initialisation procedure (INIT) is executed just once when program is executed from DOS level. INIT takes over the type zero interrupt vector and it also prints a sign-on message and then performs a terminate and 'stay resident exit' to MS-DOS. This special exit reserves memory occupied by program so that it's not overwritten by subsequent application programs. The interrupt handler (ZDIV) receives control when a divide-by-zero interrupt takes place.

CR                            EQU      ODH  ; ASCII carriage return

LF                             EQU       0Ah    ; ASCII line feed

BEEP                          EQU    07h      ; ASCII beep code

BACKSP                 EQU      08h      ; ASCII backspace code  

CSEG SEGMENT PARA PUBLIC 'CODE' 

 ORG 100h

 ASSUME CS: CSEG, DS: CSEG, ES: CSEG, SS: CSEG

INIT PROC NEAR

MOV                        DX,OFFSET ZDIV      ; reset interrupt 0 vector

                                                                        ; to address of new

                                                                        ; handler using function 25h, interrup

MOV                        AX, 2500h                     ; 0 handles divide-by-zero

INT                           21h  

MOV                        AH,09                            ; print identification message

INT                           21h  

                                                                        ; DX assigns paragraphs of memory

                                                                        ; to reserve

MOV                        DX, ((OFFSET PGM_LEN + 15)/16) + 10h

MOV                        AX, 3100h                     ; exit and stay resident

INT                           21h                                 ; with a return code = 0

INIT ENDP

 

ZDIV PROC FAR                                                     ; this is the zero-divide

                                                                        ; Hardware interrupt handler.

STI                                                                  ; enable interrupts.

PUSH AX                                                       ; save general registers

PUSH BX

PUSH CX

PUSH DX

PUSH SI

PUSH DI

PUSH BP

PUSH DS

PUSH ES

MOV AX, CS   

MOV DS, AX   

MOV   DX, OFFSET WARN                                                            ; print warning "divide by

MOV AH, 9                                                                            ; zero "and" continue or

INT 21h                                                                                  ; quit?"

 

ZDIV1: MOV                         AH, 1                          ; read keyboard

INT                                         21h  

CMP                                        AL, 'C'                       ; is it 'C' or 'Q'?

JE                                            ZDIV3                                    ; jump it is a 'C'.

CMP                                        AL, 'Q'  

JE                                            ZDIV2                        ; jump it's a'Q'

MOV                                       DX, OFFSET BAD   ; illegal entry, send a

MOV                                       AH, 9                                      ; beep, erase the bad char

INT                                         21h                              ; and try again

JMP   ZDIV1

ZDIV2: MOV                         AX, 4CFFh                 ; user wants to abort the

   INT                                                  21h                              ; program, return with

                                                                                    ; return code = 255

ZDIV3: MOV                         DX, OFFSET CRLF   ; user wishes to continue

MOV                                       AH, 9                                      ; send CRLF

INT 21h  

POP ES                                                                       ; restore general registers

POP DS                                                                      ; and resume execution

POP BP  

POP DI  

POP SI  

POP DX  

POP CX  

POP BX  

POP AX  

IRET    

ZDIV   ENDP

SIGNON                    DB   CR, LF, 'Divide by zero interrupt'

                                    DB 'Handler Installed'

                                    DB   CRLF,'$'

WARN                        DB CR, LF, 'Divide by zero detected:'

                                    DB CR, LF 'Quit or Continue (C/Q)?'

                                    DB '$'

BAD                           DB BEEP, BACKSP, "BACKSP,'$'

CRLF                          DB CR, LF, $'

PGM_LEN                 EQU $-INIT 

CSEG ENDS

END


Related Discussions:- Write an interrupt routine to handle division by zero

What is cts and cls, What is CTS and CLS? CLS stands for common langua...

What is CTS and CLS? CLS stands for common language specification CTS stands for common type system.

Explain the operation of octal to binary encoder, Explain the operation of ...

Explain the operation of octal to binary encoder. Ans Octal to binary encoder consists of eight inputs, one for each of eight digits and three outputs which generate the con

Scanf function, How can the maximum field width for a data item be specifie...

How can the maximum field width for a data item be specified within a scanf function? When the program is executed, three integer quantities will be entered from the standard i

Implement that function using only nand gates, Q. Find simplified function ...

Q. Find simplified function F and implement that function using only NAND gates. 1.  F(A,B,C) = (A+B) (A'+B+C') (A'+B'+C') 2.  F (A,B,C,D) = A'B'C'+B'CD'+A'BCD'+AB'C' 3.

What is assembly language, What is assembly language? A complete set of...

What is assembly language? A complete set of symbolic names and rules for the use of machines comprise a programming language, usually referred to as an assembly language.

View the site files, To see a high-level representation of the structure of...

To see a high-level representation of the structure of a local site, you use Dreamweaver's Site Map view. You can also use site map to add new files to the site, to add, remove and

Greedy search - artificial intelligence, Greedy Search - artificial intelli...

Greedy Search - artificial intelligence: If we have a heuristic function for states, defined as above, so we can simply measure each state with respect to this measure and ord

Processor, what is the difference between i5 and i7 processor?

what is the difference between i5 and i7 processor?

Why is c standard library needed, Why is C standard library needed?  C ...

Why is C standard library needed?  C Standard Library: C would have been a tough programming language in absence of the standard library. The standard library in C contains

What is the semiconductor memory chip, What is the Semiconductor memory chi...

What is the Semiconductor memory chip A semiconductor memory chip comprises a large number of cells organized into an array and the logic necessary to access any array in the c

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd