; *------------------------------------------------------------------------* ; * T_COUPE * ; *------------------------------------------------------------------------* ; Affiche une chaŒne … l'‚cran qui doit ˆtre coup‚e par TXT_coup_chaine ; Auteur: Yann CLEMENT ; http://kerozenn.online.fr ;--------------------- ; Test de: ; - TXT_donn_longueur ; - TXT_remp_chaine ; - TXT_coup_chaine ;--------------------- T_COUPE SEGMENT ORG 100h ASSUME CS:T_COUPE JMP debut ;--Variables et constantes---------------------------------------------------- TXT_mess_test DB '** Ceci est un test, T_COUPE doit couper cette chaŒne de caractŠres **', 10, 13, 0 TXT_tron_chaine DB '...', 0 ;----------------------------------------------------------------------------- ;--Proc‚dure------------------------------------------------------------------ TXT_donn_longueur PROC ;--DONNe_LONGUEUR (TEXTE) ; Donne la longueur d'une chaŒne ; Entr‚e(s): SI: offset chaŒne ; Sortie(s): CL: longueur ; Utilise: rien PUSH AX PUSH SI MOV CL, 0 CLD DONN_nombre: LODSB CMP AL, 0 JE DONN_fin INC CL JMP DONN_nombre DONN_fin: POP SI POP AX RET TXT_donn_longueur ENDP ;--- TXT_remp_chaine PROC ;--REMPlace_CHAINE (TEXTE) ; Remplace une chaŒne (DS:SI) par le contenu d'une autre (ES:DI) ; Entr‚e(s): SI: offset chaŒne point‚, DI: chaŒne source, ; CH: d‚calage, CL: nombre de caractŠres ; Sortie(s): SI: chaŒne remplac‚e ; Utilise: rien PUSH AX PUSH BX PUSH CX PUSH ES PUSH SI PUSH DI PUSH DS POP ES MOV BX, 0 MOV BL, CH ADD SI, BX MOV CH, 0 REMP_nouveau: MOV AL, ES:[DI] MOV DS:[SI], AL INC CH INC DI INC SI CMP CH, CL JNE REMP_nouveau POP DI POP SI POP ES POP CX POP BX POP AX RET TXT_remp_chaine ENDP ;--- TXT_coup_chaine PROC ;--COUPure_CHAINE (TEXTE) ; Coupe une chaŒne si trop longue ; Entr‚e(s): SI: offset chaine, CL: longueur ; Sortie(s): SI: chaŒne tronqu‚e si trop longue ; Utilise: TXT_donn_longueur PUSH CX PUSH ES PUSH DS POP ES MOV CH, CL CALL TXT_donn_longueur CMP CL, CH JNA COUP_ok MOV CL, 4 SUB CH, 3 MOV DI, OFFSET TXT_tron_chaine CALL TXT_remp_chaine COUP_ok: POP ES POP CX RET TXT_coup_chaine 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 CL, 22 ;--Nombre de caractŠres … afficher MOV SI, OFFSET TXT_mess_test ;--Offset de la chaŒne CALL TXT_coup_chaine ;--Appel la fonction CALL affiche ;--Affiche le r‚sultat INT 20h ;--Fin ;----------------------------------------------------------------------------- T_COUPE ENDS END