; бшбнд кхмхх мю щйпюм
;
.MODEL SMALL
.STACK 64
.DATA
 VVC1 DB 'Vvedite cvet fona(v intervale 0-15) ',20H
 VVC2 DB 'Vvedite cvet linii(v intervale 0-15) ',20H
 VVKT1 DB 'Vvedite koordinati 1-oi tochki(v intervale x: 0-639, y: 0-479) ',20H
 VVKT2 DB 'Vvedite koordinati 2-oi tochki(v intervale x: 0-639, y: 0-479) ',20H
 ERR  DB 'Dannie vne intervala! Povtorite vvod!',20H
 ERR_COLOR DB 'Cveta fona i linii sovpadaiut! Povtorite vvod!',20H
 X1 DW ?
 X2 DW ?
 Y1 DW ?
 Y2 DW ?
 X_INC DW ?
 Y_INC DW ?
 COLOR_FON DB ?
 COLOR_LINE DB ?
 STR DB 0

  ERROR MACRO 
    MOV AX,1301H     
     MOV BX,0016H     
     LEA BP,ERR      
     MOV CX,38
     MOV DH,STR
     MOV DL,0
     INT 10H
     INC STR 
  ENDM
.CODE
  MAIN PROC FAR
     MOV AX,@DATA      ;хмхжхюкхгюжхъ яецлемрмшу пецхярпнб
     MOV DS,AX 
     MOV ES,AX     
     MOV AH,6
     MOV AL,0
     MOV BH,7
     MOV CX,0
     MOV DH,25
     MOV DL,80
     INT 10H
     CALL VVOD_ATR     ;бшгнб опнжедспш ббндю юрпхасрнб
     CALL VVOD_KOORD   ;бшгнб опнжедспш ббндю йннпдхмюр рнвей
     MOV AH,00H        ;сярюмнбйю цпютхвеяйнцн пефхлю 
     MOV AL,12H        ; 640*480
     INT 10H           ;он опепшбюмхч 10м
     CALL VIVOD_LINE   ;бшгнб опнжедспш бшбндю кхмхх мю щйпюм
     MOV AH,1          ;гюдепфйю дн мюфюрхъ йкюбхьх
     INT 21H
     MOV AH,00H        ;сярюмнбйю хяундмнцн цпютхвеяйнцн пефхлю
     MOV AL,3
     INT 10H
     MOV AX,4C00H      ;ярюмдюпрмши бшунд хг опнцпюллш он опепшбюмхч 21м
     INT 21H
  MAIN ENDP
;  
  VVOD_ATR PROC NEAR  ;опнжедспю ббндю юрпхасрнб
     MOV STR,0
V1:  MOV AX,1301H     ;бшбнд ярпнйх яхлбнкнб 
     MOV BX,0016H     ;он йнлюмде 13м
     LEA BP,VVC1      ;опепшбюмхъ 10м
     MOV CX,37
     MOV DH,STR
     MOV DL,0
     INT 10H
     CALL VVOD_CHISLO ;бшгнб опнжедспш ббндю вхякю
     INC STR     
     CMP BX,15
     JA ERR3        
     MOV COLOR_FON,BL ;жбер тнмю
V2:  MOV AX,1301H
     MOV BX,0016H
     LEA BP,VVC2
     MOV CX,38
     MOV DL,0
     MOV DH,STR
     INT 10H
     CALL VVOD_CHISLO
     INC STR     
     CMP BX,15
     JA ERR4       
     MOV COLOR_LINE,BL ;жбер кхмхх     
     CMP BL,COLOR_FON
     JNE END1
     MOV AX,1301H
     MOV BX,0016H
     LEA BP,ERR_COLOR
     MOV CX,47
     MOV DL,0
     MOV DH,STR
     INT 10H
     INC STR
     JMP V1
ERR3:ERROR
     JMP V1
ERR4:ERROR 
     JMP V2
END1:    RET                ;бнгбпюр й рнвйе бшгнбю
  VVOD_ATR ENDP
;
  VVOD_KOORD PROC NEAR
     MOV AX,1301H
     MOV BX,0016H
     LEA BP,VVKT1
     MOV CX,63
     MOV DL,0
     MOV DH,STR
     INT 10H
     INC STR
V3:  MOV AH,2
     MOV DL,0AH        ;оепеирх мю якедсчысч ярпнйс
     INT 21H
     MOV AH,2
     MOV DL,0DH        ;х сярюмнбхрэ йспянп б е╗ мювюкн
     INT 21H
     MOV AH,2
     MOV DL,'X'
     INT 21H
     CALL VVOD_CHISLO 
     CMP BX,639
     JA ERR5 
     MOV X1,BX         ;йннпдхмюрю у1
V4:  MOV AH,2
     MOV DL,0Ah
     INT 21H           
     MOV AH,2
     MOV DL,'Y'
     INT 21H
     CALL VVOD_CHISLO
     CMP BX,479
     JA ERR6
     MOV Y1,BX         ;йннпдхмюрю с1
     ADD STR,2
     MOV AX,1301H
     MOV BX,0016H
     LEA BP,VVKT2
     MOV CX,63
     MOV DL,0
     MOV DH,STR
     INT 10H
V5:  MOV AH,2
     MOV DL,0AH
     INT 21H
     MOV AH,2
     MOV DL,0DH
     INT 21H
     MOV AH,2
     MOV DL,'X'
     INT 21H
     INC STR
     CALL VVOD_CHISLO
     CMP BX,639
     JA ERR7
     MOV X2,BX          ;йннпдхмюрю у2             
V6:  MOV AH,2
     MOV DL,0Ah
     INT 21H                
     MOV AH,2
     MOV DL,'Y'
     INT 21H
     CALL VVOD_CHISLO   
     CMP BX,479
     JA ERR8
     MOV Y2,BX         ;йннпдхмюрю с2
     JMP END2
ERR5:INC STR
     ERROR     
     JMP V3
ERR6:INC STR
     INC STR
     ERROR
     DEC STR
     MOV AH,2
     MOV DL,0
     MOV DH,STR
     MOV BH,0
     INT 10H
     JMP V4
ERR7:INC STR
     ERROR    
     JMP V5
ERR8:INC STR
     INC STR
     ERROR
     DEC STR
     MOV AH,2
     MOV DL,0
     MOV DH,STR
     MOV BH,0
     INT 10H
     JMP V6
END2:   RET                 ;бнгбпюр й рнвйе бшгнбю
  VVOD_KOORD ENDP
;
  VVOD_CHISLO PROC NEAR  
   MOV DX,0AH        ; гюмняхл б DX лмнфхрекэ - 10
   MOV BX,0          ; намскъел BX, б йнрнпнл асдер ббед╗мне вхякн
BEGIN:MOV AH,1          ; ббнд я йкюбхюрспш
   INT 21H           ; он опепшбюмхч 21H
   CMP AL,0DH        ; опнбепъел ббед╗ммши яхлбнк мю янбоюдемхе я бнгпюрнл йюперйх
   JE L2             ; еякх янбоюк, рн оепеундхл мю лерйс
   CMP AL,30H
   JB ERR1
   CMP AL,39H
   JA ERR1
   AND AL,0FH        ; сдюкемхе опхгмюйю ASCII
   MOV AH,0          ; намскъел юм
   ADD BX,AX         ; ясллхпсел( дкъ рнцн х намскъкх юм)
L1:MOV AH,1          
   INT 21H           
   CMP AL,0DH        
   JE L2
   CMP AL,30H
   JB ERR2
   CMP AL,39H
   JA ERR2            
   AND AL,0FH
   MOV CL,AL         ; гюмняхл ббед╗ммне вхякн б CL
   MOV AX,BX         ; гюмняхл вхякн, онксвеммне пюмее, б AX
   MUL DX            ; слмнфюел ецн мю 10(опх щрнл DX намскхрэяъ)
   MOV DX,0AH        ; гюмняхл б DX лмнфхрекэ
   MOV BX,AX         ; онксвеммши пегскэрюр бнгбпюыюел б BX 
   MOV CH,0          
   ADD BX,CX         ; ясллхпсел онксвеммне пюмее вхякн я ббед╗ммшл
   JMP L1            ; оепеунд й ббндс якед яхлбнкю
ERR1:MOV AH,2
     MOV DL,7H
     INT 21H
     MOV AH,2
     MOV DL,8H
     INT 21H
     JMP BEGIN
ERR2:MOV AH,2
     MOV DL,7H
     INT 21H
     MOV AH,2
     MOV DL,8H
     INT 21H
     JMP L1
L2:RET               ; бнгбпюр й рнвйе бшгнбю
  VVOD_CHISLO ENDP  
;
  VIVOD_LINE PROC NEAR  ;бшбнд кхмхх мю щйпюм опх онлных юкцнпхрлю апегемуюлю
   MOV AH,0BH         ;сярюмнбхрэ жбер тнмю
   MOV BH,00          ;он опепшбюмхч 10м
   MOV BL,COLOR_FON
   INT 10H  
       MOV CX,X2
       MOV DX,Y2
       MOV AX,CX
       SUB AX,X1
       JNS DX_POS
       NEG AX
       MOV WORD PTR X_INC,1
       JMP DX_NEG
DX_POS:MOV WORD PTR X_INC,-1
DX_NEG:MOV BX,DX
       SUB BX,Y1
       JNS DY_POS
       NEG BX
       MOV WORD PTR Y_INC,1
       JMP DY_NEG
DY_POS:MOV WORD PTR Y_INC,-1
DY_NEG:SHL AX,1
       SHL BX,1
       PUSH AX
       PUSH BX
       MOV AL,COLOR_LINE
       MOV AH,0CH
       MOV BH,0
       INT 10H  
       POP BX
       POP AX
       CMP AX,BX
       JNA DX_DY
       MOV DI,AX
       SHR DI,1
       NEG DI
       ADD DI,BX   ;DI=2*DY-DX
BEGIN1:CMP CX,X1
       JE EXIT_LINE
       CMP DI,0
       JL L3
       ADD DX,Y_INC
       SUB DI,AX
L3:  ADD CX,X_INC
     ADD DI,BX
     PUSH AX
     PUSH BX
     MOV AL,COLOR_LINE
     MOV AH,0CH
     MOV BH,0
     INT 10H  
     POP BX
     POP AX   
     JMP BEGIN1
DX_DY: MOV DI,BX
       SHR DI,1
       NEG DI
       ADD DI,AX      ;DI=2*DX-DY
BEGIN2:CMP DX,Y1
       JE EXIT_LINE
       CMP DI,0
       JL L4
       ADD CX,X_INC
       SUB DI,BX
L4:  ADD DX,Y_INC
     ADD DI,AX
     PUSH AX
     PUSH BX
     MOV AL,COLOR_LINE
     MOV AH,0CH
     MOV BH,0
     INT 10H
     POP BX  
     POP AX       
     JMP BEGIN2
   EXIT_LINE:
 RET
  VIVOD_LINE ENDP
   END MAIN
    
     