[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]

    {
    I've seen requests for these two procedures several times, and finally got
    around to writing them in ASM.

    { ------- CUT HERE ------- }

    (* Hex converts a number (num) to Hexadecimal.                      *)
    (*    num  is the number to convert                                 *)
    (*    nib  is the number of Hexadecimal digits to return            *)
    (* Example: Hex(31, 4) returns '001F'                               *)

    Function Hex(num: Word; nib: Byte): String; Assembler;
    ASM
          PUSHF
          LES  DI, @Result
          XOR  CH, CH
          MOV  CL, nib
          MOV  ES:[DI], CL
          JCXZ @@3
          ADD  DI, CX
          MOV  BX, num
          STD
    @@1:  MOV  AL, BL
          AND  AL, $0F
          OR   AL, $30
          CMP  AL, $3A
          JB   @@2
          ADD  AL, $07
    @@2:  STOSB
          SHR  BX, 1
          SHR  BX, 1
          SHR  BX, 1
          SHR  BX, 1
          LOOP @@1
    @@3:  POPF
    End;

    (* Binary converts a number (num) to Binary.                        *)
    (*    num  is the number to convert                                 *)
    (*    bits is the number of Binary digits to return                 *)
    (* Example: Binary(31, 16) returns '0000000000011111'               *)

    Function Binary(num: Word; bits: Byte): String; Assembler;
    ASM
          PUSHF
          LES  DI, @Result
          XOR  CH, CH
          MOV  CL, bits
          MOV  ES:[DI], CL
          JCXZ @@3
          ADD  DI, CX
          MOV  BX, num
          STD
    @@1:  MOV  AL, BL
          AND  AL, $01
          OR   AL, $30
          STOSB
          SHR  BX, 1
          LOOP @@1
    @@3:  POPF
    End;

    { ------- CUT HERE ------- }

    These procedures are fully optomized to my knowledge and have been tested
    against normal Pascal routines that perform the same functions.  Test results
    returned that Hex performed aprox. 2.14 times faster than it's Pascal
    equivilent, and Binary performed aprox. 14 times faster than it's Pascal
    equivilent.

    Enjoy!
    David

[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]