;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Synopsis: Affiche une chaîne de caractères se terminant par NULL ;; ; Entree: SI -> pointe sur la chaîne à afficher ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; afficheChaine: push eax xor eax, eax .caractereSuivant: lodsb ; ds:esi -> al or al, al ; fin chaine ? jz .fin cmp al, 112 jne .ligneOK add dword [curseur], 8 mov dword [curseur + 2], 0 jmp .caractereSuivant .ligneOK: call afficheCaractere jmp .caractereSuivant .fin: pop eax ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; nombreVersChaine ;; ;;------------------------------------------------------------------;; ;; Ecrit dans la chaîne pointée par EDI le nombre contenu dans EAX ;; ;; si CL est à un, on écrit un caractère terminal ;; ;; CH contient le nombre minimal de caractères à utiliser ;; ;; EBX contient la base ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; nombreVersChaine: push edx push ecx xor cl, cl .stocke_digit: xor edx, edx div ebx push edx ; Sauve le reste dans la pile inc cl or eax, eax ; Si le quotient n'est pas nul jne .stocke_digit ; on recommence ;Les digits sont stockés dans la pile .ajout_zero: cmp ch, cl jbe .clearCH push 0 ; Identifiant du caractère de remplissage moins 1 inc cl jmp .ajout_zero .clearCH: xor ch, ch ;Affichage du chiffre : On en affiche au moins un : zéro .affiche_digit: pop eax add al, 1 stosb ; met AL dans l'octet pointé par EDI et incrémente EDI loop .affiche_digit pop ecx ; on récupère le paramètre cx test cl, 0b1 ; s'il est à 1, on écrit un caractère terminal jz .depile mov byte [edi], 0 .depile: pop edx ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Fin nombreVersChaine ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; litChaine ;; ;;------------------------------------------------------------------;; ;; Ecrit dans la chaîne pointée par EDI les caractères écrits au ;; ;; clavier, jusqu'à un retour chariot. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; litChaine: push eax push ebx mov byte [derniereTouche], 0 .attend_clavier: xor eax, eax cmp byte [derniereTouche], 0 jz .attend_clavier mov al, [derniereTouche] mov byte [derniereTouche], 0 mov ebx, traductionASCII add ebx, eax mov al, [ebx] cmp al, 110 ;Traitement de l'espace arrière jne .testTab dec edi mov al, 51 call afficheCaractere sub dword [curseur], 0x100000 jmp .attend_clavier .testTab: cmp al, 111 ;Traitement de la tabulation avant jne .testEntree dec edi mov eax, (51<<24)+(51<<16)+(51<<8)+51 stosd add word [curseur+2], 3 .testEntree: cmp al, 112 je .fin_attend_clavier test byte[touchesActives + 5], 0b100 ;On teste le shift gauche enfoncé jnz .shift test byte[touchesActives + 6], 0b1000000 ;On teste le shift droit enfoncé jz .RAS .shift: cmp al, 114 ;On ne stocke pas un Shift gauche comme touche je .attend_clavier cmp al, 115 ;On ne stocke pas un Shift droit comme touche je .attend_clavier add al, 73 .RAS: stosb call afficheCaractere jmp .attend_clavier .fin_attend_clavier: stosb ;Stocke le saut de ligne xor al, al ;Stocke une fin de chaîne stosb mov al, 51 ;Supprime le curseur à la fin de la ligne call afficheCaractere add word [curseur], 7 mov word [curseur+2], 0 dec edi pop ebx pop eax ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Fin litChaine ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;