```Contributor: DAVID DUNSON

{
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
MOV  BX, num
STD
@@1:  MOV  AL, BL
AND  AL, \$0F
OR   AL, \$30
CMP  AL, \$3A
JB   @@2
@@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
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
                                                                                   ```