Jak skonwertować słowo na postać szesnastkową w ASCII

 


Do napisania mojego pierwszego artykułu skłoniła mnie wskazówka dodana przez Dryobatesa o zamianie wartości ośmiobitowej na jej reprezentację dziesiętną w postaci ciągu znaków. Poniższy fragment robi to samo ze słowem z tym, że wynik jest w postaci szesnastkowej. Pierwsza wersja jest zdecydowanie dłuższa od drugiej, ale być może wykonuje się szybciej. Należało by przetestować. Można by jeszcze zoptymalizować je pod kątem Pentium wyższych rzędów, aby w miarę możliwości instrukcje były wykonywane równolegle, ale to już temat na osobną poradę...

Dane wejściowe:
   ax - liczba do zamiany
Dane wyjściowe:
   wartosc - 4 bajty jako Ascii

wartosc db 4 dup(?)

Hex2Ascii Proc   ;wersja dłuższa
   push di
   push ax
   lea di,wartosc+3
   and al,0fh
   call AL2Ascii
   mov [di],al
   dec di
   pop ax
   push ax

   shr al,4
   call AL2Ascii
   mov [di],al
   dec di
   pop ax
   push ax
   
   shr ax,8
   and al,0fh
   call AL2Ascii
   mov [di],al
   dec di
   pop ax
   push ax

   shr ax,12
   call AL2Ascii
   mov [di],al
   pop ax
   pop di
   ret
Hex2Ascii EndP

Hex2Ascii2 Proc   ;wersja krótsza
   push di
   push dx
   push bx
   push ax
   mov dx,ax
   lea bx,wartosc
   mov di,3
@1:
   and al,0fh
   call AL2Ascii
   mov [bx+di],al
   shr dx,4
   mov ax,dx
   dec di
   jns @1

   pop ax
   pop bx
   pop dx
   pop di
   ret
Hex2Ascii2 EndP


AL2Ascii Proc   ;funkcja pomocnicza
   add al,90h
   daa
   adc al,40h
   daa
   ret
AL2Ascii EndP


Funkcja AL2Ascii jest dość powszechnie znanym sposobem na zamianę wartości z zakresu na wartość odpowiednio z zakresu .

Dryobates : dzięki za trafne uwagi
 

Programowanie - najnowsze