home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / ASM / GRDBDL17.ZIP / MATH.ASM < prev    next >
Encoding:
Assembly Source File  |  1998-10-26  |  1.5 KB  |  114 lines

  1. ;
  2. ; GRDP
  3. ;
  4. ; Copyright(c) LADsoft
  5. ;
  6. ; David Lindauer, camille@bluegrass.net
  7. ;
  8. ;
  9. ; MATH.ASM
  10. ;
  11. ; Function: Handle hex math
  12. ;
  13.     ;MASM MODE
  14.     .MODEL SMALL
  15.     .386
  16.  
  17.  
  18. include  eprints.inc 
  19. include  einput.inc 
  20. include  emtrap.inc 
  21. include  ebreaks.inc 
  22. include  eoptions.inc
  23.     PUBLIC domath
  24.  
  25.     .CODE
  26. ;
  27. ; Do math
  28. ;
  29. printx    PROC
  30.     test    [optdword],1
  31.     jnz    PrintDword
  32.     jmp    PrintWord
  33. printx    ENDP
  34. domath    PROC    
  35.     Call    WadeSpace    ; Wade till address
  36.     jc    readerr
  37.     call    ReadNumber    ; first number
  38.     jc    readerr
  39.     mov    edx,eax
  40.     call    WadeSpace    ; get operator
  41.     jz    readerr
  42.     sub    ebx,ebx
  43.     cmp    al,'*'
  44.     jz    got
  45.     inc    bl
  46.     cmp    al,'/'
  47.     jz    got
  48.     inc    bl
  49.     cmp    al,'+'
  50.     jz    got
  51.     inc    bl
  52.     cmp    al,'-'
  53.     jz    got
  54.     inc    bl
  55.     cmp    al,'%'
  56.     jz    got
  57.     dec    si
  58.     mov    bl,5        ; default operator = default
  59. got:
  60.     inc    si
  61.     call    WadeSpace
  62.     jz    readerr
  63.     call    ReadNumber    ; second number
  64.     jc    readerr
  65.     mov    ecx,eax
  66.     call    WadeSpace
  67.     jnz    readerr
  68.     shl    bl,1        ; execute operand
  69.     mov    eax,edx
  70.     push    eax
  71.     call    crlf
  72.     pop    eax
  73.     call    cs:[bx + jumptab]
  74.     call    printx        ; print result
  75.     clc
  76.     ret
  77. jumptab    dw    xmul,xdiv,xxadd,xsub,xmod,xdefault
  78. xmul:
  79.     mul    ecx
  80.     ret
  81. xmod:
  82.     call    xdiv
  83.     mov    eax,edx
  84.     ret
  85. xdiv:
  86.     or    eax,eax
  87.     jz    nodiv
  88.     sub    edx,edx
  89.     div    ecx
  90. nodiv:
  91.     ret
  92. xxadd:
  93.     add    eax,ecx
  94.     ret
  95. xsub:
  96.     sub    eax,ecx
  97.     ret
  98.  
  99. xdefault:        ; by default act like debug
  100.     push    eax
  101.     push    ecx
  102.     add    eax,ecx
  103.     call    printx
  104.     call    printspace
  105.     pop    ecx
  106.     pop    eax
  107.     sub    eax,ecx
  108.     ret
  109.  
  110. readerr:
  111.     stc
  112.     ret
  113. domath    ENDP
  114. end