home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_03 / 1103078a < prev    next >
Text File  |  1993-01-05  |  2KB  |  42 lines

  1. ; ctxtswc will do a contextswitch by changing stacks.
  2. ; the stack in use will be stored on the heap, and the
  3. ; new stack which is previously stored on the heap,
  4. ; will be loaded.
  5.     .MODEL  COMPACT
  6.     .CODE
  7.     EXTRN   __stklen:word
  8.     EXTRN   _PREVIOUS:dword
  9.     EXTRN   _CURRENT:dword
  10.     PUBLIC  @ctxtswc$qv
  11. @ctxtswc$qv PROC NEAR
  12.     push    bp                    ; save bp
  13.     mov     cx,__stklen           ; put nmbr of bytes
  14.     sub     cx,sp                 ; in cx
  15.     les     bx,dword ptr DGROUP:_PREVIOUS
  16.     mov     word ptr es:[bx+4],cx ; save sz of usedstk
  17.     mov        di,word ptr es:[bx+2] ; set adr for stk
  18.     mov        es,word ptr es:[bx]   ; copy in di and es
  19.     mov        ax,ds                 ; save ds
  20.     mov        bx,ss                 ; set adr of stk in
  21.     mov        ds,bx                 ; ds
  22.     mov        si,sp                 ; and si
  23.     rep        movsb                 ; do copy
  24.     mov        ds,ax                 ; reset ds
  25.     les        bx,dword ptr DGROUP:_CURRENT
  26.     mov        cx,word ptr es:[bx+4] ; get sz of stk copy
  27.     mov        ax,ds                 ; save ds
  28.     mov        sp,__stklen
  29.     sub        sp,cx                 ; set stkPtr
  30.     mov        si,word ptr es:[bx+2] ; set adr of stored
  31.     mov        ds,word ptr es:[bx]   ; stk in si and ds
  32.     mov        di,sp                 ; set dest for copy
  33.     mov        dx,ss                 ; di=stkPtr
  34.     mov        es,dx                 ; and es=stkSeg
  35.     rep        movsb                 ; do copy
  36.     mov        ds,ax                 ; reset ds
  37.     pop        bp                    ; reset bp
  38.     ret
  39. @ctxtswc$qv ENDP
  40.     END
  41.  
  42.