home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / SUPER_C.ZIP / TIC2.ASM < prev    next >
Encoding:
Assembly Source File  |  1980-01-01  |  2.8 KB  |  139 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.         EXTRN   __chkstk:NEAR
  24.  
  25. _DATA   ENDS
  26.  
  27. _TEXT      SEGMENT
  28.  
  29. ; hasWon(p)
  30. ;
  31. ; int p;
  32.  
  33.         p = 4
  34.  
  35.         PUBLIC  _hasWon
  36.  
  37. _hasWon PROC NEAR
  38.         push    bp
  39.         mov     bp,sp
  40.         mov     ax,4
  41.         call    __chkstk
  42.         push    di
  43.         push    si
  44.  
  45. ;       w = 3*p
  46.         mov     ax,3
  47.         imul    WORD PTR [bp+p]
  48.         mov     di,ax
  49.  
  50. ;       for (i = 0; i < 9; i += 3)
  51.         xor     si,si
  52. $F13:
  53. ;               if ((board[i]+board[i+1]+board[i+2]) == w)
  54. ;                       return(TRUE);
  55.         mov     al,BYTE PTR _board[si+2]
  56.         cbw
  57.         mov     cx,ax
  58.         mov     al,BYTE PTR _board[si+1]
  59.         cbw
  60.         add     ax,cx
  61.         mov     cx,ax
  62.         mov     al,BYTE PTR _board[si]
  63.         cbw
  64.         add     cx,ax
  65.         cmp     cx,di
  66.         je      $L20001
  67.         add     si,3
  68.         cmp     si,9
  69.         jl      $F13
  70.  
  71. ;       for (i = 0; i < 3; i++)
  72.         xor     si,si
  73. $F18:
  74.  
  75. ;               if ((board[i]+board[i+3]+board[i+6]) == w)
  76. ;                       return(TRUE);
  77.         mov     al,BYTE PTR _board[si+6]
  78.         cbw
  79.         mov     cx,ax
  80.         mov     al,BYTE PTR _board[si+3]
  81.         cbw
  82.         add     ax,cx
  83.         mov     cx,ax
  84.         mov     al,BYTE PTR _board[si]
  85.         cbw
  86.         add     cx,ax
  87.         cmp     cx,di
  88.         je      $L20001
  89.         inc     si
  90.         cmp     si,3
  91.         jl      $F18
  92.  
  93. ;       if ((board[0]+board[4]+board[8]) == w) return(TRUE);
  94.         mov     al,BYTE PTR _board+4
  95.         cbw
  96.         mov     cx,ax
  97.         mov     al,BYTE PTR _board
  98.         cbw
  99.         add     ax,cx
  100.         mov     cx,ax
  101.         mov     al,BYTE PTR _board+8
  102.         cbw
  103.         add     cx,ax
  104.         cmp     cx,di
  105.         jne     $I23
  106. $L20001:
  107.         mov     ax,1
  108.         jmp     SHORT $EX10
  109. $I23:
  110.  
  111. ;       if ((board[2]+board[4]+board[6]) == w) return(TRUE);
  112.         mov     al,BYTE PTR _board+4
  113.         cbw
  114.         mov     cx,ax
  115.         mov     al,BYTE PTR _board+2
  116.         cbw
  117.         add     ax,cx
  118.         mov     cx,ax
  119.         mov     al,BYTE PTR _board+6
  120.         cbw
  121.         add     cx,ax
  122.         cmp     cx,di
  123.         je      $L20001
  124.  
  125. ;       return(FALSE);
  126.         xor     ax,ax
  127. $EX10:
  128.         pop     si
  129.         pop     di
  130.         mov     sp,bp
  131.         pop     bp
  132.         ret
  133. _hasWon ENDP
  134.  
  135. _TEXT   ENDS
  136.  
  137.         END
  138.  
  139.