;:::::::::::::::::::::::::::::::::::::::::
;:      Sito:  www.byteman.it  OpenWeb  ::
;:  Raccolta:  Particelle PAS+ASM       ::
;:    Autore:  Salvo Rosta aka byteman  ::
;:    Titolo:  XHEXSTR.ASM              ::
;: Revisione:  07-04-1994               ::
;:::::::::::::::::::::::::::::::::::::::::

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:        XHEXSTR.ASM  -  Versione: 19-9-1991, a cura di Salvo Rosta.       ::
;:                                                                          ::
;: Function  XHexStr(Num,Count)       ; Converte Num in stringa di Hex      ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
CODE      SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE
          PUBLIC  XHexStr

Function  EQU     DWORD PTR [BP+12]
Num       EQU     DWORD PTR [BP+8]
Count     EQU     BYTE  PTR [BP+6]

XHexStr   PROC    FAR
          PUSH    BP
          MOV     BP,SP
          MOV     DX,DS               ;Salvataggio DS

          LES     DI,Function         ;Lettura Puntatore Funzione Stringa ES:DI
          LDS     SI,Num              ;Lettura Puntatore Numero DS:SI
          MOV     AL,Count            ;Lettura Numero Byte
          XOR     AH,AH
          MOV     CX,AX
          ADD     SI,AX
          DEC     SI                  ;SI punta Hi(Num)
          CLD                         ;Direzione di scansione normale
          SHL     AX,1                ;Calcolo Numero Finale Caratteri
          STOSB                       ;Scrittura Lunghezza Stringa
LoopHex:  STD                         ;Direzione di scansione inversa
          LODSB                       ;Prelievo Byte da trattare (a ritroso)
          MOV     AH,AL               ;Salvataggio in AH
          SHR     AL,1                ;Trattamento Nibble High
          SHR     AL,1
          SHR     AL,1
          SHR     AL,1
          ADD     AL,90h
          DAA
          ADC     AL,40h
          DAA
          CLD
          STOSB                       ;Scrittura Carattere Nibble High
          MOV     AL,AH               ;Trattamento Nibble Low
          AND     AL,0Fh
          ADD     AL,90h
          DAA
          ADC     AL,40h
          DAA
          STOSB                       ;Scrittura Carattere Nibble Low
          LOOP    LoopHex

          MOV     DS,DX               ;Ripristino DS
          POP     BP
          RET     6
XHexStr   ENDP

CODE      ENDS
          END