Witam, mam kod do przeanalizowania w assemblerze (gre w kolko i krzyzyk), utknalem w jednym miejscu mianowicie nie rozumiem jak dziala ta funkcja, ma ona na celu sprawdzenie czy ktos juz wygral czy nie, szczegolnie nie rozumiem pogrubionego fragmentu
bylbym wdzieczny za kazda pomoc

WINS  DW  1,2,3, 4,5,6, 7,8,9                ;wiersze
         DW  1,4,7, 2,5,8, 3,6,9                ;kolumny
         DW  1,5,9, 3,5,7                       ;ukosne

SPRAWDZ  PROC NEAR
       SUB  SI,SI             ;zeruje indeks
       MOV  CX,8              ;set up loop counter ile razy petla sie wykona
	   
**CAT:   MOV  DI,WINS[SI]       ;przesyla dane do DI ) pierwsza pozycja z tablicy **
   **      MOV  AH,BOARD[DI-1]    ;get board symbol**
     **   MOV  DI,WINS[SI+2]     ;get second board pisition**
      **   MOV  BL,BOARD[DI-1]    ;get board symbol**
      **   MOV  DI,WINS[SI+4]     ;get third board position**
      **   MOV  BH,BOARD[DI-1]    ;get board symbol**
      **   ADD  SI,6              ;advance to next set of psitions**
         CMP  AH,BL             ;do all three symbols match? sprawdza czy wszystkie trzy symbole sie zgadzaja
         JNZ  NMA
         CMP  AH,BH
         JNZ  NMA
         CMP  AH,'X'            ;does match contain X?
         JNZ  WIO
         LEA  DX,XWIN           ;set up pointer to x-wins string
         JMP  EXC               ;go process string
	   
WIO:   LEA  DX,OWIN           ;set up pointer to o-wins string
          JMP  EXC               ;go process string

NMA:   LOOP CAT               ;no match, try another group
          SUB  SI,SI             ;clear index pointer

CFB:   MOV  AL,BOARD[SI]      ;get board symbol
         CMP  AL,'X'            ;is symbol X?
         JZ   IAH
         CMP  AL,'O'            ;is symbol O?
         JZ   IAH
         RET                    ;no tie yet

IAH:   INC  SI                ;advance to next position
         LOOP CFB               ;go check another board symbol
         LEA  DX,MTIE           ;set up pointer to tie message

EXC:   MOV  AH,9              ;display string function
         INT  21H               ;DOS call
         SUB  AL,AL             ;set zero flag

         RET
SPRAWDZ  ENDP