home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / asm_kit / bin_asc.asm < prev    next >
Assembly Source File  |  1979-12-31  |  2KB  |  51 lines

  1. ;BIN_ASC.ASM
  2. ;
  3. ;This procedure converts a signed binary number to a six-
  4. ;byte ASCII string (sign plus five digits) in the data
  5. ;segment.  Upon entry, the number to be converted must be
  6. ;in AX and the starting addresss of the memory buffer
  7. ;must be in BX.  Upon return, BX holds the address of 
  8. ;the converted output string and CX holds the length
  9. ;of the string.  Other registers are preserved.
  10. ;
  11. CODE SEGMENT PARA 'CODE'
  12.      ASSUME CS:CODE
  13.      PUBLIC BIN_ASCII
  14.  
  15. BIN_ASCII PROC FAR
  16.        PUSH DX        ;SAVE AFFECTED REGISTERS
  17.        PUSH SI
  18.        PUSH AX        ;SAVE BINARY VALUE
  19.        MOV  CX,6      ;FILL BUFFER WITH SPACES
  20. FILL_BUFFER:
  21.        MOV  BYTE PTR [BX],' '    ;BLANK
  22.        INC  BX
  23.        LOOP FILL_BUFFER
  24.        MOV  SI,10     ;GET READY TO DIVIDE BY 10
  25.        OR   AX,AX     ;IF VALUE IS NEGITIVE
  26.        JNS  CLR_DVD
  27.        NEG  AX        ;MAKE IT POSITIVE
  28. CLR_DVD:
  29.        SUB  DX,DX     ;CLEAR UPPER HALF OF DIVIDEND
  30.        DIV  SI        ;DIVIDE AX BY 10
  31.        ADD  DX,'0'    ;CONVERT REMAINDER TO ASCII DIGIT
  32.        DEC  BX        ;BACK UP THROUGH BUFFER
  33.        MOV  [BX],DL   ;STORE THIS CHAR IN THE STRING
  34.        INC  CX        ;COUNT CONVERTED CHARACTER
  35.        OR   AX,AX     ;ALL DONE?
  36.        JNZ  CLR_DVD   ;N0. GO GET NEXT DIGIT
  37.        POP  AX        ;YES. RETRIEVE ORIGINAL VALUE
  38.        OR   AX,AX     ;WAS IT NEGITIVE?
  39.        JNS  NO_MORE   
  40.        DEC  BX        ;YES. STORE SIGN
  41.        MOV  BYTE PTR [BX],'-'
  42.        INC  CX        ;    AND INCREASE CHARACTER COUNT
  43. NO_MORE:
  44.        POP  SI
  45.        POP  DX
  46.        RET            ;RETURN TO CALLER
  47.  
  48. BIN_ASCII  ENDP
  49. CODE       ENDS
  50.            END
  51.