|
|
.MODEL SMALL
.STACK 64
DATA SEGMENT
MSG DB 'ENTER(xleft,ytop,xright,ybottom) OF RECTANGLE > $'
TEN DB 0AH
XL DW 00H
YT DW 00H
XR DW 00H
YB DW 00H
POINTS LABEL BYTE
MAXPLEN DB 20
PLEN DB ?
POINTSFLD DB 20 DUP(' ')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CALL CLS
CALL CURSOR
CALL INPUT
CALL CONVERT
MOV AH,0FH
INT 10H
PUSH AX
CALL SETMODE
CALL DRAW
CALL GETCH
POP AX
MOV AH,00H
INT 10H
MOV AX,4C00H
INT 21H
;CLEARS SCREEN
CLS: MOV AX,0600H
MOV BH,07H
MOV CX,0000H
MOV DX,184FH
INT 10H
RET
;SET CURSOR
CURSOR: MOV DX,0000H
MOV AH,02H
MOV BH,00H
INT 10H
RET
;READ CO-ORDINATES STRING
INPUT: MOV AH,09H
LEA DX,MSG
INT 21H
MOV AH,0AH
LEA DX,POINTS
INT 21H
RET
;SAVES INTEGER VALUES OF CO-ORDINATES INTO XL,YT,XR,YB FIELDS
CONVERT:LEA SI,POINTSFLD
MOV CL,PLEN
NEXTNUM:MOV AX,0000H
NEXTDIG:MOV DL,[SI]
CMP DL,' '
JE BLANK
MUL TEN
MOV DH,00H
SUB DL,30H
ADD AX,DX
INC SI
DEC CL
JNZ NEXTDIG
JZ SAVE
BLANK: INC SI
PUSH AX
DEC CL
JNZ NEXTNUM
SAVE: LEA BX,YB
MOV [BX],AX ;yb
SUB BX,02H
POP AX
MOV [BX],AX ;xr
SUB BX,02H
POP AX
MOV [BX],AX ;yt
SUB BX,02H
POP AX
MOV [BX],AX ;xl
RET
SETMODE:MOV AH,00H
MOV AL,04H
INT 10H
MOV AH,0BH
MOV BH,07
MOV BL,02
INT 10H
RET
;DRAWS RECTANGLE
DRAW: MOV CX,XL
MOV DX,YT
CALL DROW
MOV CX,XL
MOV DX,YB
CALL DROW
MOV CX,XL
MOV DX,YT
CALL DCOL
MOV CX,XR
MOV DX,YT
CALL DCOL
RET
;DRAWS HORIZONTAL EDGE OF RECTANGLE
DROW: MOV AH,0CH
MOV AL,01H
L1: INT 10H
INC CX
CMP CX,XR
JNE L1
RET
;DRAWS VERTICAL EDGE OF RECTANGLE
DCOL: MOV AH,0CH
MOV AL,01H
L2: INT 10H
INC DX
CMP DX,YB
JNE L2
RET
;GET CHARACTER FROM KEYBOARD
GETCH: MOV AH,10H
INT 16H
RET
CODE ENDS
END START
|
|
|