home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / seval3.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.1 KB  |  67 lines

  1. ;
  2. ; SYSLIB Module Name:  SEVAL3
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    EVAL8
  8. ; Module External References:
  9. ;    None
  10. ;
  11.  
  12. ;
  13. ;  EVAL8 --
  14. ;    Convert the string of ASCII octal digits pointed to by HL
  15. ; into a binary value; string is converted until invalid digit is
  16. ; encountered.
  17. ;    On return, HL points to error character, DE=value, A=E (low
  18. ; order 8 bits of value).  BC not affected.
  19. ;
  20.  
  21. EVAL8::
  22.     PUSH    B    ; SAVE BC
  23.     LXI    D,0    ; SET DE=0 INITIALLY
  24.  
  25. ;  Get next digit and check for '0' - '9'
  26. E8L:
  27.     MOV    A,M    ; GET BYTE
  28.     SUI    '0'    ; CHECK FOR RANGE
  29.     JC    DONE
  30.     CPI    8
  31.     JNC    DONE
  32.  
  33.     PUSH    PSW    ; SAVE VALUE
  34.  
  35. ;  Multiply DE by 8
  36. MUL8:
  37.     PUSH    H    ; SAVE HL
  38.     LXI    H,0    ; ACC=0
  39.     MVI    B,8    ; 8 LOOPS
  40. MUL8L:
  41.     DAD    D    ; HL=HL+DE
  42.     DCR    B    ; COUNT DOWN
  43.     JNZ    MUL8L
  44.     MOV    D,H    ; NEW DE
  45.     MOV    E,L
  46.     POP    H    ; RESTORE HL
  47.  
  48. ;  Add in A
  49.     POP    PSW    ; GET LATEST DIGIT
  50.     ADD    E    ; A=A+E
  51.     MOV    E,A
  52.     MOV    A,D    ; ADD TO D IF NECESSARY
  53.     ACI    0
  54.  
  55. ;  Continue
  56.     INX    H    ; PT TO NEXT CHARACTER
  57.     JMP    E8L
  58.  
  59. ;  Done -- Result already in DE; Set A=E
  60. DONE:
  61.     MOV    A,E    ; A=E
  62.     POP    B    ; RESTORE BC
  63.  
  64.     RET
  65.  
  66.     END
  67.