1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
;=====================================================================
;Conversion en ASCII de ce qui se trouve en ds=40 dans loffset 00 a 07
;=====================================================================
.MODEL SMALL
.STACK
.DATA
cr EQU 13
lf EQU 10
chextab DB '0123456789ABCDEF' ; pour conversion hexa => ASCII
abElem DB 16 DUP (' '), cr, lf, '$' ; tableau contenant les valeurs hexa converties en ASCII
; 1 octet => 2 caracteres ASCII en hexa
.CODE
main:
mov ax, @data
mov ds, ax ; ds est le segment de donnees, ou on trouve abElem
mov si,offset abElem ; si pointe sur la chaine resultat
mov ax,40h
mov es,ax ; es segment = 40h, zone data du BIOS
xor di,di ; di pointe sur le premier octet de la zone data du BIOS
; a tout moment, ds:[si] pointe sur le prochain emplacement de la chaine resultat (2 octets)
; es:[di] pointe sur le prochain octet a traiter de la zone data du BIOS
mov cx,8 ; 8 octets a traiter dans la zone BIOS data
boucle:
mov dl,es:[di] ; charge octet de la zone BIOS
call convert ; charge DS:[SI] avec la valeur de DL convertie en ASCII (hexa)
inc di ; prochain octet de la zone data
inc si ; prochain emplacement de la chaine resultat
inc si
loop boucle ; boucler jusqu'a cx nul
mov ax, 0900h ;affichage du resultat abElem
lea dx, abElem
int 21h
mov ax,4c00h ; retour au DOS
int 21h
;-- routine de conversion en ascii -----------
; entree: DL octet a convertir en ASCII
; DS:SI adresse sortie hexa ASCII (2 octets)
; sortie: DS:[SI]
;
convert proc ; conversion en ASCII
xor ax,ax
mov al,dl ; on va traiter le poids faible
and al,0Fh ; garde le quartet inferieur de al
lea bx,chextab ; ds:bx pointe sur la table de conversion
xlatb ; AL <= DS:[BX+AL]
mov [si+1],al ; stocke code ASCII poids faible
mov al,dl ; on s'occupe maintenant du poids fort
shr ax,1 ; garde quartet poids fort (decalage a droite de 4 bits)
shr ax,1
shr ax,1
shr ax,1
xlatb ; charge le code ASCII pour le poids fort depuis chextab
mov [si],al ; stocke code ASCII poids fort dans la chaine resultat
ret
convert endp
END main |
Partager