home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / dirutl / treesurg.arc / SWINT.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-06-15  |  2.3 KB  |  68 lines

  1. ;        execute an s/w function call with all register set up
  2. ;        EXAMPLE OF USE
  3. ;        struct regval{unsigned ax,bx,cx,dx,si,di,ds,es;};
  4. ;        struct regval input_regs ; /* input register values */
  5. ;                      return_regs; /* values returned in regs */
  6. ;
  7. ;        status = swint(fun_code,&input_regs,&return_regs);
  8. ;
  9. ;        structure for register values is
  10. ;             struct regval{unsigned ax,bx,cx,dx,si,di,ds,es;};
  11. regs     struc
  12. reg_ax   dw   0         ;ax value
  13. reg_bx   dw   0         ;bx value
  14. reg_cx   dw   0         ;cx value
  15. reg_dx   dw   0         ;dx value
  16. reg_si   dw   0         ;si value
  17. reg_di   dw   0         ;di value
  18. reg_ds   dw   0         ;ds value
  19. reg_es   dw   0         ;es value
  20. regs     ends
  21. ;        define arguments
  22. args     struc
  23. ret_adr  dw   0
  24. old_bp   dw   0
  25. int_no   dw   0
  26. sreg     dw   0
  27. dreg     dw   0
  28. args     ends
  29. code     segment byte public
  30.          assume cs:code
  31.          public swint
  32. swint:
  33.          push bp
  34.          mov  bp,sp     ;set our arg pointer
  35.          push ds        ;save ds as a local variable
  36.          push es
  37.          mov  al,byte ptr int_no[bp];   insert int. no into instruction
  38.          mov  bx,offset int_instr
  39.          mov  byte ptr cs:[bx+1],al
  40.          mov  bx,word ptr sreg[bp]     ; set up address of input reg
  41.          mov  ax,word ptr reg_ax[bx]   ; place values in registers
  42.          mov  cx,word ptr reg_cx[bx]
  43.          mov  dx,word ptr reg_dx[bx]
  44.          mov  si,word ptr reg_si[bx]
  45.          mov  di,word ptr reg_di[bx]
  46.          mov  es,word ptr reg_es[bx]
  47.          mov  ds,word ptr reg_ds[bx]
  48.          mov  bx,word ptr ss:reg_bx[bx]
  49. int_instr:
  50.          int  00h       ;dummy int number (filled in on each use)
  51.          mov  bp,word ptr dreg[bp]     ; set up address of return regs
  52.          mov  word ptr reg_ax[bp],ax
  53.          mov  word ptr reg_bx[bp],bx
  54.          mov  word ptr reg_cx[bp],cx
  55.          mov  word ptr reg_dx[bp],dx
  56.          mov  word ptr reg_si[bp],si
  57.          mov  word ptr reg_di[bp],di
  58.          mov  word ptr reg_ds[bp],ds
  59.          mov  word ptr reg_es[bp],es
  60.          pushf          ;return flags
  61.          pop  ax        ; in ax
  62.          pop  es
  63.          pop  ds
  64.          pop  bp
  65.          ret
  66. code     ends
  67.          end
  68.