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

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;--------------------------------
  4. ; _ E N C  -  CONVERT SIGNED 16 BIT VALUE TO A STRING
  5. ;
  6. ; Entry conditions:
  7. ;    AX holds the integer
  8. ;    DI holds the string
  9. ; Exit conditions:
  10. ;    The target string holds the decimal representation
  11. ;
  12. SUBPGM    _ENC
  13. ;
  14. NUM_TABLE    LABEL    WORD
  15.     DW    10000
  16.     DW    1000
  17.     DW    100
  18.     DW    10
  19. ;
  20. BEGIN    _ENC
  21.     PUSH    ES        ; SAVE ES
  22.     PUSH    DS        ; & MAKE IT POINT TO OUR DATA SEG
  23.     POP    ES
  24.     MOV    BX,'- '        ; PLACE SPACE IN BL FOR POSITIVE #
  25.     TEST    AX,8000H    ; NEGATIVE?
  26.     JZ    @EN_05        ; NO, CONTNUE ON...
  27.     XCHG    BL,BH        ; MOVE THE NEGATIVE INTO BL
  28.     NEG    AX        ; STRAIGHTEN OUT THE NUMBER
  29. ;
  30. @EN_05:
  31.     PUSH    BX        ; SAVE THE SIGN
  32.     SUB    DH,DH        ; CLEAR THE SAVING FLAG
  33.     MOV    CX,04        ; 4 LOOPS THROUGH THE TABLE
  34.     MOV    SI,OFFSET NUM_TABLE
  35.     CMP    AX,8000H    ; IS IT A -0?
  36.     JNZ    @EN_10        ; NO, CONTINUE ON...
  37.     DEC    AX        ; MAKE IT 32767
  38. ;
  39. @EN_10:
  40.     MOV    BX,[SI]        ; GET THE NEXT COMPARISON VALUE
  41.     ADD    SI,2
  42.     SUB    DL,DL        ; DX HOLDS THE DIGIT COUNT
  43. ;
  44. @EN_15:
  45.     CMP    AX,BX        ; AX GT THE 10 BASE #?
  46.     JL    @EN_20        ; NO, MOVE ON...
  47.     SUB    AX,BX
  48.     INC    DL        ; DL HOLDS THE COUNT
  49.     JMP    SHORT @EN_15
  50. ;
  51. @EN_20:
  52.     OR    DH,DH        ; SAVE?
  53.     JNZ    @ENC_200    ; YES, GO DO IT
  54.     OR    DL,DL        ; ALREADY ZERO?
  55.     JZ    @EN_21        ; YES, DON'T SAVE LEADING ZEROS
  56. ;
  57. @ENC_200:
  58.     ADD    DL,'0'        ; DL HOLDS THE NEW CHARACTER
  59.     MOV    [DI],DL        ; SAVE THE CHARACTER
  60.     INC    DI
  61.     INC    DH        ; SET FLAG INDICATING STORAGE IN PROGRESS
  62. ;
  63. @EN_21:
  64.     LOOP    @EN_10        ; CONTINUE TILL ALL IS ENCODED
  65. ;
  66. ; SAVE THE FINAL DIGIT
  67. ;
  68.     ADD    AL,'0'
  69.     STOSB            ; SAVE THE LAST CHARACTER
  70.     POP    AX        ; GET THE SIGN
  71.     STOSB            ; SAVE IN THE STRING
  72.     SUB    AX,AX
  73.     STOSB            ; SET THE TERMINATOR
  74.     POP    ES
  75.     RET
  76.  
  77. ENDPGM    _ENC
  78. ;
  79.