; *------------------------------------------------------------------------* ; * ASCISCAN * ; *------------------------------------------------------------------------* ; Retourne la valeur de AX … l'appuit d'une touche. ASCISCAN SEGMENT ORG 100h ASSUME CS:ASCISCAN JMP debut ;--Variables et constantes---------------------------------------------------- buffer DB 10 DUP (0) ;----------------------------------------------------------------------------- ;--Proc‚dures----------------------------------------------------------------- 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 ;--- 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 h‚xad‚cimal ; Utilise: rien AND AL, 0Fh CMP AL, 10 JB CONV_chiffre ADD AL, 55 JMP CONV_stop CONV_chiffre: ADD AL, 48 CONV_stop: RET SYS_conv_digit ENDP ;--- SYS_conv_hexa PROC ;--CONVersion_HEXA (SYSTEME) ; Converti une valeur en chaŒne hexad‚cimal ; Entr‚e(s): AX/AL: valeur, CL: nombre de digits, SI: offset chaŒne ; Sortie(s): SI: valeur convertie 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 ;----------------------------------------------------------------------------- debut: ;----------------------------------------------------------------------------- MOV SI, OFFSET buffer retour_saisie: MOV AH, 01h INT 16h JNE retour_saisie MOV AH, 0 INT 16h touche_entree: CMP AL, 13 ;--Touche [Entr‚e] JNE touche_echap JMP fin_prog touche_echap: CMP AL, 27 ;--Touche [Echap] JNE touche_normale JMP fin_prog touche_normale: MOV CL, 4 CALL SYS_conv_hexa CALL affiche JMP retour_saisie fin_prog: INT 20h ;----------------------------------------------------------------------------- ASCISCAN ENDS END