home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
- TITLE CALC
- CGROUP GROUP CODESEG
- CODESEG SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CGROUP,DS:CGROUP,ES:CGROUP
- PUBLIC CALC
-
- ORG 100H
-
- CALC PROC FAR
- JMP START
-
- ;---------------------------------------------------------------------;
- ; ;
- ; DATA AREA ;
- ; ;
- ;---------------------------------------------------------------------;
-
- DB 'INTERRUPT NUMBER ='
- INT_NUMBER DB 61h
-
- SCREEN_HANDLE DW 0001h
-
- MESSAGE DB 'PEMATH is not resident',13,10
- MESSAGE_LEN EQU $-MESSAGE
-
- TAG DB 'PEMATH'
- TAG_LEN EQU $-TAG
-
- ;---------------------------------------------------------------------;
- ; ;
- ; CODE AREA ;
- ; ;
- ;---------------------------------------------------------------------;
-
- START:
- ;---------------------------------------------------------------------;
- ; TEST FOR PRESENCE OF CALCULATOR ;
- ;---------------------------------------------------------------------;
- SUB AX,AX
- MOV ES,AX
- SUB BH,BH
- MOV BL,INT_NUMBER
- SHL BX,1
- SHL BX,1
- MOV DI,ES:[BX]
- MOV ES,ES:[BX+2]
- ADD DI,4
- LEA SI,TAG
- MOV CX,TAG_LEN
- REPE CMPSB
- JE CALL_CALC
- MOV BX,SCREEN_HANDLE
- MOV CX,MESSAGE_LEN
- LEA DX,MESSAGE
- MOV AH,40h
- INT 21h
- JMP SHORT CALC_EXIT
- ;---------------------------------------------------------------------;
- ; CALL CALCULATOR ;
- ;---------------------------------------------------------------------;
- CALL_CALC:
- MOV AL,INT_NUMBER
- MOV BYTE PTR INT_CODE,AL
- DB 0CDh ; INT
- INT_CODE:
- DB 00h
- NOP
- NOP
-
- CALC_EXIT:
- INT 20h
-
- CALC ENDP
-
- CODESEG ENDS
- END CALC