home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / SUPER_C.ZIP / TIC2A.ASM < prev    next >
Encoding:
Assembly Source File  |  1980-01-01  |  2.2 KB  |  107 lines

  1. ;                       hasWon(p)
  2. ;
  3. ; Returns TRUE if side p has won the game.
  4.  
  5. _TEXT   SEGMENT  BYTE PUBLIC 'CODE'
  6. _TEXT   ENDS
  7. CONST   SEGMENT  WORD PUBLIC 'CONST'
  8. CONST   ENDS
  9. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  10. _BSS    ENDS
  11. _DATA   SEGMENT  WORD PUBLIC 'DATA'
  12. _DATA   ENDS
  13.  
  14. DGROUP  GROUP   CONST,_BSS,_DATA
  15.  
  16.         ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  17.  
  18.         PUBLIC  _hasWon
  19.  
  20. _DATA   SEGMENT
  21.  
  22.         EXTRN   _board:BYTE
  23.  
  24. _DATA   ENDS
  25.  
  26. _TEXT      SEGMENT
  27.  
  28. ; hasWon(p)
  29. ;
  30. ; int p;
  31.  
  32.         p = 4
  33.  
  34.         PUBLIC  _hasWon
  35.  
  36. _hasWon PROC NEAR
  37.         push    bp
  38.         mov     bp,sp
  39.         push    di
  40.         push    si
  41.  
  42. ;       w = 3*p
  43.         mov     ax,3
  44.         imul    WORD PTR [bp+p]
  45.         mov     bl,al
  46.  
  47. ;       for (i = 0; i < 9; i += 3)
  48.         xor     si,si
  49. $F13:
  50. ;               if ((board[i]+board[i+1]+board[i+2]) == w)
  51. ;                       return(TRUE);
  52.         mov     al,BYTE PTR _board[si+2]
  53.         add     al,BYTE PTR _board[si+1]
  54.         add     al,BYTE PTR _board[si]
  55.         cmp     al,bl
  56.         je      $L20001
  57.         add     si,3
  58.         cmp     si,9
  59.         jl      $F13
  60.  
  61. ;       for (i = 0; i < 3; i++)
  62.         xor     si,si
  63. $F18:
  64.  
  65. ;               if ((board[i]+board[i+3]+board[i+6]) == w)
  66. ;                       return(TRUE);
  67.         mov     al,BYTE PTR _board[si+6]
  68.         add     al,BYTE PTR _board[si+3]
  69.         add     al,BYTE PTR _board[si]
  70.         cmp     al,bl
  71.         je      $L20001
  72.         inc     si
  73.         cmp     si,3
  74.         jl      $F18
  75.  
  76. ;       if ((board[0]+board[4]+board[8]) == w) return(TRUE);
  77.         mov     al,BYTE PTR _board+4
  78.         add     al,BYTE PTR _board
  79.         add     al,BYTE PTR _board+8
  80.         cmp     al,bl
  81.         jne     $I23
  82. $L20001:
  83.         mov     ax,1
  84.         jmp     SHORT $EX10
  85. $I23:
  86.  
  87. ;       if ((board[2]+board[4]+board[6]) == w) return(TRUE);
  88.         mov     al,BYTE PTR _board+4
  89.         add     al,BYTE PTR _board+2
  90.         add     al,BYTE PTR _board+6
  91.         cmp     al,bl
  92.         je      $L20001
  93.  
  94. ;       return(FALSE);
  95.         xor     ax,ax
  96. $EX10:
  97.         pop     si
  98.         pop     di
  99.         pop     bp
  100.         ret
  101. _hasWon ENDP
  102.  
  103. _TEXT   ENDS
  104.  
  105.         END
  106.  
  107.