**[**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**]**