; *------------------------------------------------------------------------* ; * T_HEXA * ; *------------------------------------------------------------------------* ; Affiche une valeur contenue dans AX en hexad‚cimal. ; Auteur: Yann CLEMENT ; http://kerozenn.online.fr ;--------------------- ; Test de: ; - SYS_conv_hexa ; - SYS_conv_digit ;--------------------- T_HEXA SEGMENT ORG 100h ASSUME CS:T_HEXA JMP debut ;--Variables et constantes---------------------------------------------------- TXT_buffer_test DB 10 DUP (0) ;----------------------------------------------------------------------------- ;--Proc‚dures----------------------------------------------------------------- SYS_conv_digit PROC ;--CONVertion_DIGIT (SYSTEME) ; Converti une valeur de 4 bits en chaŒne hexad‚cimal ; Entr‚e(s): AL: valeur ; Sortie(s): AL: valeur en ASCII hexad‚cimal ; Utilise: rien AND AL, 0Fh CMP AL, 10 JB CONV_chiffre ADD AL, 55 JMP CONV_fin CONV_chiffre: ADD AL, 48 CONV_fin: RET SYS_conv_digit ENDP ;--- SYS_conv_hexa PROC ;--CONVersion_HEXA (SYSTEME) ; Converti une valeur en chaŒne hexad‚cimal ; Entr‚e(s): AL: valeur, CL: nombre de digits, SI: offset chaŒne ; Sortie(s): SI: valeur contertie en ASCII hexad‚cimal ; Utilise: SYS_conv_digit PUSH AX PUSH BX PUSH CX PUSH SI MOV BX, AX CMP CL, 2 JE CONV_2digits AND AX, 0F000h MOV CL, 12 SHR AX, CL CALL SYS_conv_digit MOV DS:[SI], AL INC SI MOV AX, BX AND AX, 0F00h MOV CL, 8 SHR AX, CL CALL SYS_conv_digit MOV DS:[SI], AL INC SI CONV_2digits: MOV AX, BX AND AX, 0F0h MOV CL, 4 SHR AX, CL CALL SYS_conv_digit MOV DS:[SI], AL INC SI MOV AX, BX AND AX, 0Fh CALL SYS_conv_digit MOV DS:[SI], AL INC SI MOV BYTE PTR DS:[SI], 104 INC SI MOV BYTE PTR DS:[SI], 0 POP SI POP CX POP BX POP AX RET SYS_conv_hexa ENDP ;--- affiche PROC ; Affiche une chaine de type ASCIIZ. ; SI doit contenir l'adresse de la chaine. PUSH AX PUSH BX PUSH SI CLD aff_retour: LODSB OR AL, AL JZ aff_saut MOV AH, 0Eh MOV BX, 0007h INT 10h JMP aff_retour aff_saut: POP SI POP BX POP AX RET affiche ENDP ;----------------------------------------------------------------------------- debut: ;--Code de test---------------------------------------------------------------- MOV SI, OFFSET TXT_buffer_test ;--Initialise un buffer MOV CL, 4 ;--Convertion de 4 digits MOV AX, 0F2A5h ;--Valeur … convertir CALL SYS_conv_hexa ;--Appel de la fonction CALL affiche ;--Affiche la valeur INT 20h ;--Fin ;----------------------------------------------------------------------------- T_HEXA ENDS END