home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CASM.ARJ / PEEK.ASM < prev    next >
Assembly Source File  |  1988-01-24  |  1KB  |  77 lines

  1. ;_ peek.asm   Sun Jan 24 1988   Modified by: Walter Bright */
  2. ; Copyright (C) 1985-1988 by Northwest Software
  3. ; All Rights Reserved
  4. ; Written by Walter Bright
  5.  
  6.     include    macros.asm
  7.  
  8.     begcode    peek
  9.  
  10.     c_public peek,poke
  11.  
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. ; Transfer numbytes from seg:offset to DS:buf
  14. ; Use:
  15. ;    peek(seg,offset,buf,numbytes);
  16.  
  17. func    peek
  18.     push    BP
  19.     mov    BP,SP
  20.     .save    <SI,DI>
  21.     cld
  22.     push    DS
  23.     mov    DS,P[BP]    ;source segment
  24.     mov    SI,P+2[BP]    ;source pointer in DS:SI
  25.     if LPTR
  26.     les    DI,P+4[BP]    ;get pointer to buf in ES:DI
  27.     else
  28.       ife ESeqDS
  29.     mov    AX,SS
  30.     mov    ES,AX
  31.       endif
  32.     mov    DI,P+4[BP]    ;get pointer to buf in ES:DI
  33.     endif
  34.     mov    CX,P+4+SIZEPTR[BP]    ;number of bytes to move
  35.     rep    movsb
  36.     pop    DS
  37.     .restore <DI,SI>
  38.     pop    BP
  39.     ret
  40. c_endp    peek
  41.  
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43. ; Transfer numbytes from DS:buf to seg:offset
  44. ; Use:
  45. ;    poke(seg,offset,buf,numbytes);
  46.  
  47. func    poke
  48.     push    BP
  49.     mov    BP,SP
  50.     .save    <SI,DI>
  51.     cld
  52.     if LPTR
  53.     push    DS
  54.     mov    ES,P[BP]    ;segment of destination
  55.     mov    DI,P+2[BP]    ;ES:DI -> destination
  56.     lds    SI,P+4[BP]    ;DS:SI -> buf (source pointer)
  57.     mov    CX,P+8[BP]    ;# of bytes to move
  58.     rep    movsb
  59.     pop    DS
  60.     else
  61.     push    ES
  62.     mov    ES,P[BP]    ;segment of destination
  63.     mov    DI,P+2[BP]    ;offset of destination
  64.     mov    SI,P+4[BP]    ;buf (source offset)
  65.     mov    CX,P+6[BP]    ;# of bytes to move
  66.     rep    movsb
  67.     pop    ES
  68.     endif
  69.     .restore <DI,SI>
  70.     pop    BP
  71.     ret
  72. c_endp    poke
  73.  
  74.     endcode    peek
  75.  
  76.     end
  77.