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