home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / _DEC.D < prev    next >
Text File  |  1988-07-11  |  2KB  |  68 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;--------------------------------
  4. ; D E C O D E - CONVERT A SIGNED DECIMAL REPRESENATION
  5. ;        STRING TO SIGNED INTEGER
  6. ;
  7. ; Entry conditions:
  8. ;    SI points to the source string
  9. ; Exit conditions:
  10. ;    AX holds the value
  11. ;    SI points to the last character
  12. ;    STATUS = 1, Bad character encountered
  13. ;    STATUS = 0, End of string encountered
  14. ;
  15. SUBPGM    _DEC
  16. BEGIN    _DEC
  17.     MOV    [STATUS],00    ; CLEAR THE RETURN STATUS
  18.     SUB    CX,CX
  19.     SUB    AX,AX
  20.     CMP    BYTE PTR [SI],'-' ; CHECK FOR SIGN, NEGATIVE?
  21.     JNE    @DE_05        ; NO
  22.     INC    SI        ; YES, MOVE PAST THE CHAR
  23.     MOV    AL,0FFH        ; SETUP A NEGATIVE FLAG
  24. ;
  25. @DE_05:
  26.     PUSH    AX
  27.     SUB    AX,AX
  28.     MOV    DX,3009H    ; DH='0',DL=09
  29. ;
  30. @DE_10:
  31.     MOV    CL,[SI]        ; GET THE CHARACTER
  32.     OR    CL,CL        ; END OF STRING?
  33.     JZ    @DE_15        ; YES, CONTINUE ON...
  34.     SUB    CL,DH        ; LT 0?
  35.     JL    @DE_12        ; YES, EXIT
  36.     CMP    CL,DL        ; GT 9?
  37.     JG    @DE_12        ; YES, EXIT
  38.     SHL    AX,1        ; * 2
  39.     MOV    BX,AX
  40.     SHL    AX,1        ; * 4
  41.     SHL    AX,1        ; * 8
  42.     ADD    AX,BX        ; * 10
  43.     ADD    AX,CX        ; + NEW DECIMAL LOCATION
  44.     INC    SI
  45.     JMP    SHORT @DE_10    ; CONTINUE TILL DONE...
  46. ;
  47. @DE_12:
  48.     POP    BX        ; FLUSH THE STACK
  49.     CMP    CL,0FDH        ; WAS IT A NEGATIVE SIGN?
  50.     JZ    @DE_16        ; YES, EXIT GOOD
  51.     XOR    AX,AX        ; RETURN BAD
  52.     MOV    [STATUS],01
  53.     RET
  54. ;
  55. @DE_15:
  56.     POP    BX        ; GET THE NEGATIVE FLAG
  57.     OR    BX,BX
  58.     JZ    @DE_17
  59. ;
  60. @DE_16:
  61.     NEG    AX
  62. ;
  63. @DE_17:
  64.     RETURN
  65. ;
  66. ENDPGM    _DEC
  67. ;
  68.