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

      From: Ryan Thompson                                Read: Yes    Replied: No

    { I have an Integer to hex in pascal with ASM: }

    Function HexOf(I : Longint) : String; Assembler;
      Asm
        jmp   @1                         { Skip table }
      @0:
        db    '0123456789ABCDEF'
      @1:
        cld                              { Clear direction flag }
        les   di,@Result                 { ES:DI = Function return data }
        mov   ax,$0008                   { Set String size }
        stosb                            { in the output, }
        mov   cx,4                       { Loop 4x for four bytes }
        mov   si,3
      @2:
        mov   al,byte [I+si]             { Load AL with next byte }
        dec   si
        push  si                         { SAVE index register! }
        mov   bl,al                      { Load DL... }
        mov   dl,bl                      { and BL, }
        and   bx,$00F0                   { prepare and ... }
        {$IFOPT G+}
        shr   bx,4
        {$ELSE}
        shr   bx,1                       { convert BL to high nybble only, }
        shr   bx,1
        shr   bx,1                       { 8088-compatible }
        shr   bx,1
        {$ENDIF}
        and   dx,$000F                   { and DL to low nybble only. }
        mov   si,bx                      { move high nybble into index, }
        mov   al,byte [cs:@0+si]         { read Character for that nybble, }
        stosb                            { Write high nybble }
        mov   si,dx                      { move low nybble into index, }
        mov   al,byte [cs:@0+si]         { read Character for that nybble, }
        stosb                            { Write low nybble }
        pop   si                         { RESTORE index register! }
        loop  @2                         { Dec CX; Loop if CX <> 0 }
      End;

    {
      It's not wonderfully written code, but it does work.  Spits out an 8-digit
    hex string from a longint.  You could either delete the unneeded parts of the
    string or make a version that doesn't do all four bytes.
    }

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