home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 100 / 96 / getseg_c.asm < prev    next >
Assembly Source File  |  1983-11-22  |  3KB  |  82 lines

  1.  
  2. ; Name          getseg -- Get current Segment Values
  3. ;
  4. ;
  5. ; Synopsis      getseg(pcs, pds, pes, pss, psi, pdi, psp, pflag);
  6. ;
  7. ;               unsigned *cs Pointer to where code segment address goes 
  8. ;               unsigned *ds Pointer to data segment
  9. ;               unsigned *es Pointer to extra segment
  10. ;               unsigned *ss Pointer to stack segment
  11. ;               unsigned *si Pointer to si register
  12. ;               unsigned *di Pointer to di register
  13. ;               unsigned *sp Pointer to sp register
  14. ;               unsigned *flag Returns flag
  15. ;
  16. ;
  17. ; Returns       cs              value of Code segment
  18. ;               ds              value of Data segment
  19. ;               es              value of Extra segment
  20. ;               ss              value of Stack segment
  21. ;               si              value of SI register ****NOT RELIABLE****
  22. ;               di              value of DI register
  23. ;               sp              value of Stack Pointer
  24. ;               flag            value of Flags register
  25. ;                                 
  26. ;       
  27. ;       
  28.  
  29.  
  30. pgroup  group    prog
  31. prog    segment  byte public 'PROG' ; Combine with C 'PROG' program segment
  32.         assume   cs:pgroup
  33.         public   getseg
  34. getseg proc     near
  35.         push     bp                 ; Save the frame pointer
  36.         mov      bp,sp
  37.         mov      si,[bp + 04]       ; Get the values for the registers
  38.         mov      ax,[si]
  39.         mov      si,[bp + 06]
  40.         mov      bx, [si]
  41.         mov      si,[bp + 08]
  42.         mov      cx, [si]
  43.         mov      si,[bp + 10]
  44.         mov      dx,[si]
  45. ;==============================================================================
  46.         mov ax, cs                  ;Get value of code segment
  47.         mov bx, ds                  ;data segment
  48.         mov cx, es                  ;extra segment
  49.         mov dx, ss                  ;stack segment
  50.  
  51.  
  52. ;==============================================================================
  53.  
  54. uret:   mov      bp,sp              ; Now recover the values of the
  55.         mov      si,[bp + 04]       ; parameters
  56.         mov      [si],ax
  57.         mov      si, [bp + 06]
  58.         mov      [si], bx
  59.         mov      si, [bp + 08]
  60.         mov      [si], cx
  61.         mov      si, [bp + 10]
  62.         mov      [si], dx
  63.         mov      si, [bp + 12]
  64.         mov      [si], si
  65.         mov      si, [bp + 14]
  66.         mov      [si], di
  67.         mov      si, [bp + 16]
  68.         mov      [si], sp
  69.         mov      al, 00             ;zero out al
  70.         lahf                        ;load flag into ah
  71.         mov      si, [bp + 18]
  72.         mov      [si], ax
  73.  
  74.  
  75.         mov      ax,0               ; No error
  76.  
  77. quit:   pop      bp                 ; Get the original frame pointer.
  78.         ret
  79. getseg endp
  80. prog    ends
  81.         end